1

次の構成は WebLogic では問題ありませんが、OpenEJB では「javax.naming.NameNotFoundException: Name "AppDB" not found.」というエラーが発生します。

プロパティ javax.persistence.jtaDataSource を削除すると、機能します。そして、なぜ2つの複製されたデータソースを設定するのですか? これは Eclipselinks のバグであるため ( http://bugs.eclipse.org/246126を参照)

<persistence-unit name="app1" transaction-type="JTA">
  <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
  <jta-data-source>AppDB</jta-data-source>

  <properties>
    <property name="javax.persistence.jtaDataSource" value="AppDB" />
  </properties>       
</persistence-unit>

以下は jndi.properties です

java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory
openejb.validation.output.level=VERBOSE
openejb.nobanner=false
jdbc/AppDB = new://Resource?type=DataSource
jdbc/AppDB.provider = org.eclipse.persistence.jpa.PersistenceProvider 
jdbc/AppDB.JdbcDriver = oracle.jdbc.OracleDriver
jdbc/AppDB.JdbcUrl = jdbc:oracle:thin:@xx.xx.xx.xx:xxxx:xxxx
jdbc/AppDB.JtaManaged = false
jdbc/AppDB.UserName = xxxx
jdbc/AppDB.Password = xxxx

これは他のチームによってパッケージ化された jar であるため、内容を変更することはできませんが、それでも OpenEJB で使用したいのですが、何か提案はありますか? ありがとう。

4

1 に答える 1

2

javax.persistence.jtaDataSourceEclipseLinkがプロパティをどのように処理するかはまったくわかりません。これはある種の JNDI ルックアップであると想定しなければなりませんが、それを行う方法には信じられないほどの重要性があります。たとえば、それらが先頭に追加java:comp/env/されると、セマンティクスが大幅に変更されます。

javax.persistence.jtaDataSourceデータソースに OpenEJB グローバル JNDI 名を使用するようにオーバーライドしてみてください。したがって、jndi.propertiesファイルに追加します

app1.javax.persistence.jtaDataSource = openejb:Resource/jdbc/AppDB

それが機能するかどうかを必ず教えてください。プロパティが実際には JPA プロバイダーによって使用されている場合でも、OpenEJB に追加するのに適した機能と思われます。無効な JNDI 名を修正することは、非常に便利です。

補足として、「jdbc/AppDB.provider」はデータソースでサポートされているプロパティではないというログ ステートメントがあるはずです。おそらく、そのプロパティを削除するのが最善です。

于 2011-10-08T23:00:19.020 に答える