将持久性单元配置为可在几个耳罩中使用

在.ear文件中,我的EJB被复制到几个jar和war中以获得一些技术限制。 并且这些jar中只有一个包含persistence.xml文件,我在其中配置了多个持久性单元。

myear.ear |---- myjar1.jar |-------- META-INF/persistence.xml |---- myjar2.jar |---- mywar.war 

问题是Jboss找不到jar“myjar2”和战争中的类的持久性配置:

由于以下错误,无法获取…. EjbA.class的类配置:在部署“myear.ear”的子部署“jar2.jar”中找不到名为xxxxx的部署单元

为了解决这个问题,我尝试创建一个仅包含persistence.xml文件的新jar,但它不起作用。

知道如何在不重新组织我的所有耳存档的情况下将persistence.xml文件共享给每个jar吗?

根据JPA规范,您应该可以在EAR级别定义一个持久性单元,该单元对于您在同一.ear中定义的所有子模块都是可见的:

8.2.2持久性单位范围

在EAR级别定义的持久性单元通常对应用程序中的所有组件可见 。 但是,如果EAR中的EJB-JAR,WAR或应用程序jar文件定义了同名的持久性单元,那么在EAR级别定义的该名称的持久性单元将不会对该EJB定义的组件可见 – JAR,WAR或应用程序jar文件,除非持久性单元引用使用持久性单元名称#语法来指定路径名以消除引用的歧义。

但是,在第8节:

注意:Java Persistence 1.0支持在EAR的根目录中使用jar文件作为持久性单元的根。 不再支持此用途。 对于这种情况,便携式应用程序应该使用EAR库目录 。 见[9]。

所以我会尝试将jar放在lib文件夹中。 如果您需要该模块作为EJB模块,它必须位于耳朵的根目录中,因此您可以使用persistence.xml文件创建单独的jar。