パーシスタンス・プロバイダーとデータ・ソースの関連付け
Java™ Persistence API (JPA) アプリケーションでは、 データベースにアクセスするためにパーシスタンス・プロバイダーによって使用される基礎データ・ソースを指定します。
このタスクについて
手順
- Java Naming
and Directory Interface (JNDI) 名を persistence.xml ファイルで明示的に指定すると、アプリケーションは直接データ・ソースを参照します。 別のデータ・ソースに切り替えるには、persistence.xml ファイルを更新する必要があります。JPA は、以下の 2 つのトランザクション・パターンでデータ・ソースにアクセスします。
- Java Transaction API (JTA) リソース・パターンは、グローバル・トランザクションにより異なります。 JTA リソース・パターンは、通常、Enterprise JavaBeans (EJB) セッション・ファサードの有効範囲内で使用されます。これにより、JPA がパーシスタンス・マッピングを処理する一方で、セッション Bean がトランザクションおよびセキュリティー・コンテキストを制御することがサポートされます。 この場合、アプリケーションは EntityTransaction インターフェースを使用しませんが、アクセスされるときには、グローバル・トランザクションに参加する EntityManager に依存します。
- 非 JTA リソース・パターンは、グローバル・トランザクションがない場合に、単一のリソースを扱う際に使用されます。
非 JTA リソース・パターンは、通常、Web アプリケーションまたはアプリケーション・クライアントの有効範囲内で使用されます。
アプリケーションは、EntityTransaction インターフェースを使用して、データ・ソースとのトランザクションを制御します。アプリケーション・サーバー内で <non-jta-data-source> エレメントを使用するには、非トランザクション・データ・ソース用の特別な構成が必要となります。 アプリケーション・サーバーによって構成されたデータ・ソースは、すべて自動的に現在のトランザクション・コンテキストに参加するため、アプリケーション・サーバー用に構成されたデータ・ソースは、<non-jta-data-source> として機能しません。 この自動参加を回避するには、以下のようにして追加データ・ソース・カスタム・プロパティー nonTransactionalDataSource=true を追加します。
- 「リソース」 > 「JDBC」 > 「データ・ソース」と選択します。
- 構成するデータ・ソースの名前を選択します。
- 「追加プロパティー」見出しで、「WebSphere Application Server データ・ソース・プロパティー」を選択します。
- 「非トランザクション・データ・ソース (Non-transactional data source)」を選択します。
- 「OK」をクリックします。
トラブルの回避 (Avoid trouble): JPA の仕様では、データベースで長期ロックを保持しない、READ_COMMITTED のような分離レベルで接続が取得されることを想定しています。これは、WebSphere® Application Server のデフォルトの分離レベル (大部分のデータベースでは REPEATABLE_READ) とは一致しない場合があります。 『分離レベル設定の要件』トピックを参照して、データベースに使用されているレベルを確認することができます。
データベースのデフォルトが READ_COMMITTED ではない場合、追加のデータ・ソース・カスタム・プロパティー webSphereDefaultIsolationLevel を追加して、デフォルトを変更することができます。分離レベルが長期読み取りロックを保持する値に設定されている場合には、デフォルトのオプティミスティック・ロックではなく、ペシミスティック・ロックを使用するように JPA プロバイダーを構成します。表 1. 分離レベルの値. 次の表は、有効な分離レベル値を示します。 値 分離レベル 1 READ_UNCOMMITTED 2 READ_COMMITTED (JPA のデフォルト) 4 REPEATABLE_READ (WebSphere Application Server のデフォルト) 8 SERIALIZABLE EclipseLink の場合、persistence.xml ファイルの中の以下のプロパティーを使用します。<property name=”eclipselink.pessimistic-lock” value=”Lock”/>
OpenJPA の場合、persistence.xml ファイルの中の以下のプロパティー使用します。gotcha<property name="openjpa.Optimistic" value="false"/> <property name="openjpa.LockManager" value=pessimistic"/>
JPA の仕様では、パーシスタンス・ユニットの <jta-data-source> エレメントおよび <non-jta-data-source> エレメントで定義されたデータ・ソースを JNDI 名前空間に登録するように指示しています。
例えば、persistence.xml ファイルには、次のようなエントリーが含まれている必要があります。<jta-data-source>jdbc/DataSourceJNDI</jta-data-source>
- WebSphere Application Server 用 JPA ソリューションは、コンポーネント名前空間内のデータ・ソースを参照できるよう、JNDI データ・ソースの実装を拡張します。 EJB または Web モジュール・デプロイメント記述子ファイルでは、これは <resource-ref> エレメントです。データ・ソースの接頭部に java:comp/env/ を付けて、アプリケーションがローカル JNDI 名を使用して、間接的にデータ・ソースを参照するようにすることができます。
これに関連してアプリケーションを更新する必要はありません。
<resource-ref> を、他のデータ・ソースを使用するように変更してください。以下の例を参照してください。
<jta-data-source>java:comp/env/jdbc/DataSourceJNDI</jta-data-source>
次のタスク
データ・ソースの構成については、データ・ソースの作成および構成に関するトピックを参照してください。
関連概念:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_defjpadatasource
ファイル名:tejb_defjpadatasource.html