2013-03-12 52 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?