【发布时间】:2012-02-02 06:54:52
【问题描述】:
Jboss 6 附带 JPA 2.0 (hibernate-jpa-2.0-api.jar) 和 Hibernate 3.6.6 作为实现。
我有一个包含 OpenJPA 2.0 库 (openjpa-all-2.1.0.jar) 的 Web 应用程序。我已经在 jboss-web.xml 中设置了类加载器隔离,如下所示
<class-loading java2ClassLoadingCompliance="false">
<loader-repository>
some.example:loader=some-webapp.war
<loader-repository-config>java2ParentDelegation=false</loader-repository-config>
</loader-repository>
</class-loading>
当我部署应用程序时出现此错误
错误 [AbstractKernelController] 安装到开始时出错:name=persistence.unit:unitName=some.war#some state=Create: java.lang.ClassCastException: org.apache.openjpa.persistence.PersistenceProviderImpl 无法转换为 javax。 persistence.spi.PersistenceProvider
这很奇怪,因为org.apache.openjpa.persistence.PersistenceProviderImpl 已经实现了javax.persistence.spi.PersistenceProvider
我做了一个-version:class 来检查javax.persistence.spi.PersistenceProvider 是从哪里加载的,它似乎是先从Web 应用程序加载的,然后是从jboss6\common\lib 加载的
[从 vfs 加载 javax.persistence.spi.PersistenceProviderResolverHolder$1:/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/hibernate-jpa-2.0-api.jar/]
从Manifest.mf 文件中,我能够收集用于编译的 JDK 版本
hibernate-jpa-2.0-api.jar 用Build-Jdk: 1.5.0_19 编译,
openjpa-all-2.1.0 编译成Build-Jdk: 1.6.0_22
谁能帮我理解为什么会出现这个异常?
【问题讨论】:
标签: java classloader jboss6.x openjpa