2013-05-28 113 views
0

我們使用Jboss 5.1來部署我們的幾個應用程序。現在,Jboss在其common/libs中有一個hibernate jars版本。我們的一個應用程序使用更新版本的hibernate jars。所以,我們有在Jboss中部署的戰爭打包的依賴jar。應用程序部署得很好,但是當我們嘗試點擊時,它會拋出下面的異常。Jboss休眠jar衝突

我的懷疑是Jboss使用它自己的版本的hibernate jars,但不是那些打包在戰爭中的jar ....我如何讓Jboss使用來自戰爭的hibernate jars而不是來自它的common/lib

我更喜歡在應用程序中進行更改,但不是在Jboss中,因爲有幾個其他應用程序位於相同的Jboss實例中,我不想通過修改jboss/common/LIB

SEVERE [ContainerResponse] The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container 
java.lang.NoSuchFieldError: INSTANCE 
    at org.hibernate.type.StandardBasicTypes.<clinit>(StandardBasicTypes.java:45) 

回答

0

的Java EE類加載器是一個層次:

  1. 引導
  2. 應用服務器
  3. 應用

由於應用服務器類加載器首先找到它的Hibernate的JAR文件的版本,您的應用程序是出於運氣。

您必須告訴JBOSS更喜歡應用程序類加載器JAR。谷歌的配置這樣做;我不記得了。

0

檢查此鏈接了.. http://huima.wordpress.com/2011/09/16/having-fun-with-jboss-classloader-or-how-i-figured-out-how-to-get-my-application-to-work-in-jboss-5/

有一些詳細解釋了JBoss的類加載,這你可以檢查出以及文章內的其他環節。 我之前做過的方法是在戰爭的WEB-INF裏面加入jboss-classloading.xml,內容如下

<classloading xmlns="urn:jboss:classloading:1.0" 
name="yourapp.war" 
domain="IsolatedDomain" 
import-all="false" 
parent-first="false" > 
</classloading>