Как настроить JBOSS 5.1.0 GA 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.
В моем приложении у меня есть следующие jar-файлы, расположенные в моем каталоге WAR lib:
- июль к SLF4J-1.6.1.jar
- SLF4J-апи-1.6.1.jar
- SLF4J-log4j12-1.6.1.jar
Мой проект развернут как EAR с WAR. Все библиотеки находятся в 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 должен быть загружен первым.
Я также создал один для моей войны:
<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?
2 ответа
Вы должны использовать что-то вроде как:
<jboss-app>
<loader-repository>
com.example:archive=unique-archive-name
</loader-repository>
</jboss-app>
в META-INF/jboss-app.xml определить собственный загрузчик классов.
Мы используем его для развертывания собственных jar-файлов Hibernate внутри приложения.
См. https://community.jboss.org/wiki/ClassLoadingConfiguration для получения подробной информации.
Я знаю, что эта ветка очень старая, но у меня была похожая проблема сегодня, поэтому я думаю, что сама проблема может возникнуть еще с кем-то.
Мне нужно было запустить два похожих "уха" в разных контекстах с одинаковыми именами пакетов / классов внутри своих подпроектов (JBoss 5.1.0 GA).
Поэтому после некоторых исследований и попыток использовать полную версию "jboss-classloading.xml", представленную здесь и в некоторых блогах, я использовал более простую версию файла "jboss-classloading.xml" в моем EAR (без конкретного "jboss-"). classloading.xml'для моих подпроектов JAR/WAR/ и т. д.):
<classloading xmlns="urn:jboss:classloading:1.0"
domain="IsolatedDomain"
export-all="NON_EMPTY"
import-all="true">
</classloading>
Это было включено в мой каталог META-INF проекта EAR. Надеюсь, что это помогает другим с подобными проблемами.
Я получил рабочую версию с этого сайта: