我正在与JBOss挣扎,我遇到了一个似乎很难修复的问题,但事实证明我做不到。 当我尝试部署一个简单的Java Web应用程序时遇到异常:
org.hibernate.ejb.HibernatePersistence cannot be cast to avax.persistence.spi.PersistenceProvider
我知道这是一个有多个persistence.jar的问题。所以在我的pom中我做了类似的事情:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.4.0.GA</version>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>ejb3-persistence</artifactId>
</exclusion>
</dependency>
但我不幸的是。我仍然得到错误。有人能帮助我解决这个问题吗?
阿形
答案 0 :(得分:0)
您希望在应用程序中打包自己的Hibernate版本。这是可能的,但您必须为您的应用程序设置classloader作用域。来自ClassLoadingConfiguration:
使用覆盖服务器类进行隔离
使用以下结构 启用范围类加载 部署类重写 服务器类。
...
jboss-web.xml
:<jboss-web> <class-loading java2ClassLoadingCompliance="false"> <loader-repository> com.example:archive=unique-archive-name <loader-repository-config>java2ParentDelegation=false</loader-repository-config> </loader-repository> </class-loading> ...
换句话说,要么包含所有Hibernate库,要么禁用父类加载器委托或将它们全部排除,并使用JBoss中的那个。