0

WAR、ユーティリティ プロジェクト、および JPA プロジェクトを含む EAR アプリケーションがあります。JPA プロジェクトにはすべてのエンティティ クラスが含まれており、META-INF ディレクトリには、次のように定義されている persistence.xml があります。

    <?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="TestJPA">
        <description>openjpa</description>
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <jta-data-source>jdbc/TestSource</jta-data-source>
        <class>model.TestTable1</class>
        <class>model.TestTable2</class>
    </persistence-unit>
</persistence>

web.xml には、持続性ユニット用に次のものが含まれています。

  <persistence-unit-ref>
    <persistence-unit-ref-name>peristence/TestJPA</persistence-unit-ref-name>
    <persistence-unit-name>TestJPA</persistence-unit-name>
  </persistence-unit-ref>

私たちのWebサービスには、次のものがあります。

@PersistenceContext(name="peristence/TestJPA", unitName="TestJPA")
private EntityManagerFactory emf;

アプリケーションがデプロイされると、emf はインスタンス化されません。常に null です。引数の有無にかかわらず、 @PersistenceUnit も試しました。

また、InitialContext ルックアップを使用して EntityManager を取得するという別のアプローチも試しました。このアプローチを使用すると、リソース名が見つからないという例外がスローされます。

最後に試したアプローチは次のとおりです。

em = (EntityManager) Persistence.createEntityManagerFactory("TestJPA");

次の例外が発生します

java.lang.ClassCastException: com.ibm.ws.persistence.EntityManagerFactoryImpl incompatible with javax.persistence.EntityManager

EAR を使用した OpenJPA デプロイメントに関するあらゆる種類のチュートリアルを探しましたが、それらはすべて JPA 2 または Spring を使用した OpenJPA 1 用です。

どんな助けでも大歓迎です。

4

2 に答える 2

0

Web モジュールでは、PersistneceContext の代わりに PersistenceUnit を使用する必要があります。次の注入を試してください。

@PersistenceUnit(unitName="TestJPA")
EntityManagerFactory emf;

...
EntityManager em = emf.createEntityManager();
...
em.close();

また、どのような Web サービスを使用していますか? サードパーティの WS エンジンを使用している場合、アノテーションの統合が機能しない可能性があります。

于 2014-08-27T21:15:23.130 に答える
0

//これを試して

@PersistenceContext(name="TestJPA") プライベート EntityManager em;

WAS 7 を掘り下げて、それらのライブラリを使用することをお勧めします。JDK であっても、IBM 以外のライブラリを使用する場合、WAS は悪夢です。

于 2012-07-11T14:54:25.417 に答える