当我尝试在我的EAR自带的Hibernate版本(而不是默认的JBoss带来的版本)中发布时,我很难。在JBOSS中升级休眠版本
然后,我做出部署“作用域”通过在耳朵上的jboss-app.xml文件包含以下内容:
<jboss-app>
<loader-repository>
com.example:archive=unique-archive-name
<loader-repository-config>
java2ParentDelegation=false
</loader-repository-config>
</loader-repository>
</jboss-app>
,和往常一样,我宣布在持久单元我的持久性提供休眠,如下:
<persistence>
<persistence-unit name="myapp">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
...
但是,最糟糕的事情发生了。在部署时,服务器在尝试从org.hibernate.ejb.HibernatePersistence强制转换为JPA接口javax.persistence.spi.PersistenceProvider(它由HibernatePersistence实现)时抛出ClassCastException。
这是一种WEIRD,因为我在我的EAR中发布了JPA API,所以,如果EAR的类优先于JBoss的类,那么从HibernatePersistence投射到PersistenceProvider时应该没有问题,因为它们“应该”在同一个类加载器上。
如果我没有发布我自己的JPA API,那么当JBoss尝试查找某些JPA类时,部署将失败,并显示ClassNotFoundException。
任何想法为什么这个演员失败?
我正在使用JBoss 5.1.0,并尝试使用Hibernate 3.5.6.Final。 JPA API版本是由经过修改的Hibernate版本传入的版本。
谢谢。是的,hibernate-core和hibernate-entitymanager都已发货。要将hibernate jar放在common/lib中不是一个选项,应该发布Hibernate(并且应该可以...)。 – edutesoy