Jboss 6 поставляется с JPA 2.0 (hibernate-jpa-2.0-api.jar
) и Hibernate 3.6.6 в качестве реализации.
У меня есть веб-приложение с библиотекой OpenJPA 2.0 (openjpa-all-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: org.apache.openjpa.persistence.PersistenceProviderImpl нельзя привести к javax. persistence.spi.PersistenceProvider
Это странно, поскольку org.apache.openjpa.persistence.PersistenceProviderImpl
уже реализует javax.persistence.spi.PersistenceProvider
Я сделал -version:class
, чтобы проверить, откуда загружается javax.persistence.spi.PersistenceProvider
, и кажется, что он сначала загружается из веб-приложения, а затем из 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 -все-2.1.0.jar /]
[Загруженный javax.persistence.spi.PersistenceProvider из vfs: /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
Может кто-нибудь помочь мне понять, почему это исключение?