2014-05-13 3 views
1

Каков правильный способ отладки этих проблем?WildFly 8/JBoss: общий способ отладки ошибок привязки Java-загрузчика Java EE

В моем случае у меня есть огромные проблемы с LinkageError в рамках моего веб-проекта Java EE:

Проблема

Я включил JSF API (JBoss-JSF-api_2.2_spec-2.2.5.jar) в мой каталог модулей wildfly, то есть он будет загружен загрузчиком классов Wildfly. У меня есть внешние библиотеки, которые также зависят от реализации JSF (например, Primefaces и OmniFaces). Кроме того, чтобы процесс сборки выполнялся без ошибок, я должен добавить библиотеку в отдельную библиотеку EAR.

Странный способ заключается в добавлении компонента, который реализует функцию с параметрами событий лиц, например.

public void myValueChangeListener(ValueChangeEvent e) { 
// do sth. 
} 

реализации этих функций приводит к ...

10:22:18,571 WARN [org.jboss.modules] (MSC service thread 1-1) Failed to define class javax.faces.event.ValueChangeEvent in Module "javax.faces.api:main" from local module loader @468a169f (finder: local module finder @13d344e7 (roots: /home/user/app-server/wildfly8/modules,/home/user/app-server/wildfly8/modules/system/layers/base)): java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/modules/ModuleClassLoader) previously initiated loading for a different type with name "javax/faces/event/ValueChangeEvent" 

... Отправной точкой для моего ТЯЖЕЛОЙ

10:22:18,578 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-1) Critical error during deployment: : java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/modules/ModuleClassLoader) previously initiated loading for a different type with name "javax/faces/event/ValueChangeEvent" 

(удаление параметра позволяет построить проект без ошибок)

Вопрос

Как справиться с такими проблемами? Мне нужен обзор о порядке загрузки классов. Вероятно, есть способ показать полное дерево загрузчика классов или любой инструмент профилирования, который будет делать то же самое.

ответ

2

Вы можете включить отладку или отслеживание протоколов в JBoss Modules, но это слишком много информации.

В вашем случае, почему вы добавляете модуль (т. Е. Jboss-jsf-api_2.2_spec-2.2.5.jar), который в любом случае содержится в WildFly (точно такая же версия в 8.0.0.Final)? Вот почему загрузчик модулей жалуется на дублирующие классы.

Существует список неявных зависимостей модулей для развертываний WildFly (в том числе jsf-api для развертывания JSF). Если вам нужны дополнительные зависимости из дистрибутива WildFly, вы должны просто объявить эту зависимость вместо дублирования модуля.

Для получения более подробной информации см. Class Loading in WildFly.

+0

Ну, вы имеете право не добавлять библиотеку вручную в проект. Другой проблемой было отсутствие разделения между бизнес-логикой и веб-уровнем. Теперь я удалил конкретную реализацию jsf, но когда я пытаюсь поймать свое событие в моей реализации исполнительского действия, мой компонент не создается при развертывании из-за ошибки загрузки класса: Введите javax.faces.event.ValueChangeEvent из [Module "deployment.myApp .ear.appCore.jar: основной «из загрузчика сервисного модуля» не найден. –

 Смежные вопросы

  • Нет связанных вопросов^_^