jboss 4.0.5下的多个持久单元

时间:2013-03-12 20:34:52

标签: hibernate jpa jboss

我正在开发一个使用非常旧版本的Jboss(4.0.5 - JDK 1.5)的项目。由于时间/预算的限制,我无法改变这一点。

我的应用程序部署为单个EAR文件。在耳内,有一个提供基本实体管理的JAR文件。称之为jpa-old.jar。该JAR文件包含一个persistnce.xml,它定义了一个名为OldPersist的PU,如下所示:

<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>

jar提供实体本身以及一些用于CRUD操作的访问EJB。使用@PersistenceContext(unitName = "OldPersist")

将EntityManger注入到EJB中

由于各种原因,它不再需要维护旧的实体jar(设计不佳,代码膨胀)。因此,我想创建一个新的实体访问层。现在,它将只通过EJB提供对新实体的访问,但随着时间的推移,旧代码将被移植到新的JAR。两者都必须同时工作。

所以我创建了一个与我的旧结构相同的新JAR(jpa-new.jar),用这个persistnce.xml定义了一个新的PU NewPersist

<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添加到EARs META-INF。这不会产生同样的错误,但是每个JAR文件中的EJB都会抱怨他们无法找到他们的PU。

所以我的问题是,是否支持这种配置(多个jar都有自己的persistnce.xml),如果是这样,我该如何让它工作?

非常感谢

1 个答案:

答案 0 :(得分:1)

为什么不在其中创建一个包含2个持久性单元的persistence.xml?