我们的项目有多个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。
答案 0 :(得分:4)
答案 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也可以提高此方法的可重用性。