Java EE 6示例– Galleria第2部分

您可能在最后一篇Java EE 6 Galleria示例帖子中关注了我。 第一个是基本介绍。 第二个是关于在最新的GlassFish上运行它。 有人提到RedHat,我们应该研究将这个示例从GlassFish中移除。 很好;)感谢您的好主意。 这正是我们今天要做的。 我将把Galleria示例引入最新的WebLogic 12c。

制备

让自己有一些配置的心情。 您已经安装了最新的NetBeans 7.1 ,并且将在一秒钟内下载WebLogic 12c ZIP发行版。 下载wls1211_dev.zip后,将其放到所选位置并解压缩。 从现在开始,我们将这个文件夹称为%MW_HOME%文件夹。 打开命令行并在其中设置%JAVA_HOME%,%JAVA_VENDOR%和%MW_HOME%变量:

set JAVA_HOME=D:\jdk1.7.0_04
set MW_HOME=D:\temp\wls12zip
set JAVA_VENDOR=Sun

完成此步骤后,最后一步是在MW_HOME目录中运行安装配置脚本configure.cmd。 这是一次性的事情。

设置您的WebLogic域

接下来,我们需要一个WebLogic域。 打开一个新的命令行提示符。 通过运行%MW_HOME%\ wlserver \ server \ bin \ setWLSEnv.cmd脚本在当前Shell中设置环境。 执行%MW_HOME%\ wlserver \ common \ bin \ config.cmd,然后按照向导在您选择的文件夹(例如D:\ temp \ test-domain)中创建一个名为test-domain的基本WebLogic Server域。 输入您选择的用户名和密码(例如system / system1),然后单击向导,直到您在其下的“完成”按钮为止。 WebLogic需要Derby客户端jar文件才能配置和使用数据库。 将derbyclient-10.8.2.2.jar从m2存储库复制到test-domain \ lib文件夹。 现在,通过运行新创建的域目录中的startWebLogic.cmd,手动启动新创建的域。 导航到http:// localhost:7001 / console并使用上面的凭据登录,以验证一切是否正常运行。 导航到“服务>数据源”,然后从表上方选择“新建”按钮。 选择一个“通用数据源”并输入您选择的名称(例如GalleriaPool),然后输入jdbc / galleriaDS作为JNDI名称。 选择Derby作为数据库类型,然后单击“下一步”。 选择Derby的驱动程序(类型4),然后单击“下一步”和“下一步”,然后输入连接属性(数据库:GALLERIATEST,主机:localhost。用户名和密码:APP”,然后单击“下一步”。如果需要,可以单击单击顶部的“测试配置”按钮,并确保所有设置均以正确的方式进行。

接下来是最棘手的部分。 我们需要像为GlassFish配置的那样的JDBC领域。 这里的第一个区别是,我们实际上并没有创建一个新的领域,而是向可用的领域添加了一种身份验证机制。 WebLogic有一个令人讨厌的限制。 您可以配置任意多个安全领域,但在给定时间只能激活一个。 这让我停了一会儿,直到我从Michel Schildmeijer得到了小费(谢谢,顺便说一句!)。 导航到“安全领域”,然后从表中选择“ myrealm”。 切换到提供程序选项卡。 选择身份验证提供者表格上方的“新建”。 输入“ GalleriaAuthenticator”作为名称,然后从下拉框中选择“ SQLAuthenticator”作为类型。 单击确定。 选择GalleriaAuthenticator并设置控制标志:SUFFICIENT并保存。 之后,切换到“提供商特定”选项卡。 输入以下内容:

Data Source Name: GalleriaPool
Password Style Retained: unchecked
Password Algorithm: SHA-512
Password Style: SALTEDHASHED
SQL Get Users Password: SELECT PASSWORD FROM USERS WHERE USERID = ?
SQL Set User Password: UPDATE USERS SET PASSWORD = ? WHERE USERID = ?
SQL User Exists: SELECT USERID FROM USERS WHERE USERID = ?
SQL List Users: SELECT USERID FROM USERS WHERE USERID LIKE ?
SQL Create User: INSERT INTO USERS VALUES ( ? , ? )
SQL Remove User: DELETE FROM USERS WHERE USERID = ?
SQL List Groups: SELECT GROUPID FROM GROUPS WHERE GROUPID LIKE ?
SQL Group Exists: SELECT GROUPID  FROM GROUPS WHERE GROUPID  = ?
SQL Create Group: INSERT INTO GROUPS VALUES ( ? )
SQL Remove Group: DELETE FROM GROUPS WHERE GROUPID  = ?
SQL Is Member: SELECT USERID FROM USERS_GROUPS WHERE GROUPID  = ? AND USERID = ?
SQL List Member Groups: SELECT GROUPID  FROM USERS_GROUPS WHERE USERID  = ?
SQL List Group Members: SELECT USERID FROM USERS_GROUPS WHERE GROUPID = ? AND USERID LIKE ?
SQL Remove Group Memberships: DELETE FROM USERS_GROUPS WHERE GROUPID = ? OR GROUPID = ?
SQL Add Member To Group: INSERT INTO USERS_GROUPS VALUES( ?, ?)
SQL Remove Member From Group: DELETE FROM USERS_GROUPS WHERE GROUPID = ? AND USERID = ?
SQL Remove Group Member: DELETE FROM USERS_GROUPS WHERE GROUPID = ?
Descriptions Supported: unchecked

保存您的更改。 然后返回“提供商”标签。 单击“重新排序”按钮,然后将GalleriaAuthenticator推到列表顶部。 完成后单击“确定”,然后停止您的WebLogic实例。 您可以随时重新启动它。

配置您的项目

Java EE是可移植的。 对。 而且,您应该能够在不对WebLogic 12c进行任何更改的情况下运行相同的部署。 那是理论。 实际上,您将不得不接触部署。 因为WebLogic的Hibernate存在一些问题。 而且,与GlassFish相比,部署方面的问题要复杂得多。 首先,您必须创建一个“ galleria-ear \ src \ main \ application \ META-INF”文件夹。 将空白的weblogic-application.xml放入其中,并在其中放入以下代码:

<?xml version='1.0' encoding='UTF-8'?>
<weblogic-application xmlns="http://xmlns.oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.4/weblogic-application.xsd"><prefer-application-packages><package-name>antlr.*</package-name></prefer-application-packages>
</weblogic-application>

这告诉WebLogic与服务器中已经存在的库相比,更喜欢应用程序打包的库。 让我们继续。 我们需要将Hibernate依赖项添加到耳朵。 使用GlassFish,我们跳过了这一步,因为我们在服务器上安装了Hibernate软件包。 开始了。 打开galleria-ear pom.xml并将以下内容添加到“依赖项”部分:

<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.0.1.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.0.1.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>4.2.0.Final</version></dependency><dependency><groupId>org.jboss.logging</groupId><artifactId>jboss-logging</artifactId><version>3.1.0.CR2</version></dependency>

您还需要查看maven-ear-plugin并将以下内容添加到<configuration>:

<defaultLibBundleDir>lib</defaultLibBundleDir>

如果已经存在,请删除commons编解码器jarModule。 它没有问题,但已打包到ear / lib文件夹中,因此您可以跳过它。

接下来,导航到galleria-jsf项目并打开web.xml。 <login-config>不完整,应如下所示:

<login-config><auth-method>FORM</auth-method><form-login-config><form-login-page>/Login.xhtml</form-login-page><form-error-page>/Login.xhtml</form-error-page></form-login-config></login-config>
<security-role><description>All registered Users belong to this Group</description><role-name>RegisteredUsers</role-name></security-role>

您还需要定义可能的角色,否则WebLogic安全性内容将开始抱怨。

将一个空白的weblogic.xml添加到galleria-jsf \ src \ main \ webapp \ WEB-INF文件夹中,并添加以下几行:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"><security-role-assignment><role-name>RegisteredUsers</role-name><principal-name>RegisteredUsers</principal-name></security-role-assignment> <session-descriptor><timeout-secs>3600</timeout-secs><invalidation-interval-secs>60</invalidation-interval-secs><cookie-name>GalleriaCookie</cookie-name><cookie-max-age-secs>-1</cookie-max-age-secs><url-rewriting-enabled>false</url-rewriting-enabled></session-descriptor>
</weblogic-web-app>

我们在这里将web.xml角色映射到WebLogic角色。 您可能已经跳过了这个,但是我喜欢这种方式,所以您不会感到困惑。 session-descriptor元素负责JSESSION cookie名称。 如果您不进行更改,则会遇到登录用户登录管理控制台的麻烦。
继续执行galleria-ejb项目。 在“ galleria-ejb \ src \ main \ resources \ META-INF”文件夹中创建一个空白的weblogic-ejb-jar.xml。 将以下代码放入其中:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd"><security-role-assignment><role-name>RegisteredUsers</role-name><principal-name>RegisteredUsers</principal-name></security-role-assignment>
</weblogic-ejb-jar>

与web.xml / weblogic.xml相比,这还告诉WebLogic如何将ejb-jar.xml安全角色映射到WebLogic角色。 好的,打开persistence.xml并添加以下行:

<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" /><property name="hibernate.transaction.jta.platform"value="org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform" />

第一个明确选择用于休眠的Derby方言。 第二个告诉Hibernate在何处以及如何查找事务。 全做完了。 现在,您应该能够再次构建项目并进行部署。 使用管理控制台或NetBeans进行部署。 感谢您抽出宝贵时间关注这篇冗长的帖子。 希望对您有所帮助!

是否想知道启动和运行单元和集成测试所需的时间? 继续阅读!

是时候继续Vineet的Java EE 6 Galleria示例了。 经过一番介绍之后 ,GlassFish和WebLogic 12c部署的基本入门指南终于可以开始进行测试了。 由于两个原因,我在前面的文章中跳过了这一部分。 第一个显然是我想写一篇单独的文章。 第二个是需要做的工作才能在最新的GlassFish 3.1.2上启动并运行它。 Vineet和团队在几天前发布Arquillian GlassFish Remote Container CR3方面做得很出色,现在还涵盖了GlassFish 3.1.2。 是时候开始测试Galleria示例了。

你要测试什么

构建Galleria的目的是通过使用JUnit 4编写的单元测试和集成测试来实现全面的测试覆盖。EJB和域模型的单元测试和集成测试依赖于EJB 3.1容器API。 表示层的集成测试依赖于Arquillian项目及其Drone扩展(用于执行Selenium测试)。
请确保更新到Galleria项目的最新资源,因为Vineet已将Arquillian GlassFish容器更新为CR3,并将Selenium内容更新为支持最新的FireFox浏览器。

单元测试域层

域层的测试分为五类。 前三个(Bean验证测试,相互注册验证测试,构造函数测试,等于和哈希码方法)涵盖了几乎所有基于JPA的应用程序的基本需求。 如果您沿着galleria-ejb \ src \ test源代码漫步,则可以在info.galleria.domain包中看到它们。 每个域对象都包含一个套件类,该套件类包括所有三种单元测试。

让我们从查看Bean验证测试开始。 与JavaBeans属性中的getter和setter关联的行为非常容易验证。 所有需要做的就是首先调用setter,然后调用getter,并验证getter返回的实例是否等于传递给setter的实例。 该项目使用
为此,可以使用BeanVerifier类(在galleria-ejb模块的src / tests / java根目录下)。 AlbumBeanVerifier测试只是一个参数化测试,它测试每个属性。 在这种情况下,唯一的例外是coverPhoto属性,该属性具有简单的JavaBean模式之外的特殊行为。

列表的下一个是对构造函数,equals和hashcode方法的测试。 仅通过创建类的新实例,同时声明将由构造函数设置的属性的有效性来测试域实体的构造函数。 equals和hashcode方法通过使用EqualsVerifier项目中的EqualsVerifier类进行验证。

最基本的测试的最后一类是相互注册 (PDF)验证测试。 您只想检查对实体之间关系的修改是否实际上导致对父属性和子属性的更改。 有关实现的更多详细信息,请参见综合Wiki页面 。 所有这些都在单元测试阶段执行,并被** / * Suite.java类覆盖。

除了基本测试,您还会发现针对基本测试模型不足或不适合的特定情况编写的一次性测试。 在这种情况下,一次性测试将通过手写断言来验证这种行为。 您可以在同一包的** / * Tests.java类中找到它们。

域层测试以JPA存储库测试结束。 * RepositoryTest.java类中的每个类都会测试已处理域对象的CRUD行为。 通用的AbstractRepositoryTest会处理测试数据,并在每次测试运行后重置数据库。 数据库创建本身由maven-dbdeploy-plugin处理。 查看pom.xml,您可以看到它绑定到两个Maven生命周期阶段(流程测试资源和集成前测试),以确保两次被调用。 第一次是在单元测试之前,第二次是在集成测试之前(请在下面进行比较)。

所有这些单元测试都是通过surefire执行的。 如果您在galleria-ejb项目上发布了mvn测试,则可以看到总共138个测试通过了。 这是四个** / * Suite测试,四个** / * RepositoryTest和两个附加测试。 如果您简要查看控制台输出,就会发现这一切都是在Java SE环境中发生的。 到目前为止,尚未进行任何容器测试。

集成测试域层

因此,这实际上仅涵盖了每个人都应该做并且可能知道的基础知识。 进行集成测试是另一回事。 这是通过** / * IntegrationSuite测试完成的。 该名称故意不使用默认命名约定,以防止它们在Maven的单元测试阶段中运行。 要进入Maven的集成测试阶段,Galleria示例将使用Maven故障安全插件 。 您可以在info.galleria.service.ejb包中找到集成测试套件。 AbstractIntegrationTest注意处理单元测试的测试数据(与AbstractRepositoryTest相当)。 该套件为每个域对象都包含一个* ServiceIntegrationTest。 您可以遍历每个* IntegrationTest中的单个测试,并了解这里发生的事情。 ServicesIntegrationSuite通过使用AbstractIntegrationTest.startup();来启动和停止EJBContainer。 这种方法比较不明显且简单:

logger.info("Starting the embedded container.");
Map<String, Object> props = new HashMap<String, Object>();
props.put("org.glassfish.ejb.embedded.glassfish.installation.root","./glassfish-integrationtest-install/glassfish");
container = EJBContainer.createEJBContainer(props);
context = container.getContext();
datasource = (DataSource) context.lookup("jdbc/galleriaDS");

这里最重要的一点是,可嵌入的EJBContainer是通过现有的GlassFish域配置的,该域可以直接在galleria-ejb \ glassfish-integrationtest-install文件夹中找到。 如果查看glassfish \ domains \ domain1 \ config \ domain.xml,可以看到,所有配置都已经为您完成。 但是,部署来自何处? 这很容易回答。 默认情况下,可嵌入的EJBContainer在您的类路径中搜索ejb-jar jarfiles或文件夹,然后将其部署。 如果要从EJBContainer中看到更多详细输出,则必须在src / test / resources中提供一个customlogging.properties文件,并在其中添加一些简单的行:

handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.level=FINEST
#add some more packages if you need them
info.galleria.service.ejb.level=FINE

将以下内容添加到pom.xml的maven-failsafe-plugin配置部分:

<systemPropertyVariables>
<java.util.logging.config.file>${basedir}/src/test/resources/customlogging.
properties</java.util.logging.config.file>
</systemPropertyVariables>

集成测试应成功完成,并且maven应打印与以下内容类似的内容:

Tests run: 49, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 61.726 sec

注意,集成测试花费的时间比正常的单元测试长得多。 这一点也不奇怪,您应该确保仅在需要时才执行它们,以免影响开发进度。

集成测试表示层

域层覆盖了测试。 缺少的是表示层。 您可以在galleria-jsf项目中找到表示层测试。 首先检查pom.xml。 您可以在这里找到几个新的依赖项。 即Arquillian,Selenium和Drone。

首先再次进行一些配置。 向下滚动到配置文件部分,您可以看到一个集成测试配置文件,该配置文件使用了maven-glassfish-plugin并控制了一个配置有几个属性的容器。 将定义添加到pom顶部的properties部分:

<galleria.glassfish.testDomain.user>admin</galleria.glassfish.
testDomain.user>
<galleria.glassfish.testDomain.passwordFile>D:/glassfish-3.1.2-b22/glassfish3/glassfish/domains/
test-domain/config/local-password</galleria.glassfish.testDomain.passwordFile>
<galleria.glassfish.testDomain.glassfishDirectory>D:/glassfish-3.1.2-b22/glassfish3/glassfish/</galleria.glassfish.testDomain.glassfishDirectory>
<galleria.glassfish.testDomain.domainName>test-domain</galleria.glassfish.testDomain.domainName>
<galleria.glassfish.testDomain.adminPort>10048</galleria.glassfish.testDomain.adminPort>
<galleria.glassfish.testDomain.httpPort>10080</galleria.glassfish.testDomain.httpPort>
<galleria.glassfish.testDomain.httpsPort>10081</galleria.glassfish.testDomain.httpsPort>

您可以按照第2部分中所述从galleria-ejb项目的开发配置文件中复制它。 您还应该已经拥有该域。 接下来是maven-surefire-plugin,您可以看到它遵循了galleria-ejb项目相同的约定。 但是查看测试类,您会发现这里没有单个单元测试。 因此,您可以直接转到处理集成测试的maven-failsafe-plugin。 只有一个AllPagesIntegrationTest涵盖了完整的测试。 让我们去那里。

这是一个Arquillian Testcase,它作为客户端针对远程实例执行。 除了部署的定义(@Deployment),您还会再次看到几个setUp和tearDown方法,它们可以进行一些初始化和销毁​​。 一件事必须单独处理。 您还会在其中看到一个writeCoverageData()方法,该方法显然连接到某种Socket并从中读取数据。 这是JaCoCo (Java代码覆盖率库)钩子,可以产生测试的覆盖率数据集。 要进行此工作,您将必须下载该软件包并将其解压缩到您选择的位置。 接下来转到GlassFish test-domain \ config \ domain.xml并将其打开。 找到服务器配置– java-config并在其中添加以下内容:

<jvm-options>-javaagent:D:\path\to\jacoco-0.5.6.201201232323\lib\jacocoagent.jar=output=tcpserver</jvm-options>

这将启用GlassFish的覆盖代理。 现在完成所有配置。 返回到NetBeans,选择集成测试配置文件(在NetBeans中,您可以通过从图标区域中的小锤子旁边的下拉框中选择条目,或者使用-Pintegration-test作为maven命令行开关来执行此操作。输出告诉您,GlassFish域已启动,并且info.galleria.view.AllPagesIntegrationTest正在运行,请注意,在此运行期间将弹出FireFox实例,而Arquillian Drone扩展正在驱动您的Selenium测试。

如果您以前从未看过,以这种方式远程控制的浏览器看起来很奇怪。 如果一切正常,您现在应该在控制台输出中看到以下内容:

Tests run: 30, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 138.014 sec

如果您在浏览器中使用的语言环境不是en,则测试可能会完全失败。 因此,还需要配置Drone以支持它 。 Drone允许您通过arquillian.xml指定Firefox配置文件。 您可以创建一个Firefox配置文件,该配置文件配置为发送以en / en-US作为值的接受语言标头。

要创建新的配置文件,请使用以下命令启动Firefox配置文件管理器(您可能需要关闭所有正在运行的实例):firefox -profilemanager(在Windows上,您需要执行命令“ d:\ complete \ path \ to \ firefox.exe” “ -profilemanager)在cmd外壳中。 记住创建此配置文件的光盘上的位置–以后将需要它。 要配置创建的配置文件,在Firefox中,转到选项(菜单)->内容(选项卡)->语言(字段集)->选择添加英语(并将其移至顶部,作为首选语言)。 现在浏览Galleria-jsf \ src \ test \ resources \ arquillian.xml,然后可以添加一个属性:

<extension qualifier="webdriver">
<property name="implementationClass">org.openqa.selenium.firefox.FirefoxDriver</property>
<property name="firefoxProfile">location of the Firefox profile for English</property>
</extension>

现在全部完成。 您现在应该可以运行完整的清理和构建过程,而没有任何测试失败。 一个大的“绿色酒吧” :)

参考: Java EE 6示例–在WebLogic 12上运行Galleria –第3部分 , Java EE 6示例–测试Galleria –第4部分,来自Markus Eisele博客上的JCG合作伙伴 Markus Eisele。


翻译自: https://www.javacodegeeks.com/2012/04/java-ee-6-example-galleria-part-2.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

与reCAPTCHA的Spring集成

有时我们只需要CAPTCHA &#xff0c;这是一个可悲的事实。 今天&#xff0c;我们将学习如何与reCAPTCHA集成。 因为主题本身并不是特别有趣和高级&#xff0c;所以我们将通过使用Spring Integration处理低级细节来过度设计&#xff08;&#xff1f;&#xff09;。 Google决定使…

《机器学习基石》---感知机算法

1 推导感知机模型 基本思想是&#xff0c;把特征的线性加权值作为一个分数&#xff0c;根据这个分数与一个门限值的关系来进行分类&#xff1a; 我们加一个特征x0等于1&#xff0c;门限值就可以放到w里面去&#xff0c;得到更简单的形式&#xff1a; 这就是感知机模型&#xff…

Python之路【第八篇】:堡垒机实例以及数据库操作

Python之路【第八篇】&#xff1a;堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前&#xff0c;先来学习Python的paramiko模块&#xff0c;该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接&#xff1a; 12…

ADF BC:创建绑定到业务组件的UI表

在此示例中&#xff0c;我们将展示如何创建绑定到业务组件的简单UI表&#xff08;af&#xff1a;table&#xff09;。 我再次尝试使用简单的标准在网上进行搜索&#xff1a; “如何创建绑定到业务组件ADF 11g的af&#xff1a;table” 我必须承认我没有得到我想要的答案。 信息…

MyBaits 错误分析

错误原因&#xff1a;在DAO的映射文件中&#xff0c;在映射标签中的type类型写成DAO类了&#xff0c;应该写成javaBean转载于:https://www.cnblogs.com/shuaiandjun/p/5428847.html

斑马打印机linux驱动安装教程,linux-Zebra软件包的基本安装与配置

Zebra是一个路由软件包&#xff0c;提供基于TCP/IP路由服务&#xff0c;支持RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, BGP- 4,和 BGP-4等众多路由协议。Zebra还支持BGP特性路由反射器(Route Reflector)。除了传统的 IPv4路由协议&#xff0c;Zebra也支持IPv6路由协议。如果运行的…

Java 7对抑制异常的支持

在JDK 7中 &#xff0c;向Throwable类&#xff08; Exception和Error类的父类&#xff09;添加了一个新的构造函数和两个新方法。 添加了新的构造函数和两个新方法以支持“抑制的异常”&#xff08;不要与吞咽或忽略异常的不良做法相混淆&#xff09;。 在本文中&#xff0c;我…

易于使用的单位和集成代码

此示例说明如何使用Maven和Sonar生成单元测试和集成测试的覆盖率。 它使用非常简单的技术&#xff0c;只需10-15分钟即可在任何现有的Maven构建中运行。 它可用于单元&#xff0c;集成&#xff0c;ATDD或任何其他类型的测试套件。 覆盖率结果显示在Sonar中。 有什么事吗&#x…

Ubuntu 16.04 安装 VMware-Workstation-12

以前一直使用 Ubuntu Virtaulbox &#xff0c;最近测试了 VMware-Workstation-9,性能超过 Virtaulbox-4.2.x,下面是详细步骤:1 首先准备一个Ubuntu 系统 lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04 LTS Release: 16.04 …

SSH实战 · 唯唯乐购项目(中)

用户模块三&#xff1a;一级分类的查询创建一级分类表并导入基本数据CREATE TABLE category (cid int(11) NOT NULL AUTO_INCREMENT,cname varchar(255) DEFAULT NULL,PRIMARY KEY (cid)) ENGINEInnoDB AUTO_INCREMENT11 DEFAULT CHARSETutf8;建包及相应的类:com.weiwei.shoppi…

Android的IPC机制(一)——AIDL的使用

综述 IPC(interprocess communication)是指进程间通信&#xff0c;也就是在两个进程间进行数据交互。不同的操作系统都有他们自己的一套IPC机制。例如在Linux操作系统中可以通过管道、信号量、消息队列、内存共享、套接字等进行进程间通信。那么在Android系统中我们可以通过Bin…

Netty:透明地使用SPDY和HTTP

大多数人已经从谷歌那里听说过SPDY&#xff0c;该协议被提议作为老化的HTTP协议的替代品。 Web服务器是浏览器正在缓慢地实现该协议&#xff0c;并且支持正在增长。 在最近的文章中&#xff0c;我已经写过SPDY的工作方式以及如何在Jetty中启用SPDY支持。 由于Netty&#xff08;…

selenium 等待页面加载完成

一、隐形加载等待&#xff1a; file:///C:/Users/leixiaoj/Desktop/test.html 该页面负责创建一个div <html> <head><title>Set Timeout</title><style>.red_box {background-color: red; width 20%; height:100px; border: none;}</style&…

linux nfsnobody用户,处理CentOS 5.5 x64 配置NFS服务过程中nfsnobody用户造成的问题

4、我们编译一下这个NFS的配置文件。[rootNFS /]# vi /etc/exports/share 192.168.60.0/24(rw,sync,all_squash,root_squash) (我们允许这个共享对192.168.60.0/24网段可读可写&#xff0c;且将所有访问者包括root的身份都改为nfsnobody)[rootNFS /]# /etc/init.d/nfs resta…

c语言空格有什么作用,空格在c语言中怎么表示 C语言中的空格字符怎么表示

c语言中表示空格的是什么代码&#xff1f;分析如下&#xff1a; 不是所有字符都需要转义的&#xff0c;空格直接就敲空格&#xff0c;或者使用ASCII码值赋值为32。 空格没有转义字符。合法转义字符如下&#xff1a;\a 响铃(BEL) 、\b 退格(BS)、\f 换页(FF)、\n 换行(LF)、\r 回…

StringMVC 中如何做数据校验

步骤一&#xff1a;引入四个jar包 步骤二&#xff1a;注册类型转换器 <context:component-scan base-package"cn.happy.controller"></context:component-scan><!-- 配置验证器 --><bean id"myvalidator" class"org.springframe…

ibm+x3650+m4+linux+raid驱动,IBM X3650M4阵列卡驱动下载

ibm X3650M4raid阵列卡驱动适合安装windowsserver2008,windowsserver2008R2,系统问题&#xff0c;服务器问题&#xff0c;可以联系我们也可以到5分享论坛发帖求助。IBM System x3650 M4服务器是一款应用最为广泛的2U机架服务器&#xff0c;支持Xeon E5-2600机架服务器的所有产品…

UML类图与类的关系详解

在画类图的时候&#xff0c;理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现&#xff08;Realization&#xff09;、依赖(Dependency)和关联(Association)。其中关联又分为一般关联关系和聚合关系(Aggregation)&#xff0c;合成关系(Composition)。下面我们…

python之路-SQLAlchemy

SQLAchemy SQLAlchemy是Python编程语言下的一款ORM框架&#xff0c;该框架建立在数据库API之上&#xff0c;使用关系对象映射进行数据库操作&#xff0c;简言之便是&#xff1a;将对象转换成SQL&#xff0c;然后使用数据API执行SQL并获取执行结果。 安装&#xff1a; pip3 inst…

Linux中vim编辑器的缩进的功能键

vim编程时,经常需要对代码进行缩进处理,以增加程序的可读性和后期的代码维护. 可以采用多种方式达到缩进的目的: 1) 命令模式(command mode) 2) Visual模式&#xff08;visual mode&#xff09; 2) 输入模式(entry mode) 3) 末行模式(last-line mode) 4) 在/etc/vimrc有给予vim…