Jboss 6에는 구현시 JPA 2.0 (hibernate-jpa-2.0-api.jar
) 및 Hibernate 3.6.6이 함께 제공됩니다.Jboss 6.0에서 OpenJPA를 사용하는 ClassCastException
OpenJPA 2.0 라이브러리 (openjpa-all-2.1.0.jar)가있는 웹 응용 프로그램이 있습니다. 이름 = 지속성 : 나는 ERROR [AbstractKernelController] 오류
이 시작 설치이 오류를 얻을 응용 프로그램을 배포 할 때
<class-loading java2ClassLoadingCompliance="false"> <loader-repository> some.example:loader=some-webapp.war <loader-repository-config>java2ParentDelegation=false</loader-repository-config> </loader-repository> </class-loading>
아래와 같이 나는 보스 - web.xml의 클래스 로더 격리를 설정 한 .unit : unitName = some.war # 어떤 상태 = 만들기 : java.lang.ClassCastException가를 : org.apache.openjpa.persistence.PersistenceProviderImpl이 javax.persistence.spi.PersistenceProvider 캐스트 할 수없는
이 때문에 이상하다 , org.apache.openjpa.persistence.PersistenceProviderImpl
이미
javax.persistence.spi.PersistenceProvider
내가 javax.persistence.spi.PersistenceProvider
가로드되는 위치를 확인하기 위해 -version:class
했다 구현하고 그것을 처음 다음 웹 응용 프로그램에서로드되는 것 것으로 보인다 jboss6\common\lib
[로드 javax.persistence.spi에서 .PersistenceProviderResolverHolder $ 1 from vfs : /home/sathwik/apps/jboss-6.1.0.Final/server/default/deploy/some-webapp.war/WEB-INF/lib/openjpa-all-2.1.0.jar/]
[vfs에서로드 된 javax.persistence.spi.PersistenceProvider : /home/sathwik/apps/jboss-6.1.0.Final/common/lib/ 최대 절전 모드에서 JPA-2.0-api.jar을은 /] 내가
hibernate-jpa-2.0-api.jar
을 컴파일하는 데 사용되는 JDK 버전을 수집 할 수 있었다Manifest.mf
파일에서
는 Build-Jdk: 1.5.0_19
로 컴파일 openjpa-all-2.1.0
는 Build-Jdk: 1.6.0_22
로 컴파일 수 아무도 왜이 예외를 이해하는 데 도움이 될까요? OpenJPA Dependencies page에 따르면
skaffman, 빠른 답장을 보내 주셔서 감사합니다. openjpa-all 대신 openjpa-2.1.0.jar을 배포 한 후 응용 프로그램을 배포 할 수있었습니다. – Sathwik
여기서 클래스 로더의 상황을 설명 할 수 있습니까? 왜 ClassCastException을 발생 시키는가? – Sathwik
@Sathwick : 자바는 이름이 같고 바이트 코드가 같더라도 다른 클래스 로더에서로드 된 클래스를 다르게 취급합니다.이러한 클래스간에 객체를 캐스팅하려고하면 예외가 발생합니다. 특정 클래스에 사용되는 클래스 로더는 특히 JBoss와 같은 복잡한 환경에서 예측하기가 어려울 수 있습니다. – skaffman