您的位置:軟件測(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)簽:

我的郵箱中有一個(gè)bug報(bào)告。它報(bào)告了在Weblogic server環(huán)境中的Hibernate和Kodo之間切換JPA持久性提供者時(shí)的一個(gè)問(wèn)題。在再現(xiàn)這個(gè)bug的過(guò)程中,我學(xué)到了一些知識(shí),包括如何在Weblogic Server 10.0中安裝Hibernate,以及如何使用一個(gè)特定的持久性提供者X部署基于JPA的Web應(yīng)用程序,然后再使用另一個(gè)持久性提供者Y重新部署它而不會(huì)使整體(指Weblogic Server)崩潰。

這次經(jīng)歷促使我在一段停頓之后又開(kāi)始了文章寫(xiě)作(New Yorker雜志的一幅漫畫(huà)觸發(fā)了我的寫(xiě)作靈感)。

總之,這篇文章將:

    描述在Weblogic Server 10.0中安裝和配置Hibernate的工作過(guò)程
    解答為何不必在Weblogic Server 10.0中安裝Kodo或OpenJPA
    展示一個(gè)非常簡(jiǎn)單的基于無(wú)狀態(tài)會(huì)話(huà)Bean的服務(wù)的例子,并演示在Weblogic Server運(yùn)行狀態(tài)下在Hibernate、OpenJPA和Kodo之間切換JPA提供者的步驟
    再現(xiàn)產(chǎn)生問(wèn)題的bug,不僅是因?yàn)閳?bào)告者認(rèn)為這很?chē)?yán)重,在經(jīng)過(guò)簡(jiǎn)短的實(shí)驗(yàn)之后,我也認(rèn)為如此
    介紹這個(gè)bug如何造成應(yīng)用服務(wù)器環(huán)境中JPA引導(dǎo)的變化

測(cè)試提供者切換的一個(gè)非常簡(jiǎn)單的方法

我使用了一個(gè)簡(jiǎn)單的服務(wù)來(lái)檢驗(yàn)是否使用了正確的提供者并且運(yùn)行無(wú)誤——雖然只是初步的持久性操作。這個(gè)簡(jiǎn)單的服務(wù)接口(我將基于它進(jìn)行測(cè)試)如下所示:

JPAService.java

01 
                       
package service;
02 /**
03  * A very simple service to verify the persistence provider being used.
04  * The service also can persist a simple log message in a database.
05  * 
06  * @author ppoddar
07  *
08  */
09 
                       
public interface JPAService {
10   /**
11    * Returns the name of the active provider.
12    */
13   public String getProvider();
14  
15   /**
16    * Logs the given message.
17    *
18    * @param message an arbitray message string.
19    *
20    * @return a Message instance that has been persisted. The service will
21    * attach a timestamp to the message.
22    */
23   public Message log(String message);
24 }
                     

關(guān)于這個(gè)服務(wù)將如何實(shí)現(xiàn)還不明確;甚至沒(méi)有說(shuō)明它將使用JPA。這是服務(wù)定義應(yīng)有的方式——實(shí)現(xiàn)技術(shù)的不明確性(這里省略了通常的 IMO——這是我的觀(guān)點(diǎn)——也許是謙虛的,也許恰恰相反)。
基于JPA和會(huì)話(huà)Bean的應(yīng)用程序入門(mén)

我將簡(jiǎn)短地討論一下如何在使用JPA的無(wú)狀態(tài)會(huì)話(huà)Bean中實(shí)現(xiàn)這個(gè)服務(wù)。這是相當(dāng)基本的知識(shí)。如果您已經(jīng)熟悉JPA,可以直接跳到。

在這個(gè)簡(jiǎn)單的例子中,一個(gè)使用JPA的無(wú)狀態(tài)會(huì)話(huà)Bean實(shí)現(xiàn)了這個(gè)服務(wù)。

JPAServiceBean.java

01 
                       
package session;
02
03 import javax.ejb.Remote;
04 import javax.ejb.Stateless;
05 import javax.persistence.EntityManager;
06 import javax.persistence.PersistenceContext;
07
08 import service.JPAService;
09 import service.Message;
10
11 /**
12  * A Stateless Session bean that uses an injected JPA EntityManager to implement
13  * the contract of {@link JPAService}.
14  *
15  * @author ppoddar
16  *
17  */
18 @Stateless
19 @Remote(JPAService.class)
20 public class JPAServiceBean {
21   /**
22    * Inject an EntityManager for a persistent unit simply named
23    * 
                       
test.
24    * It is this name which must be specified in the configuration file
25    * META-INF/persistence.xml as
26    * <pre>
27    *   <persistence-unit>
28    *                  

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