1

私は、Seam 2.2.0、JPA プロバイダーとして hibernate 3.5.0-CR-2、データベース サーバーとして DB2、アプリケーション サーバーとして Websphere 7 を使用する Maven プロジェクトに取り組んでいます。今、私は次の問題に直面しています:

  • SEAM コンポーネントとしても表示される EJB では、Seam の EntityManager (@In private EntityManager em) ではなく、EJB コンテナー (@PersistenceContext private EntityManager em) の EntityManager を使用したいと考えています。しかし、これが問題です。@PersistenceContext を使用して EntityManager を取得できません。

サーバー ログでは、EntityManagerFactory を作成できず、ClassCastException を取得することが示されています。

java.lang.ClassCastException: org.hibernate.ejb.HibernatePersistence は javax.persistence.spi.PersistenceProvider と互換性がありません

フォーラムで多くのデバッグと検索を行った結果、Websphere が Hibernate JPA プロバイダーを使用していないことが問題であると推測しています。

誰かがこの問題に直面し、解決策を持っていますか? アプリケーションが最初にアプリケーション クラス ローダーを使用してクラスをロードするように、既に WAS クラス ローダーの順序を構成し、必要なすべての jar をアプリケーション イヤーにパックしまし。必要に応じて、persistence.xml、components.xml ファイル、およびスタック トレースを投稿します。

この問題がここでも議論されていることがわかりました:

どんなヒントも役に立ちます。
前もって感謝します!
ミハエラ

4

1 に答える 1

4

EARにJPAAPIjarが含まれていると思われます。「parentlast」(「アプリケーションクラスローダーファーストでクラスをロードする」とも呼ばれます)を使用する場合、アプリケーションは、WASに含まれるコピーと互換性のないjavax.persistence.spi.PersistenceProviderクラスの2番目のコピーをロードします。これらのクラスをEARから削除するか、「親優先」委任モードに戻す必要があります。

于 2010-05-05T22:01:28.703 に答える