我有一个必须在JBoss EAP 6.4和7.0上运行的应用程序。该应用程序使用JBoss EAP 7不再支持的EJB实体bean,因此正在迁移实体bean以使用JBoss迁移指南中描述的JPA实体。应用程序在6.4上部署并正常工作,但无法在7.0上部署“缺少依赖性”错误。我已经看到很多问题,其中缺少的依赖是数据源,但在这里似乎并非如此。在缺少的依赖项错误中根本没有提到数据源。我可以在日志中看到正在解析persistence.xml文件,并在部署失败之前为会话bean添加了jndi绑定。
我有一个包含多个war和ejb jar文件的EAR文件。我遇到问题的应用程序包含一个包含persistence.xml文件和实体类的ejbModule.jar,以及一个带有taglib类的webModule.war文件,这些类引用了ejbModule.jar中包含的实体类。
EAR文件的结构概述如下:
MyEAR.ear
- ejbJar.jar
- webApp1.war
- webApp2.war
- ejbModule.jar(包含persistence.xml和实体类)
- META-INF / persistence.xml
- webModule.jar(taglib类依赖于来自ejbModule.jar的实体类)
- META-INF
persistence.xml :(替换了类名,数据源名,持久性单元名)
<persistence version="2.0" xmlns:per="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="myPU">
<class>org.MyEntity1</class>
<class>org.MyEntity2</class>
<jta-data-source>java:/MyDataSource</jta-data-source>
<properties>
<property name="jboss.entity.manager.jndi.name" value="java:/myPU"/>
<property name="jboss.entity.manager.factory.jndi.name" value="java:/myPU"/>
</properties>
</persistence-unit>
很难发布错误消息,因为它有数百行“缺少依赖关系”的类名和应用程序名称,我无法分享,当我更换它们时,我觉得它不会是很多用途。但有些条目如下:
“jboss.naming.context.java.comp.MyEAR.ejbModule.MyEntity1.InAppClientContainer缺失[jboss.naming.context.java.comp.MyEAR.ejbModule.MyEntity1]”, < / p>
然而,还有以下条目:
“jboss.deployment.subunit。\”MyEAR.ear \“。\”webApp1.war \“。component。\”org.taglib.MyTagLibClass \“。START缺少[jboss.persistenceunit。\ “MyEAT.ear / ejbModule.jar#myPU \”]“
我可以从org.jboss.as.jpa的DEBUG日志中看到,JBoss希望在耳朵中所有war文件中的所有taglib类的持久性单元上添加依赖项。只有webModule.war需要使用持久性单元。
2017-12-07 15:37:13,808 DEBUG [org.jboss.as.jpa](MSC服务线程1-2)添加对PU服务服务jboss.persistenceunit的依赖。“MyEAR.ear #myPU “for component org.taglib.MyTagLibClass
当我将persistence.xml文件移动到EAR的META-INF目录时,应用程序在JBoss EAP 7.0上部署并正常工作。但是,这不是一个理想的解决方案,因为EAR文件是动态构建的,可能包含我无法控制的自定义应用程序。 我已经尝试了各种其他结构来尝试使其工作,但没有发现其他任何有用的东西。
有关如何使用JBoss EAP 7.0的任何想法吗?
答案 0 :(得分:0)
persistence.xml中有不必要的条目
你只需要这个
<persistence version="2.0" xmlns:per="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="myPU">
<jta-data-source>java:/MyDataSource</jta-data-source>
</persistence-unit>
因为相对于persistence.xml会自动找到实体
请尝试此操作,如果没有帮助,请尽可能多地发布server.log。
另一个想法可能是在您使用EAP时询问RedHat支持我假设您有包含支持的订阅。