【发布时间】:2017-08-30 08:14:35
【问题描述】:
我正在JBoss EAP 7.0.0 上部署我的 EAR,它具有以下结构:
app.ear
|-- ejb.jar
|-- app.war
|-- lib
|-- hibernate-core-5.2.10.Final.jar
|-- hibernate-hibernate-spatial-5.2.10.Final.jar
|-- hibernate-commons-annotations-5.0.1.Final.jar
|-- META-INF
|-- application.xml
|-- jboss-app.xml
我在我的一个 EJB bean 中添加了一小段代码,它打印 org.hibernate.Version.getVersionString() 以了解我的应用程序正在使用哪个版本的 Hibernate,它给了我 5.0.9.Final-readhat-1 而不是 5.2.10.Final 之类的东西。
我读过很多关于类加载问题的文章(尤其是here 和here),但经过多次不同的试验,我找不到让JBoss 在我的EAR 中使用打包版本的Hibernate 的方法。
看起来标签在 EAP 7 中被忽略了?似乎 JBoss AS 7 中的类加载 has changed。
这是我的 jboss-app.xml 的内容:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-app>
<loader-repository>
my.package:archive=app.ear
<loader-repository-config>
java2ParentDelegation=false
</loader-repository-config>
</loader-repository>
</jboss-app>
有没有办法强制 JBoss EAP 7 在引导类加载器之前从我的 EAR 加载类?
注意:我也发布了这个问题here。
================================================ ======== 编辑
我试过这个jboss-deployment-structure.xml:
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="org.hibernate" />
</exclude-subsystems>
<exclusions>
<module name="org.hibernate" />
</exclusions>
</deployment>
</jboss-deployment-structure>
在部署过程中,我收到以下错误:
{"WFLYCTL0062: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"WFLYCTL0080: Failed services" => {"jboss.persistenceunit.\"app.ear/ejb.jar#app-ejbPU\"" => "org.jboss.msc.service.StartException in service jboss.persistenceunit.\"app.ear/ejb.jar#app-ejbPU\": java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.envers.boot.internal.EnversIntegrator not a subtype
Caused by: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.envers.boot.internal.EnversIntegrator not a subtype"}}}}
【问题讨论】:
标签: java hibernate classloader jboss-eap-7