您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 >
插入式持久性提供者的承諾:Kodo、OpenJPA和Hibernate
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/2/27 14:47:53 ] 推薦標(biāo)簽:

testProvider()測(cè)試方法檢驗(yàn)這個(gè)服務(wù)是否為JPA提供者的包含提供者邏輯名的 EntityManager的實(shí)現(xiàn)返回了一個(gè)類名。另一個(gè)測(cè)試方法檢驗(yàn)服務(wù)返回的Message實(shí)例是否擁有提供者分配的正確身份。
構(gòu)建JPA應(yīng)用程序和切換提供者的Ant 腳本

在運(yùn)行代碼之前,后一步是使用Ant編寫的構(gòu)建腳本。

我們需要使這個(gè)腳本編譯Java類,將它們封裝至EJB模塊和EAR中,然后在 Weblogic Server上部署和撤除它們,并運(yùn)行 JUnit測(cè)試。

由于在切換提供者的時(shí)候會(huì)有些細(xì)微的變化,所以使得這種例行任務(wù)的標(biāo)準(zhǔn)構(gòu)建文件有些復(fù)雜。每個(gè)提供者使用persistence.xml都有所不同。單獨(dú)的配置文件位于META-INF/hibernate和META-INF/kodo中,構(gòu)建腳本負(fù)責(zé)在可部署的包中包含正確的配置。同樣,構(gòu)建腳本使用提供者的邏輯名(例如,hibernate-ejb.jar、kodo-ejb.jar或openjpa-ejb.jar)創(chuàng)建EJB模塊。

構(gòu)建的另一個(gè)重要的方面是OpenJPA 和Kodo都要求一個(gè)編譯后增強(qiáng)的步驟?梢允褂–javaagent將這個(gè)編譯后的步驟放到運(yùn)行時(shí),但是我更愿意用構(gòu)建腳本進(jìn)行增強(qiáng),而不是用–javaagent請(qǐng)求Weblogic server。您可以在 OpenJPA用戶手冊(cè)中獲得有關(guān)增強(qiáng)的更多內(nèi)容。

build.xml中將含有一個(gè)<target name="check-provider">。

將通過(guò)有效的提供者名稱調(diào)用這個(gè)構(gòu)建腳本

$ ant -Dprovider=hibernate

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

默認(rèn)的構(gòu)建目標(biāo)將清理、編譯、有條件地增強(qiáng)、封裝和撤除先前的部署(如果有的話),并且部署、運(yùn)行測(cè)試和報(bào)告錯(cuò)誤(如果有的話)。

通過(guò)build.properties文件您指定 ${bea.home}和用戶憑證等作為您的環(huán)境配置腳本。

為了進(jìn)行部署,構(gòu)建腳本用以下內(nèi)容封裝了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歷史上,簡(jiǎn)單的Enterprise Application Archive有一個(gè)單獨(dú)的EJB模塊,如以下的application.xml 所示(為便于可讀性,并未包含的XML頭部和命名空間聲明):

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

EJB模塊hibernate-ejb.jar看上去不錯(cuò)吧?

$ 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

這個(gè)EJB模塊包含服務(wù)接口、會(huì)話bean實(shí)現(xiàn)和持久性實(shí)體類。Jar還有兩個(gè)配置文件:用于持久性配置的persistence.xml和用于在Weblogic Server中配置會(huì)話bean的weblogic-ejb-jar.xml。這些文件必須能作為META-INF/persistence.xml和META-INF/weblogic-ejb-jar.xml的資源被活動(dòng)的類裝載器加載。
配置Hibernate持久性單元

JPA提供者通過(guò)persistence.xml配置特定的持久性單元。在這個(gè)文件中,需要提供以下內(nèi)容:

    持久性單元的名稱
    支持的事務(wù)類型;選項(xiàng)是RESOURCE_LOCAL和JTA
    提供者的類名
    持久性Java類名列表或者一個(gè)包含了它們的Jar文件。您可以不定義它們,但好別這樣——這個(gè)問(wèn)題不在我們當(dāng)前的討論范圍之內(nèi)
    映射文件的名稱,如果您認(rèn)為O-R映射注釋違反了POJO的本性
    將要使用的數(shù)據(jù)庫(kù)。在一個(gè)容器環(huán)境中,您可以指定一個(gè)JTA或非JTA數(shù)據(jù)源的名稱,數(shù)據(jù)源是通過(guò)其他方式配置的。此外,您也可以分別指定url、用戶憑證和驅(qū)動(dòng)類名稱(這也是我們將在這里采用的方法)。

除此之外,每個(gè)提供者還支持許多可配置的屬性。如我們將看到的那樣,要成功地使用 O-R映射,要了解這些參數(shù)的意義,而且更重要的是知道在哪里應(yīng)用它們。XML的persistence.xml控制模式允許通過(guò)<property name="a.b.c" value="xyz"/>標(biāo)記指定特定于提供者的屬性。不同的提供者使用不同的屬性名稱,即使它們意義相同。因此,當(dāng)我們需要從一個(gè)提供者向另一個(gè)提供者切換應(yīng)用程序的時(shí)候,這些屬性成為至關(guān)重要的因素。

通過(guò)Google進(jìn)行了一次快速的搜索之后,我配置了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以u(píng)rl的方式使用MySQL,即jdbc:mysql://localhost/hibernateDB。
在Weblogic Server上安裝Hibernate

上一頁(yè)123456下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd