在 EAP 6.4.0 中使用 JPA 2.1
Using JPA 2.1 in EAP 6.4.0
我搜索了这个问题的解决方案,但到目前为止没有成功。
我们正在将我们的应用程序迁移到 EAP 6.4.0,并且我们的应用程序依赖于 JPA 2.1。然而,JBoss 是一个 Java EE 6 服务器,因此包含模块形式的 JPA 2.0。
我尝试将 JPA API jar 直接包含在我的 WEB-INF/lib 目录中,认为类加载器更喜欢这个而不是系统中的那个。
我试图在耳边包含一个 jboss-deployment-structure.xml 文件。我在 ear/META-INF、ear/war/META-INF 和 ear/war/WEB-INF.
下试过了
在 jboss-deployment-structure.xml 文件中,我尝试:
排除 javax.persistence.api 模块
使用 JPA 2.1 创建我自己的模块并向其添加依赖项
排除 jpa 子系统
我还尝试在位于 jboss-eap-6.4.0\modules\system\layers\base\javax\persistence\api\main
下的 javax.persistence.api module.xml 文件中将导出属性设置为 false
我尝试从 standalone.xml 中删除 jpa 子系统。
所有这些都导致使用了 JPA 2.0 jar。
我让它工作的唯一方法是替换模块目录中的实际 jar (jboss-eap-6.4.0\modules\system\layers\base\javax\persistence\api\main)。但这不是一个有效的解决方案,因为服务器中的其他应用程序或服务实际上可能需要旧版本的 API.
有没有办法正确执行此操作(无需迁移到另一台服务器或更改代码)?
请看:
https://issues.jboss.org/browse/WFCORE-209
这是上面 link 的副本:
解决方法 1
更新 javaee/api/main.module.xml 如下:
<!--<module name="javax.persistence.api" export="true"/>-->
虽然这是不可移植的。
解决方法 2
更新 jboss-部署-structure.xml 如下:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="jpa" />
</exclude-subsystems>
<exclusions>
<!-- WFCORE-209 workaround -->
<module name="javaee.api" />
<!-- --------------------- -->
<module name="javax.persistence.api" />
<module name="org.hibernate" />
</exclusions>
<dependencies>
<!-- WFCORE-209 workaround -->
<module name="javax.activation.api" export="true"/>
<module name="javax.annotation.api" export="true"/>
<module name="javax.ejb.api" export="true"/>
<module name="javax.el.api" export="true"/>
<module name="javax.enterprise.api" export="true"/>
<module name="javax.enterprise.deploy.api" export="true"/>
<module name="javax.inject.api" export="true"/>
<module name="javax.interceptor.api" export="true"/>
<module name="javax.jms.api" export="true"/>
<module name="javax.jws.api" export="true"/>
<module name="javax.mail.api" export="true"/>
<module name="javax.management.j2ee.api" export="true"/>
<!-- <module name="javax.persistence.api" export="true"/> -->
<module name="javax.resource.api" export="true"/>
<module name="javax.rmi.api" export="true"/>
<module name="javax.security.auth.message.api" export="true"/>
<module name="javax.security.jacc.api" export="true"/>
<module name="javax.servlet.api" export="true"/>
<module name="javax.servlet.jsp.api" export="true"/>
<module name="javax.transaction.api" export="true"/>
<module name="javax.validation.api" export="true"/>
<module name="javax.ws.rs.api" export="true" services="export"/>
<module name="javax.xml.bind.api" export="true"/>
<module name="javax.xml.registry.api" export="true"/>
<module name="javax.xml.soap.api" export="true"/>
<module name="javax.xml.ws.api" export="true"/>
<!-- This one always goes last. -->
<module name="javax.api" export="true"/>
<!-- --------------------- -->
</dependencies>
</deployment>
</jboss-deployment-structure>
这是完全便携的
我搜索了这个问题的解决方案,但到目前为止没有成功。
我们正在将我们的应用程序迁移到 EAP 6.4.0,并且我们的应用程序依赖于 JPA 2.1。然而,JBoss 是一个 Java EE 6 服务器,因此包含模块形式的 JPA 2.0。
我尝试将 JPA API jar 直接包含在我的 WEB-INF/lib 目录中,认为类加载器更喜欢这个而不是系统中的那个。
我试图在耳边包含一个 jboss-deployment-structure.xml 文件。我在 ear/META-INF、ear/war/META-INF 和 ear/war/WEB-INF.
下试过了在 jboss-deployment-structure.xml 文件中,我尝试: 排除 javax.persistence.api 模块 使用 JPA 2.1 创建我自己的模块并向其添加依赖项 排除 jpa 子系统
我还尝试在位于 jboss-eap-6.4.0\modules\system\layers\base\javax\persistence\api\main
下的 javax.persistence.api module.xml 文件中将导出属性设置为 false我尝试从 standalone.xml 中删除 jpa 子系统。
所有这些都导致使用了 JPA 2.0 jar。
我让它工作的唯一方法是替换模块目录中的实际 jar (jboss-eap-6.4.0\modules\system\layers\base\javax\persistence\api\main)。但这不是一个有效的解决方案,因为服务器中的其他应用程序或服务实际上可能需要旧版本的 API.
有没有办法正确执行此操作(无需迁移到另一台服务器或更改代码)?
请看: https://issues.jboss.org/browse/WFCORE-209
这是上面 link 的副本:
解决方法 1
更新 javaee/api/main.module.xml 如下:
<!--<module name="javax.persistence.api" export="true"/>-->
虽然这是不可移植的。
解决方法 2
更新 jboss-部署-structure.xml 如下:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="jpa" />
</exclude-subsystems>
<exclusions>
<!-- WFCORE-209 workaround -->
<module name="javaee.api" />
<!-- --------------------- -->
<module name="javax.persistence.api" />
<module name="org.hibernate" />
</exclusions>
<dependencies>
<!-- WFCORE-209 workaround -->
<module name="javax.activation.api" export="true"/>
<module name="javax.annotation.api" export="true"/>
<module name="javax.ejb.api" export="true"/>
<module name="javax.el.api" export="true"/>
<module name="javax.enterprise.api" export="true"/>
<module name="javax.enterprise.deploy.api" export="true"/>
<module name="javax.inject.api" export="true"/>
<module name="javax.interceptor.api" export="true"/>
<module name="javax.jms.api" export="true"/>
<module name="javax.jws.api" export="true"/>
<module name="javax.mail.api" export="true"/>
<module name="javax.management.j2ee.api" export="true"/>
<!-- <module name="javax.persistence.api" export="true"/> -->
<module name="javax.resource.api" export="true"/>
<module name="javax.rmi.api" export="true"/>
<module name="javax.security.auth.message.api" export="true"/>
<module name="javax.security.jacc.api" export="true"/>
<module name="javax.servlet.api" export="true"/>
<module name="javax.servlet.jsp.api" export="true"/>
<module name="javax.transaction.api" export="true"/>
<module name="javax.validation.api" export="true"/>
<module name="javax.ws.rs.api" export="true" services="export"/>
<module name="javax.xml.bind.api" export="true"/>
<module name="javax.xml.registry.api" export="true"/>
<module name="javax.xml.soap.api" export="true"/>
<module name="javax.xml.ws.api" export="true"/>
<!-- This one always goes last. -->
<module name="javax.api" export="true"/>
<!-- --------------------- -->
</dependencies>
</deployment>
</jboss-deployment-structure>
这是完全便携的