이러한 문제를 디버깅하는 올바른 방법은 무엇입니까? 내 경우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"
을위한 출발점 (제거 매개 변수 것은 오류없이 프로젝트를 빌드 할 수 있습니다)
질문
어떻게 이러한 문제에 대처할 수 있습니까? 클래스가로드되는 순서에 대한 개요가 필요합니다. 아마도 전체 클래스 로더 트리 또는 동일한 작업을 수행 할 프로파일 링 도구를 표시하는 방법이있을 것입니다.
글쎄, 프로젝트에 수동으로 라이브러리를 추가하지 마세요. 또 다른 문제점은 비즈니스 로직과 웹 티어 사이의 분리 문제입니다. 이제 특정 jsf 구현을 제거했지만 액션 리스너 구현 내에서 이벤트를 잡으려고 할 때 클래스로드 오류로 인해 배포 중에 bean이 인스턴스화되지 않습니다. javax.faces.event.ValueChangeEvent 유형 [Module "deployment.myApp .ear.appCore.jar : main "서비스 모듈 로더에서 찾을 수 없습니다." –