您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 >
插入式持久性提供者的承诺:Kodo、OpenJPA和Hibernate
作者:网络转载 发布时间:[ 2013/2/27 14:47:53 ] 推荐标签:

testProvider()测试方法检验这个服务是否为JPA提供者的包含提供者逻辑名的 EntityManager的实现返回了一个类名。另一个测试方法检验服务返回的Message实例是否拥有提供者分配的正确身份。
构建JPA应用程序和切换提供者的Ant 脚本

在运行代码之前,后一步是使用Ant编写的构建脚本。

我们需要使这个脚本编译Java类,将它们封装至EJB模块和EAR中,然后在 Weblogic Server上部署和撤除它们,并运行 JUnit测试。

由于在切换提供者的时候会有些细微的变化,所以使得这种例行任务的标准构建文件有些复杂。每个提供者使用persistence.xml都有所不同。单独的配置文件位于META-INF/hibernate和META-INF/kodo中,构建脚本负责在可部署的包中包含正确的配置。同样,构建脚本使用提供者的逻辑名(例如,hibernate-ejb.jar、kodo-ejb.jar或openjpa-ejb.jar)创建EJB模块。

构建的另一个重要的方面是OpenJPA 和Kodo都要求一个编译后增强的步骤。可以使用–javaagent将这个编译后的步骤放到运行时,但是我更愿意用构建脚本进行增强,而不是用–javaagent请求Weblogic server。您可以在 OpenJPA用户手册中获得有关增强的更多内容。

build.xml中将含有一个<target name="check-provider">。

将通过有效的提供者名称调用这个构建脚本

$ ant -Dprovider=hibernate

hibernate、kodo和openjpa都是有效的提供者值。

默认的构建目标将清理、编译、有条件地增强、封装和撤除先前的部署(如果有的话),并且部署、运行测试和报告错误(如果有的话)。

通过build.properties文件您指定 ${bea.home}和用户凭证等作为您的环境配置脚本。

为了进行部署,构建脚本用以下内容封装了JPAService.ear:

$ jar tvf JPAService.ear

106 Sat Jun 23 01:33:00 CDT 2007 META-INF/MANIFEST.MF

414 Sat Jun 23 01:33:02 CDT 2007 META-INF/application.xml

2755 Sat Jun 23 01:33:02 CDT 2007 hibernate-ejb.jar

在JEE历史上,简单的Enterprise Application Archive有一个单独的EJB模块,如以下的application.xml 所示(为便于可读性,并未包含的XML头部和命名空间声明):

 <application>
   <display-name>EJB3 Sample Application</display-name>
   <module>
       <ejb>hibernate-ejb.jar</ejb>
   </module>
 </application>

EJB模块hibernate-ejb.jar看上去不错吧?

$ jar tvf hibernate-ejb.jar

106 Sat Jun 23 01:33:00 CDT 2007?META-INF/MANIFEST.MF

1280 Sat Jun 23 01:33:02 CDT 2007 META-INF/persistence.xml

662 Fri Jun 22 02:31:58 CDT 2007?META-INF/weblogic-ejb-jar.xml

169 Sat Jun 23 01:33:02 CDT 2007?service/JPAService.class

888 Sat Jun 23 01:33:02 CDT 2007?service/Message.class

839 Sat Jun 23 01:33:02 CDT 2007?session/JPAServiceBean.class

这个EJB模块包含服务接口、会话bean实现和持久性实体类。Jar还有两个配置文件:用于持久性配置的persistence.xml和用于在Weblogic Server中配置会话bean的weblogic-ejb-jar.xml。这些文件必须能作为META-INF/persistence.xml和META-INF/weblogic-ejb-jar.xml的资源被活动的类装载器加载。
配置Hibernate持久性单元

JPA提供者通过persistence.xml配置特定的持久性单元。在这个文件中,需要提供以下内容:

    持久性单元的名称
    支持的事务类型;选项是RESOURCE_LOCAL和JTA
    提供者的类名
    持久性Java类名列表或者一个包含了它们的Jar文件。您可以不定义它们,但好别这样——这个问题不在我们当前的讨论范围之内
    映射文件的名称,如果您认为O-R映射注释违反了POJO的本性
    将要使用的数据库。在一个容器环境中,您可以指定一个JTA或非JTA数据源的名称,数据源是通过其他方式配置的。此外,您也可以分别指定url、用户凭证和驱动类名称(这也是我们将在这里采用的方法)。

除此之外,每个提供者还支持许多可配置的属性。如我们将看到的那样,要成功地使用 O-R映射,要了解这些参数的意义,而且更重要的是知道在哪里应用它们。XML的persistence.xml控制模式允许通过<property name="a.b.c" value="xyz"/>标记指定特定于提供者的属性。不同的提供者使用不同的属性名称,即使它们意义相同。因此,当我们需要从一个提供者向另一个提供者切换应用程序的时候,这些属性成为至关重要的因素。

通过Google进行了一次快速的搜索之后,我配置了Hibernate的persistence.xml,具体如下

persistence.xml

 <?xml version="1.0"?>
 
 <persistence xmlns="http://java.sun.com/xml/ns/persistence"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
   version="1.0">
   <persistence-unit name="test">
     <provider>org.hibernate.ejb.HibernatePersistence</provider>
     <class>service.Message</class>
     <properties>
       <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
       <property name="hibernate.hbm2ddl.auto" value="create"/>
       <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
       <property name="hibernate.connection.url" value="jdbc:mysql://localhost/hibernateDB"/>
 </persistence>

?<provider>指定为org.hibernate.ejb.HibernatePersistence。同样,配置Hibernate以url的方式使用MySQL,即jdbc:mysql://localhost/hibernateDB。
在Weblogic Server上安装Hibernate

上一页123456下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd