2011-11-01 19 views
6

Tengo algunos problemas al tratar de cargar libs desde mi aplicación en lugar de lo que viene con JBoss.Cómo configurar JBOSS 5.1.0 GA ClassLoader

estoy tratando de hacer uso de la última y más grande SLF4J en mi solicitud y, al hacerlo estoy recibiendo los siguientes mensajes:

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. 

en mi aplicación tengo los siguientes frascos situados en mi lib GUERRA directorio:

  • Jul-a-slf4j-1.6.1.jar
  • slf4j-api-1.6.1.jar
  • slf4j-log4j12-1.6.1.jar

Mi proyecto se implementa como un EAR con WAR. Todas las bibliotecas residen en WAR.

En base a algunas investigaciones, se ha sugerido que para JBoss 5.1 se cree un archivo jboss-classloading.xml. He creado uno para mi 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> 

Esto identifica que el archivo EAR debe cargarse primero.

También han creado una para mi 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 esta configuración estoy recibiendo el siguiente error en los registros de inicio:

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) 

Cuál es la manera correcta con el fin de tener Los frascos de mi proyecto se cargan antes de JBoss's?

Respuesta

0

Debe utilizar algo así como:

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

en META-INF/jboss-app.xml para definir propio cargador de clases.

Lo usamos para la propia implementación de jarras Hibernate dentro de la aplicación.

Ver https://community.jboss.org/wiki/ClassLoadingConfiguration para más detalles

0

Sé que este hilo es muy antiguo, pero tuve un problema similar en la actualidad por lo que creo que el problema en sí mismo puede suceder aún con alguien.

Necesitaba ejecutar dos 'orejas' similares en diferentes contextos, con los mismos nombres de paquete/clase dentro de sus subproyectos (JBoss 5.1.0 GA).

Así que después de algunas investigaciones e intentos de utilizar la versión completa de 'jboss-classloading.xml' proporcionada aquí y por algunos blogs, utilicé una versión más simple del archivo 'jboss-classloading.xml' en mi EAR (sin específica 'jboss- classloading.xml' para mi subproyectos JAR/WAR/etc.):

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

Esto estaba incluido en el EAR directorio META-INF proyecto. Espero que esto ayude a otros con problemas similares.

que tiene la versión de trabajo de este sitio:

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

Cuestiones relacionadas