Java 将持久性单元配置为在ear的几个罐子中可用

Java 将持久性单元配置为在ear的几个罐子中可用,java,ejb,ear,persistence.xml,jboss7.x,Java,Ejb,Ear,Persistence.xml,Jboss7.x,在一个.ear文件中,由于一些技术限制,我的EJB被复制到几个jar和war中。其中只有一个jar包含persistence.xml文件,我在其中配置了几个持久性单元 myear.ear |---- myjar1.jar |-------- META-INF/persistence.xml |---- myjar2.jar |---- mywar.war 问题是Jboss在jar“myjar2”和war中找不到类的持久性配置: 由于以下错误,无法获取…EjbA.class的类配置:在中找不到名

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

myear.ear
|---- myjar1.jar
|-------- META-INF/persistence.xml
|---- myjar2.jar
|---- mywar.war
问题是Jboss在jar“myjar2”和war中找不到类的持久性配置:

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

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


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

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

8.2.2持久性单元范围

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

但是,在第8节中:

注意:Java Persistence 1.0支持在 EAR作为持久化单元的根。这一用途不再适用 支持。便携式应用程序应使用EAR库目录 对于这种情况,请改为。见[9]

所以我会尝试将jar放在lib文件夹中。如果您需要该模块是EJB模块,那么它必须位于ear的根目录中,这样您就可以使用persistence.xml文件创建一个单独的jar