私のEARの独自のバージョンのHibernate(JBossがデフォルトで持っているバージョンではありません)を出荷しようとすると、苦労しています。JBOSSのHibernateバージョンをアップグレードしてください
は、その後、私は私の展開を作っEARに次を含むの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>
そして、いつものように、私はに永続ユニットの私の永続性プロバイダを宣言します次のようにHibernateになります。
<persistence>
<persistence-unit name="myapp">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
...
ただし、最悪の場合は発生します。デプロイ時にサーバはorg.hibernate.ejb.HibernatePersistenceからJPAインタフェースjavax.persistence.spi.PersistenceProvider(HibernatePersistenceによってインプリメントされています)にキャストしようとすると、ClassCastExceptionをスローします。
これは私の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をcommon/libに置くことはオプションではありませんが、Hibernateは出荷されるべきです(可能でなければなりません...)。 – edutesoy