我正在使用一個非常舊版本的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),如果是的話,我該如何才能使它工作?
非常感謝