2014-11-13 5 views
0

Java EE 및 JBoss WildFly로 응용 프로그램을 만들려고합니다. 필자는 인증을 처리하기 위해 Spring Security를 ​​통합했으며 맞춤형 사용자 상세 서비스를 사용하여 데이터베이스의 사용자 세부 사항을 조회합니다.Jboss Wildfly의 ClassLoading 문제

내 EAO는 EJB 모듈로 작성되었으며 웹 모듈의 userDeailService에서 액세스합니다.

하지만 로그인 할 때 다음 오류가 표시됩니다. 내가 그것을 EJB 모듈 클래스 로더와 웹 모듈 클래스 로더를 모두 같다 읽은 기사에서

java.lang.LinkageError: loader constraint violation: when resolving interface method "com.company.eao.UserEAO.findByUserName(Ljava/lang/String;)Lorg/springframework/security/core/userdetails/UserDetails;" the class loader (instance of org/jboss/modules/ModuleClassLoader) of the current class, com/company/security/UserDetailServiceWrapper, and the class loader (instance of org/jboss/modules/ModuleClassLoader) for the method's defining class, com/company/eao/UserEAO, have different Class objects for the type org/springframework/security/core/userdetails/UserDetails used in the signature 

오류가 발생한 UserDetail 클래스 암탉을로드합니다.

WildFly에서 하나의 클래스 로더를 사용하도록 지정하거나이 문제를 해결하는 방법은 무엇입니까?

미리 감사드립니다.

답변

0

이 배포본은이 lib의 일부인 개체를 상호 교환하기 때문에 두 배포에서이 라이브러리의 한 버전 만 사용해야합니다. lib를 서버에 배치하거나이 lib에 대한 wildfly 모듈을 작성하면됩니다. 두 경우 모두 두 배포 모두이 lib에 대한 종속성을 선언해야하며 정상이어야합니다.

위에서 언급 한 해결책이 효과적이지만 직접 개인적으로 데이터 교환 클래스로 만든 JDK 클래스 나 클래스를 사용하는 것을 선호합니다. 이렇게하면 배포의 종속성이 줄어들고 더 새로운 버전의 라이브러리를 도입하는 데 어려움을 겪지 않을 것입니다. 또한 ... lib/lib를 war/ear로 패키징하고 문제없이 사용자 정의 데이터 객체를 전달할 수 있습니다.