jpa - 在 EAP 6.4.0 中使用 JPA 2.1

标签 jpa jboss classpath classloader

到目前为止,我一直在寻找解决此问题的方法,但没有成功。

我们正在将我们的应用程序迁移到 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 文件中将 export 属性设置为 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

这是上面链接的副本:

解决方法 1

更新 javaee/api/main.module.xml 如下:

<!--<module name="javax.persistence.api" export="true"/>-->

虽然这是非可移植的。

解决方法 2

更新 jboss-deployment-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>

这是完全便携的

关于jpa - 在 EAP 6.4.0 中使用 JPA 2.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31706871/

相关文章:

java - JPA 错误后从 PostgreSQL 连接关闭中恢复

mysql - ManyToMany @Embeddable MySQLIntegrityConstraintViolationException : Cannot add or update a child row: a foreign key constraint fails

java - 无法在 google guice 中找到正确的项目以添加到类路径

java - ANTLRworks 中的 TestRig : how to use own classes?

java - 如何从我的 WAR 中的类目录中读取文件?

java - Spring boot 中的请求是如何生成 JSON 值的?

java - 如何高效地锁定代码块以避免乐观锁异常

web-services - 如何在JBoss 7中启用SOAP消息的漂亮日志记录

java - RestEasy 客户端找不到内容类型应用程序/xml 类型的编写器

java - wildfly:从配置目录读取属性