JBoss6附带了JPA2.0 (hibernate-jpa-2.0-api.jar)和Hibernate 3.6.6作为实现。
我有一个web应用程序,它有OpenJPA 2.0库(openjpa 2.1.0.jar)。我已经在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: java.lang.ClassCastException无法转换为javax.persistence.spi.PersistenceProvider
这很奇怪,因为org.apache.openjpa.persistence.PersistenceProviderImpl已经实现了javax.persistence.spi.PersistenceProvider
我做了一个-version:class来检查javax.persistence.spi.PersistenceProvider是从哪里加载的,它似乎是先从web应用程序加载,然后从jboss6\common\lib加载
从javax.persistence.spi.PersistenceProviderResolverHolder$1加载vfs:/home/sathwik/apps/jboss-6.1.0.Final/server/default/deploy/some-webapp.war/WEB-INF/lib/openjpa-all-2.1.0.jar/
从Manifest.mf文件中我收集到用于编译hibernate-jpa-2.0-api.jar的JDK版本是用Build-Jdk: 1.5.0_19编译的,openjpa-all-2.1.0是用Build-Jdk: 1.6.0_22编译的。
有人能帮我弄明白为什么会有这种例外吗?
发布于 2012-01-04 11:08:48
根据OpenJPA依赖页,openjpa-all JAR文件
..。包括Java环境的OpenJPA核心代码和所有运行时依赖项。
您不是在JavaSE环境中运行,而是在一个成熟的JavaEE环境中运行,该环境已经包含在openjpa-all JAR中的许多辅助API类中。因此,在加载同名类(但来自不同的类加载器)时,会出现冲突。
您应该将openjpa-all替换为更具体的JAR文件(即,openjpa-2.1.0.jar和任何使其工作所需的其他文件--参见上面的页面)。
https://stackoverflow.com/questions/8725742
复制相似问题