當我嘗試在我的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