2

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

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

问题是 Jboss 找不到 jar "myjar2" 和 war 中的类的持久性配置:

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

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

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

4

1 回答 1

2

根据 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。

于 2011-12-03T22:01:36.817 回答