我部署我的JBoss EAP 7.0.0 EAR,它具有以下結構:使用打包休眠版本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的類加載has changed AS 7
這裏是我的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,從我的耳邊加載類在引導類加載器之前?
注意:我也發佈了這個問題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"}}}}
感謝您的答覆。不幸的是,由於您的建議,EAR的部署失敗,因爲缺少該服務:「WFLYCTL0180:缺少/不可用的服務d 附件」=> [「jboss.persistenceunit。」app.ear/ejb.jar#app-ejbPU \「.__ FIRST_PHASE__缺失[jboss.naming.context.java.jdbc.app]' 我試圖用'jboss-deployment-structure.xml'中的嵌入類重新聲明該模塊,但之後出現配置錯誤仍然歸因於ClassLoaderIssues:'org.hibernate.integrator.spi.Integrator:Provider org.hibernate.envers.boot.internal.EnversIntegrator不是子類型' – ctabin
您可能在項目的WEB-INF/lib目錄中包含所有與hibernate相關的庫。但JBoss提供的庫引發了衝突,因此您已經刪除了JBOSS_HOME \ modules \ system \中可用的module.xml文件中的 ~~~ 經過這些更改,您可以解決衝突問題hibernate –
JBoss EAP 7服務器具有Hibernate 5.0.x版本要使用Hibernate 5.2.x,您必須排除默認的Hibernate並打包正確的。請參閱https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly –