在EAR内的多个EJB JAR中共享相同的JPA persistence.xml

时间:2015-06-05 16:56:37

标签: java jpa weblogic

我们的项目有多个EJB模块,我们希望在它们之间共享一个persistence.xml文件。

我们将persistence.xml文件放在EARs META-INF目录中,但持久性单元在运行时不可用。似乎文件永远不会被读取,因为我们强制使用不正确的类和jar文件,但没有任何反应。

为什么WebLogic没有读取EAR中的persistence.xml文件?

运行代码时出现以下错误,未找到PU(可用持久性单位:[])。

Caused By: java.lang.IllegalArgumentException: No persistence unit named 'em' is available in scope ejb1-module.jar. Available persistence units: []

的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="system-unit" transaction-type="JTA">
        <jta-data-source>sysmtem-ds</jta-data-source>
        <jar-file>../ejb1-module.jar</jar-file>
        <class>...</class>
        <class>...</class>
        <class>...</class>
    </persistence-unit>
</persistence>

结构(持久性单元放在EAR内)

EAR +
    |- META-INF +
    |       - persistence.xml
    |- ejb1-module.jar
    |- ejb2-module.jar
    |- ejb3-module.jar

我们正在使用WebLogic 10.3.6,它使用随附的JPA 1.0和TopLink / EclipseLink。

2 个答案:

答案 0 :(得分:4)

您应该升级到JPA 2.0

请参阅此链接:JPA 2.0 in WebLogic Server 10.3.6

然后按照

的回答

Sharing a persistence unit across components in a .ear file

答案 1 :(得分:3)

在EARs META-INF文件夹下部署persistence.xml不会触发服务器加载持久性单元(至少在WebLogic 10g中没有,即使启用了JPA 2.0)。

需要使用JAR文件在/ lib下部署持久性单元。工作结构:

EAR +
    |- lib +
    |      |- entities.jar
    |      \- persistence-unit.jar +
    |                               \- META-INF +
    |                                            \- persistence.xml
    |- ejb-core-module.jar
    \- ejb-business-module.jar

在此示例中,“persistence-unit.jar”用于打包JPA配置。

现在我可以使用不同的数据源创建另一个EAR。使用composite persistence units也可以提高此方法的可重用性。