2017-03-23 2 views
0

나는 귀 PARENT_LAST로 설정java.lang.NoClassDefFoundError가 : javax.persistence.AttributeConverter

  1. 클래스 로더와 파일
  2. 최대 절전 모드에서 JPA-2.1-API-1.0.0.Final.jar이 EAR 자체와 함께 포장되어 있습니다.

Websphere BPM 8.5.5로 배포하는 동안 여전히 NoClassDefFoundError가 표시됩니다. 스택 트레이스는 다음과 같습니다.

java.lang.NoClassDefFoundError: javax.persistence.AttributeConverter 
    at java.lang.J9VMInternals.verifyImpl(Native Method) 
    at java.lang.J9VMInternals.verify(J9VMInternals.java:94) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:171) 
    at com.xxx.xxx.xxx.xxx.xxx.hibernate.impl.SessionManagerImpl$1.run(SessionManagerImpl.java:114) 

아무도이 문제를 더 일찍 또는 해결 했습니까?

+1

컨테이너에 CLASSPATH에 다른 JPA API jar가 있으며 JPA API v2.1이 아닌 컨테이너가 있습니다. 오류 메시지에 모두 나와 있습니다. –

답변

1

중첩 된 ClassNotFoundException 스택은 실패한 클래스로드에 사용 된 실제 로더를 포함해야하지만 더 확실하게 알려줄 것입니다.하지만 Billy의 의견은 거의 확실하게 올바른 방향으로 가고 있습니다. JPA API에 따라 달라지는 사용자 정의 클래스를 서버의 JVM 클래스 경로 (또는 Java/jre/lib/ext와 같은 부트 클래스 경로 또는 java.ext.dirs의 디렉토리)에 추가했습니다. 그 효과는 같을 것이다.).

JVM 클래스 경로에 무언가를 넣으면 대부분의 WebSphere 런타임을 선택하는 OSGi 로더를 포함하여 환경의 다른 모든 클래스 로더의 부모 인 Java 응용 프로그램 로더에 의해로드됩니다. 그렇기 때문에 Java EE API와 같은 핵심 요소를 포함하여 WebSphere 클래스를 "볼"수 없습니다.

사용자 정의 클래스는 기본적으로 WebSphere 서버의 JVM 클래스 경로에 속하지 않습니다. 공유 라이브러리는 보통 권장 사항입니다 (애플리케이션에 그대로 둘 수없는 이유가 있다고 가정하면). WAS_HOME/lib/ext와 같은 몇 개의 디렉토리로 채워진 확장 클래스 로더가 서버에 있습니다. 응용 프로그램 범위 밖에서 서버에 표시되어야하는 사용자 지정 보안 모듈과 같은 요소가있는 경우에 사용됩니다.

관련 문제