2011-09-01 11 views
5

私の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バージョンによって移行的にインポートされたバージョンです。

答えて

1

hibernate-entitymanager.jarも含めましたか?

それ以外の場合は、common/libのhibernate core jarを3.5.6バージョンに置き換えることができます。

+0

ありがとうございました。はい、hibernate-coreとhibernate-entitymanagerの両方が出荷されます。 Hibernateをcommon/libに置くことはオプションではありませんが、Hibernateは出荷されるべきです(可能でなければなりません...)。 – edutesoy

2

耳のデプロイヤを使用してクラススコープを有効にすることができます。 JBossの5.xの編集について:

のJBoss /サーバ/ [設定]

や変更を/deployers/ear-deployer-jboss-beans.xml:

<bean name="EARClassLoaderDeployer" class="org.jboss.deployment.EarClassLoaderDeployer"> 
     <property name="isolated">false</property> 
    </bean> 

はtrueに分離された設定。

1

jbossサーバーでhibernateのクラスローディングの問題を解決するには、に、WebアプリケーションのWEB-INFフォルダ内にjboss-classloading.xmlを追加する必要があります。これらの設定の詳細についてはhereをご覧ください。

<classloading xmlns="urn:jboss:classloading:1.0" 
domain="pentaho.ear" 
export-all="NON_EMPTY" 
import-all="true" 
parent-first="false"> 
</classloading> 
関連する問題