2017-08-30 40 views
0

我部署我的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。我已經讀了很多關於類加載問題(特別是herehere),但經過很多不同的試驗後,我找不到讓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"}}}} 

回答

0

JBoss的7(和WildFly)正在使用模塊系統而不是類加載器來分離不同的應用程序和庫。

嘗試在你的應用程序禁用休眠:放置jboss-deployment-stucture.xml文件在你的EAR的META-INF文件夾:

<jboss-deployment-structure> 
    <deployment> 
    <exclusions> 
     <module name="org.hibernate" /> 
    </exclusions> 
    </deployment> 
</jboss-deployment-structure> 

參見:https://docs.jboss.org/author/display/WFLY10/Class+Loading+in+WildFly

+0

感謝您的答覆。不幸的是,由於您的建議,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

+0

您可能在項目的WEB-INF/lib目錄中包含所有與hibernate相關的庫。但JBoss提供的庫引發了衝突,因此您已經刪除了JBOSS_HOME \ modules \ system \中可用的module.xml文件中的 ~~~ 經過這些更改,您可以解決衝突問題hibernate –

+0

JBoss EAP 7服務器具有Hibernate 5.0.x版本要使用Hibernate 5.2.x,您必須排除默認的Hibernate並打包正確的。請參閱https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly –