Java 如何在JBoss中的2个EAR之间共享JPA数据模型;野蝇“;
我们的JBoss v8“Wildfly”部署如下:Java 如何在JBoss中的2个EAR之间共享JPA数据模型;野蝇“;,java,jpa,deployment,wildfly,ear,Java,Jpa,Deployment,Wildfly,Ear,我们的JBoss v8“Wildfly”部署如下: App-ear.ear |_App-model.jar |_App-ejb.jar |_App-web.war Second-ear.ear |_Second-web.war <?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> <dep
App-ear.ear
|_App-model.jar
|_App-ejb.jar
|_App-web.war
Second-ear.ear
|_Second-web.war
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<dependencies>
<module name="deployment.App-ear.ear.App-model.jar" />
</dependencies>
</deployment>
</jboss-deployment-structure>
此部署在App model.jar
中附带了一个persistence.xml
。现在,我想使用另一个WAR模块部署第二个EAR,该模块可以独立于原始应用程序重新部署。因此我创造了第二只耳朵,像这样:
App-ear.ear
|_App-model.jar
|_App-ejb.jar
|_App-web.war
Second-ear.ear
|_Second-web.war
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<dependencies>
<module name="deployment.App-ear.ear.App-model.jar" />
</dependencies>
</deployment>
</jboss-deployment-structure>
第二个应用程序在Eclipse开发期间(设置为Maven项目)对App model.jar有一个类路径依赖关系,并且构建得很好。为了使该依赖关系在运行时可用,我对第二个ear.ear/META-INF/jboss deployment structure.xml进行了如下编辑:
App-ear.ear
|_App-model.jar
|_App-ejb.jar
|_App-web.war
Second-ear.ear
|_Second-web.war
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<dependencies>
<module name="deployment.App-ear.ear.App-model.jar" />
</dependencies>
</deployment>
</jboss-deployment-structure>
如何解决这个问题?我现在已经成功地部署了我的两只耳朵。。。谢谢你对我原来的问题的评论。如果
persistence.xml
不包含JNDI绑定,我最初使用包含相同数据模型JAR的2EAR的方法是可行的。谢谢@Franck!提到的jboss部署结构.xml
不再指我的另一个EAR
现在,我的部署如下所示:
App-ear.ear
|_App-model.jar
|_App-ejb.jar
|_App-web.war
Second-ear.ear
|_Second-web.war
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<dependencies>
<module name="deployment.App-ear.ear.App-model.jar" />
</dependencies>
</deployment>
</jboss-deployment-structure>
这对两个应用程序都有效,我在这两种情况下都成功访问了数据库。这也不起作用,因为JBoss AS会尝试部署同一个持久化单元(unitname)两次。。。失败了。这是我的第一个方法<代码>原因:org.jboss.msc.service.DuplicateServiceException:service jboss.naming.context.java.myEntityManagerFactory已注册返回Gimby的解决方案:为什么不将没有
persistence.xml
文件的实体放在单独的jar中,然后在每个EAR中从jar内部导入实体?通过这种方式,Wildfly将避免两次创建同名的EntityManagerFactory。我不想浪费时间尝试这个。当前的错误表明这无法解决问题,因为它在我的第二个ear上下文中提到了持久性单元:,原因是:java.lang.IllegalArgumentException:JBAS016069:将持久性单元注入CDI托管bean时出错。在部署第二个ear中找不到名为MyPersistenceUnitName的持久性单元。ear
我已经使用相同的模型部署了多个ear,并且以前建议的方法可以工作。问题是我没有将EMF附加到jndi,这就是为什么会出现第一个异常。我希望另一种方法。。。如果没有别的东西进来,我就试试这个。