我正在使用一个非常旧版本的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),如果是的话,我该如何才能使它工作?
非常感谢