2014-05-13 7 views
1

이러한 문제를 디버깅하는 올바른 방법은 무엇입니까? 내 경우WildFly 8/JBoss : Java EE 클래스 로더 링크 오류를 디버깅하는 일반적인 방법

내 자바 EE 웹 프로젝트 내에서 LinkageError가 가진 엄청난 문제가 있습니다 내가 포함

문제를 JSF의 API (JBoss에 JSF-api_2.2_spec-2.2.5.jar)를 Wildfly 모듈 디렉토리에 저장합니다. 즉, Wildfly 클래스 로더에 의해로드됩니다. JSF 구현 (예 : Primefaces 및 OmniFaces)에 의존하는 외부 라이브러리가 있습니다. 또한 오류없이 빌드 프로세스를 실행하려면 별도의 EAR 라이브러리로 라이브러리를 추가해야합니다.

이상한 방법은 faces 이벤트 매개 변수와 함께 기능을 구현하는 bean을 추가하는 것입니다.

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 모듈에서 디버그 또는 추적 로깅을 활성화 할 수 있지만 너무 많은 정보가 될 수 있습니다.

어쨌든 WildFly에 포함 된 모듈 (8.0.0. 최종)과 정확히 동일한 버전을 추가하는 이유는 무엇입니까? (예 : jboss-jsf-api_2.2spec-2.2.5.jar) 이것이 모듈 로더가 중복 클래스에 대해 불평하는 이유입니다.

WildFly 배치 (JSF 배치의 경우 jsf-api 포함)에 대한 암시 적 모듈 종속성 목록이 있습니다. WildFly 배포판에서 추가 종속성이 필요하면 모듈을 복제하는 대신 해당 종속성을 선언해야합니다.

자세한 내용은 Class Loading in WildFly을 참조하십시오.

+0

글쎄, 프로젝트에 수동으로 라이브러리를 추가하지 마세요. 또 다른 문제점은 비즈니스 로직과 웹 티어 사이의 분리 문제입니다. 이제 특정 jsf 구현을 제거했지만 액션 리스너 구현 내에서 이벤트를 잡으려고 할 때 클래스로드 오류로 인해 배포 중에 bean이 인스턴스화되지 않습니다. javax.faces.event.ValueChangeEvent 유형 [Module "deployment.myApp .ear.appCore.jar : main "서비스 모듈 로더에서 찾을 수 없습니다." –