2011-11-01 20 views
6

Sto riscontrando alcuni problemi con il tentativo di caricare librerie dalla mia applicazione invece di ciò che viene fornito con JBoss.Come configurare JBOSS 5.1.0 GA ClassLoader

io sto cercando di fare uso delle più recenti e più grande SLF4J nella mia applicazione e così facendo sto ottenendo i seguenti messaggi:

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. 

nella mia applicazione ho i seguenti vasi situati in mia guerra lib directory:

  • lug-to-slf4j-1.6.1.jar
  • slf4j-api-1.6.1.jar
  • slf4j-log4j12-1.6.1.jar
  • 01.235.

Il mio progetto è distribuito come EAR con una GUERRA. Tutte le librerie risiedono nella GUERRA.

Sulla base di alcune ricerche è stato suggerito che per JBoss 5.1 venga creato un file jboss-classloading.xml. Ho creato uno per mio orecchio:

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

Questo identifica che il file EAR deve essere caricato prima.

mi hanno anche creato uno per la mia guerra:

<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> 

Con questa configurazione sto ottenendo il seguente errore nei registri di avvio:

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) 

Qual è il modo corretto in modo da avere i vasi del mio progetto vengono caricati prima di quelli di JBoss?

risposta

0

Si dovrebbe usare qualcosa di simile come:

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

in META-INF/jboss-app.xml per definire proprio classloader.

Lo usiamo per il deploy dei vasi Hibernate all'interno dell'applicazione.

Vedi https://community.jboss.org/wiki/ClassLoadingConfiguration per i dettagli

0

So che questa discussione è molto vecchio, ma ho avuto un problema simile oggi così penso che il problema stesso può accadere ancora con qualcuno.

Avevo bisogno di eseguire due 'orecchio' simili in diversi contesti, con gli stessi nomi di pacchetto/classe all'interno dei sottoprogetti (JBoss 5.1.0 GA).

Quindi dopo alcune ricerche e tentativi di utilizzare la versione completa di "jboss-classloading.xml" fornita qui e da alcuni blog, ho usato una versione più semplice del file 'jboss-classloading.xml' sul mio EAR (senza specifica 'jboss-classloading.xml' per il mio sottoprogetti JAR/WAR/etc):.

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

Questo era inclusa nel mio EAR progetto di directory META-INF. Spero che questo aiuti gli altri con problemi simili.

ho avuto la versione di lavoro da questo sito:

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

Problemi correlati