持久性单元缺少从JBoss EAP 6.4迁移到7.0的依赖项

时间:2017-12-07 21:13:34

标签: jboss jboss-eap-7

我有一个必须在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的任何想法吗?

1 个答案:

答案 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支持我假设您有包含支持的订阅。