バンドル内の JPA を使用するデータへのアクセス

このタスクについて

バンドル内の JPA を使用するデータにアクセスする場合、サーバー上で Java™ EE モジュールとして扱われるバンドルで作業を行っていることが前提となります。例えば、JPA ファセットが有効になっており、JPA を使用するデータにアクセスしたり、データを取り込んだり、表示したりするためのエンティティーとロジックが含まれている OSGi Web アプリケーション・バンドルです。また、EAR デプロイメントの一部としてではなく、OSGi アプリケーションに公開されている、JPA を使用するデータを取り込むための JPA エンティティーとロジックが含まれている Web プロジェクトもそのような例の 1 つです。

JPA パーシスタンス・ユニットにアクセスするには、事前に OSGi バンドルを構成し、WebSphere® Application Server にデータ・ソースを追加しておく必要があります。

ヒント:

JPA パーシスタンス・ファイル に Java Transaction API (JTA) および非 JTA データ・ソースへの参照が必ず含まれるようにしてください。

JPA には、データ・ソースにアクセスするためのトランザクション・パターンが 2 つあります。
jta-data-source
Java Transaction API (JTA) リソース・パターンは、グローバル・トランザクションに依存します。JTA リソース・パターン は通常、Enterprise JavaBeans (EJB) セッション・ファサードの範囲内で使用されます。 この構成により、セッション Bean がトランザクションおよびセキュリティー・コンテキストを制御し、JPA がパーシスタンスのマッピングを扱うようにすることができます。 この場合、アプリケーションは EntityTransaction インターフェースを使用しませんが、アクセスされるときには、グローバル・トランザクションに参加する EntityManager に依存します。
non-jta-data-source
非 JTA リソース・パターンは、グローバル・トランザクションがない場合に、単一のリソースを扱うために 使用されます。非 JTA リソース・パターンは通常、 Web アプリケーションまたはアプリケーション・クライアントの範囲内で使用されます。 アプリケーションは、EntityTransaction インターフェースによってデータ・ソースとのトランザクションを制御します。

OSGi アプリケーションの persistence.xml ファイル内の、jta-data-source エレメントと non-jta-data-source エレメントは、Java Naming and Directory Interface (JNDI) ルックアップ、サービス・レジストリーに対する JNDI ルックアップ、または Blueprint を使用してデータ・ソースにアクセスします。

JTA および 非 JTA データ・ソースが persistence.xml ファイル内で構成されていない場合、サーバー用に構成されたデフォルトの JTA および非 JTA データ・ソースが使用されます。デフォルトでは、値は NULL です。一部の JPA エンティティーのフィーチャーには、非 JTA データ・ソースが指定されている必要があります。 例えば、エンティティー ID の自動生成です。

手順

  1. persistence.xml に非 JTA データ・ソースを追加します。
    1. エディターで persistence.xml を開きます。
    2. 「概要」セクションで、コンポーネント・リストを 確認し、該当するエンティティーを選択してそのエンティティーの詳細を表示します。
    3. 非 JTA の「データ・ソース」フィールドに、 非 JTA データ・ソースのグローバル JNDI 名を入力します。 例えば、osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/blogdbnojta) です。
  2. persistence.xml に JTA データ・ソースを追加します。
    1. エディターで persistence.xml を開きます。
    2. 「概要」セクションで、コンポーネント・リストを 確認し、該当するエンティティーを選択してそのエンティティーの詳細を表示します。
    3. JTA の「データ・ソース」フィールドに、 データ・ソースのグローバル JNDI 名を入力します。 例えば、osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/blogdb) です。
  3. WebSphere Application Server 管理コンソールに JDBC プロバイダーを追加します。
    1. 「サーバー」ビューに切り替えます。
    2. サーバー・インスタンスを右クリックし、「開始」を選択します。
    3. サーバー・インスタンスを右クリックして、「管理」 > 「管理コンソールの実行」を選択し、管理コンソールを開きます。
    4. 「リソース」 > 「JDBC」 > 「JDBC プロバイダー」とクリックします。
    5. JDBC プロバイダーのページで「新規」をクリックします。 「データ・ソースの作成」ウィザードが開きます。
    6. ウィザードの指示に従って、JDBC プロバイダーを作成します。
    7. 変更内容を保存します。
  4. WebSphere Application Server 管理コンソールにデータ・ソース定義を追加します。
    1. 管理コンソールで、「リソース」 > 「JDBC」 > 「データ・ソース」をクリックして、コンソールの「データ・ソース」ページを開きます。
    2. データ・ソース」ページで、「新規」をクリックして、persistence.xml で指定されている JTA 接続定義に JNDI 名を設定して、データ・ソース定義を作成します。 例えば、jdbc/blogdb です。
    3. データ・ソース」ページで、「新規」をクリックして、persistence.xml で指定されている非 JTA 接続定義に JNDI 名を設定して、データ・ソース定義をもう 1 つ作成します。 例えば、jdbc/blogdbnojta です。
    4. 非 JTA 接続のデータ・ソースを作成したら、 管理コンソールの「データ・ソース」ページの非 JTA 接続の定義をクリックします。「構成」ページが開きます。
    5. 「追加プロパティー」セクションで、「WebSphere Application Server データ・ソース・プロパティー」をクリックします。
    6. 非トランザクション・データ・ソース」を選択します。 アプリケーション・サーバー内では、<non-jta-data-source> 要素を使用するには 非トランザクション・データ・ソース用の特別な構成が必要です。 アプリケーション・サーバー用に構成された「データ・ソース」は、<non-jta-data-source> として機能しません。 これは、アプリケーション・サーバーによって構成されたデータ・ソースは、すべて自動的に現在のトランザクションのコンテキストに参加するためです。この自動参加を防ぐには、データ・ソース・カスタム・プロパティー nonTransactionalDataSource=true を追加します。

タスクの結果

これで persistence.xml および WebSphere Application Server は OSGi バンドル内の JPA にアクセスできるように構成されました。
トピックのタイプを示すアイコン タスクのトピック
インフォメーション・センターのご利用条件 | フィードバック

タイム・スタンプ・アイコン 最終更新: May 29, 2014 10:20

ファイル名: taccessjpainbundle.html