我有一个应用程序,必须在JBoss EAP 6.4和7.0上运行。该应用程序使用EJB实体Bean,而JBoss EAP 7不再支持该实体Bean,因此正在迁移该实体Bean以使用JPA实体,如JBoss迁移指南中所述。该应用程序在6.4上部署并运行良好,但在7.0上部署失败,出现“缺少依赖项”错误。我看到了很多缺少依赖项是数据源的问题,但在这里似乎不是这样。在缺少依赖项错误中根本没有提到数据源。我可以在日志中看到persistence.xml文件正在被解析,并且在部署失败之前为会话bean添加了JNDI绑定。
我有一个包含多个war和ejb jar文件的EAR文件。我遇到问题的应用程序由一个ejbModule.jar和一个webModule. war文件组成,ejbModule.jar包含persistence.xml文件和实体类,webModule.war文件包含引用ejbModule.jar中包含的实体类的taglib类。
EAR文件的结构概述如下:
MyEAR.ear
- ejbJar.jar
- webApp1.war
- webApp2.war
- jar(包含persistence.xml和实体类别)
--元信息/持久性. xml - webModule.jar(标记库类依赖于ejbModule.jar中的实体类)
- 元干扰素
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.deployment.subunit.\“我的EAR.ear".\“Web应用程序1.war".组件.\“组织.标记库.我的标记库类".START缺少[jboss.persistenceunit.\“我的EAT.ear/ejb模块.jar#我的PU"]"*
我可以从org.jboss.as.jpa的DEBUG日志中看到,JBoss看起来正在为ear中所有war文件中的所有taglib类添加对持久单元的依赖关系。只有webModule.war需要使用持久单元。
- 2017- 1 - 2 -07 15:37:13,808 DEBUG [org.jboss.as.jpa](MSC服务线程1-2)为组件org.taglib.MyTagLibClass添加对PU服务服务jboss.persistenceunit.“MyEAR.ear#myPU”的依赖 *
当我将persistence.xml文件移动到EAR的META-INF目录时,应用程序在JBoss EAP 7.0上部署和运行良好。但是,这不是一个理想的解决方案,因为EAR文件是动态构建的,可能包含我无法控制的自定义应用程序。我尝试了各种其他结构来尝试并使其运行,但没有发现任何其他有效的方法。
如何在JBoss EAP 7.0上实现这一点呢?
1条答案
按热度按时间30byixjq1#
persistence.xml中存在不必要的条目
你只需要这个
因为实体将相对于persistence.xml自动找到
请尝试一下,如果没有帮助,请尽可能多地发布server.log。
另一个想法可以是在使用EAP时询问RedHat支持,我假设您的订阅包含支持。