2013-03-12 47 views
0

我正在使用一個非常舊版本的Jboss(4.0.5-JDK 1.5)的項目。由於時間/預算限制,我不能改變這一點。jboss 4.0.5下的多個持久化單元

我的應用程序被部署爲單個EAR文件。在耳邊,有一個提供基本實體管理的JAR文件。稱它爲jpa-old.jar。該JAR文件包含一個persistnce.xml定義了PU叫OldPersist如下:

<persistence version="1.0" > 
<persistence-unit name="OldPersist"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:/MySqlDS</jta-data-source> 
    <class>com.oldjpa.OldEntity1</class> 
    <class>com.oldjpa.OldEntity2</class> 
    <exclude-unlisted-classes>true</exclude-unlisted-classes> 
</persistence-unit> 
</persistence> 

的罐子提供了實體本身與CRUD操作一些訪問EJB的一起。 EntityManger注入到EJB中,因爲各種原因,它不再需要維護舊的實體jar(設計不佳,代碼膨脹)。因此我想創建一個新的實體訪問層。目前,它只能通過EJB訪問新實體,但隨着時間的推移,舊代碼將被移植到新的JAR中。兩者必須同時工作。

所以我創建了一個新的JAR(jpa-new.jar)具有相同的結構,我老了,它定義了新的PU,NewPersist本persistnce.xml

<persistence version="1.0" > 
<persistence-unit name="NewPersist"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:/MySqlDS</jta-data-source> 
    <class>com.newjpa.NewEntity1</class> 
    <class>com.newjpa.NewEntity2</class> 
    <exclude-unlisted-classes>true</exclude-unlisted-classes> 
</persistence-unit> 
</persistence> 

注意存在的實體之間沒有交叉管理兩個PU。

我然後在新的JAR創造一些新的EJB與@PersistenceContext(unitName = "NewPersist")

注入EM在部署的時候,我得到這個錯誤:

WARN [org.jboss.system.ServiceController] Problem starting service persistence.units:ear=MyEar.ear,unitName=jpa-new.jar org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.oldjpa.OldEntity1 references an unknown entity:com.oldjpa.OldEntity2 

Hibernate的抱怨新的PU - 關於到應該由舊PU管理的實體。

我已經嘗試過每個JAR,並且它們都能正常工作。 我曾嘗試將<jar-file>添加到persistnce.xml中,但是jboss然後抱怨它無法在部署中找到JAR(它假設是相對路徑,但相對於什麼?)。 我曾嘗試將共享persistnce.xml添加到EAR的META-INF。這沒有給出同樣的錯誤,但是每個JAR文件中的EJB都抱怨他們找不到他們的PU。

所以我的問題是,這個配置是否支持(多個罐子,每個罐子都有自己的persistnce.xml),如果是的話,我該如何才能使它工作?

非常感謝

回答

0

你爲什麼不創建內部有2個持久化單元的單一的persistence.xml?

相關問題