2011-11-01 161 views
6

我遇到了一些問題,試圖從我的應用程序加載庫而不是JBoss附帶的庫。如何配置JBOSS 5.1.0 GA ClassLoader

我想利用我的應用程序的最新和最偉大的SLF4J的,這樣做我收到以下消息:

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [vfszip:/C:/devtools/workspace/g2/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_5.1_Runtime_Server1302541739184/deploy/ecotrakEar.ear/ecotrak.war/WEB-INF/lib/slf4j-log4j12-1.6.1.jar/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [vfszip:/C:/devtools/jboss-5.1.0.GA/common/lib/slf4j-jboss-logging.jar/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 

在我的應用程序已經位於我WAR的lib下面的罐子目錄:

  • 07月到SLF4J-1.6.1.jar
  • SLF4J-API-1.6.1.jar
  • SLF4J-log4j12-1.6.1.jar

我的項目被部署爲帶有WAR的EAR。所有的庫都駐留在WAR中。

基於一些研究,有人建議爲JBoss 5.1創建一個jboss-classloading.xml文件。我爲我的EAR創建了一個:

<classloading xmlns="urn:jboss:classloading:1.0" 
    name="ecotrak.ear" 
    domain="ecotrak.ear" 
    export-all="NON_EMPTY" 
    import-all="true" 
    parent-first="false"> 
</classloading> 

這表示EAR文件將首先加載。

我也創建一個爲我WAR:

<classloading xmlns="urn:jboss:classloading:1.0" 
    name="ecotrak.war" 
    domain="ecotrak.war" 
    parent-domain="ecotrak.ear" 
    top-level-classloader="true" 
    export-all="NON_EMPTY" 
    import-all="true" 
    parent-first="true"> 
</classloading> 

有了這個配置我收到以下錯誤在啓動日誌:

11:18:07,949 ERROR [[/ecotrak]] Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V 
    at org.apache.commons.logging.impl.SLF4JLocationAwareLog.trace(SLF4JLocationAwareLog.java:107) 

是什麼,纔能有正確的方法我的項目中的罐子在J​​Boss之前加載?

回答

0

你應該使用類似爲:

<jboss-app> 
    <loader-repository> 
    com.example:archive=unique-archive-name 
    </loader-repository> 
</jboss-app> 
在META-INF

/的jboss-app.xml中定義自己的類加載器。

我們將它用於自己的Hibernate jars deploy應用程序中。

的細節

0

我知道這個線程是很老見https://community.jboss.org/wiki/ClassLoadingConfiguration,但是今天我也有類似的問題,所以我覺得這個問題本身可能與人還沒到。

我需要在不同的上下文中運行兩個類似的'ear',在其子項目(JBoss 5.1.0 GA)中使用相同的包/類名稱。

因此,經過一番研究,並試圖使用這裏和某些博客提供的完整'jboss-classloading.xml'版本,我在我的EAR上使用了更簡單的'jboss-classloading.xml'文件具體 '的jboss-classloading.xml' 我的子項目JAR/WAR /等):

<classloading xmlns="urn:jboss:classloading:1.0" 
      domain="IsolatedDomain" 
      export-all="NON_EMPTY" 
      import-all="true"> 
</classloading> 

,這包括在我的EAR項目META-INF目錄。希望這可以幫助有類似問題的人。

我是從這個網站的工作版本:

https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/5/html/Microcontainer_User_Guide/sect-JBoss_Microcontainer_User_Guide-The_ClassLoading_Layer-ClassLoading.html

相關問題