jboss - 如何配置 JBOSS 5.1.0 GA ClassLoader

标签 jboss classloader

我在尝试从我的应用程序加载库而不是 JBoss 附带的库时遇到了一些问题。

我正在尝试在我的应用程序中使用最新最好的 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 目录中有以下 jars:
  • jul-to-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)
    

    在 JBoss 之前加载我项目中的 jar 的正确方法是什么?

    最佳答案

    你应该使用类似的东西:

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

    在 META-INF/jboss-app.xml 中定义自己的类加载器。

    我们将它用于在应用程序内部部署自己的 Hibernate jar。

    https://community.jboss.org/wiki/ClassLoadingConfiguration详情

    关于jboss - 如何配置 JBOSS 5.1.0 GA ClassLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962649/

    相关文章:

    java - getClass().getProtectionDomain().getCodeSource().getLocation().getPath() 抛出空指针异常

    java - 我怎么知道java中当前的classLoader

    java - 有没有办法将weld和cdi-unit与java 11 openj9一起使用

    java - 用于 JSF、Hibernate 项目的 Tomcat 或 JBoss

    java - 实现过滤类加载器

    java - 为什么 Apache tomcat 的 Bootstrap 类调用 ClassLoader.loadclass 而不是 new 运算符?

    java - Java 中真正的全局状态, "more global"比 `static` ?

    web-applications - JBoss Seam教程

    JBoss 7 负载均衡器 session 复制

    java - tmpFile.renameTo(classFile) 失败错误