在 .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,但它不起作用。
知道如何在不重新组织所有耳朵存档的情况下将 persistence.xml 文件共享到每个 jar 吗?
根据 JPA 规范,您应该可以在 EAR 级别定义一个持久性单元,该单元对您在同一 .ear 中定义的所有子模块都可见:
8.2.2 持久化单元范围
...
在 EAR 级别定义的持久性单元是
通常对应用程序中的所有组件可见。然而,如果一个
同名的持久性单元由 EJB-JAR、WAR 或
EAR 中的应用程序 jar 文件,该名称的持久性单元
在 EAR 级别定义的组件对于由以下定义的组件不可见
EJB-JAR、WAR 或应用程序 jar 文件,除非持久性单元
引用使用持久化单元名称#语法来指定路径
名称以消除引用的歧义。
然而,在第 8 节中:
注意:Java Persistence 1.0 支持在根目录中使用 jar 文件
EAR 作为持久性单元的根。这个用途不再
支持的。便携式应用程序应使用 EAR 库目录
对于这种情况。参见[9]。
所以我会尝试将 jar 放在 lib 文件夹中。如果您需要该模块成为 EJB 模块,则它必须位于 Ear 的根目录中,因此您可以使用 persistence.xml 文件创建一个单独的 jar。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)