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

このタスクについて

別のバンドルの JPA パーシスタンス・ユニットにアクセスするには、事前に JPA バンドルを構成し、WebSphere® Application Server にデータ・ソースを追加しておく必要があります。 例えば、JPA エンティティーを取り込み、データを表示して操作する Web アプリケーション・バンドルです。
ヒント:

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. エンティティーおよびエンティティー・コントローラー・パッケージをエクスポート・パッケージとして manifest.mf に追加します。
    1. 「マニフェスト: <project_name>をダブルクリックします。 <project_name> は、JPA バンドル・プロジェクトの名前です。バンドル・マニフェストがエディターで開きます。
    2. 「ランタイム」タブに切り替えます。 エンティティーおよびエンティティー・コントローラー・パッケージがエクスポート・パッケージとして追加されていることを確認します。
  2. persistence.xml に非 JTA データ・ソースを追加します。
    1. エディターで persistence.xml を開きます。
    2. コンポーネント・リストからエンティティーを選択して、そのエンティティーの詳細を表示します。
    3. 「非 JTA データ・ソース」フィールドに、非データ・ソースのグローバル JNDI 名を入力します。例えば、osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/blogdbnojta) です。
  3. getEntityManager() メソッドを変更します。

    JPA バンドル内のパーシスタンス・ユニットは Java EE 環境にないので、getEntityManager() メソッドを変更することで、EntityManagerFactory サービス用に JNDI ルックアップを構成していることになります。

    エンティティー・マネージャー Bean をブループリント管理 Bean にすることによっても JNDI ルックアップを構成することができます。 詳しくは、JPA と OSGi アプリケーションを参照してください。

    1. エディターでエンティティー・マネージャー Bean を開きます。
    2. getEntityManager() を見つけ、次のように変更します。
      private EntityManager getEntityManager() {
      		try {
      			emf = (EntityManagerFactory) new InitialContext().lookup("osgi:service/javax.persistence.EntityManagerFactory/(osgi.unit.name=jpaBundle)");
      		} catch (NamingException e) {
      			// TODO Auto-generated catch block
      			e.printStackTrace();
      		}
      		
      		return emf.createEntityManager();
      	}
      重要: 以下のコード行で、 パーシスタンス・ユニットが persistence.xml 内のパーシスタンス・ユニットと一致するようにしてください。
      			emf = (EntityManagerFactory) new InitialContext().lookup("osgi:service/javax.persistence.EntityManagerFactory/(osgi.unit.name=jpaBundle)");
  4. InitialContext および NamingException で生成されたエラーを修正します。
    1. 「マーカー」ビューに切り替えます。
    2. 各エラーを右クリックし、「クイック・フィックス」を選択します。 ウィザードの指示に従って、必要なパッケージをインポートします。
  5. WebSphere Application Server 管理コンソールに JDBC プロバイダーを追加します。
    1. 「サーバー」ビューに切り替えます。
    2. サーバー・インスタンスを右クリックし、「開始」を選択します。
    3. サーバー・インスタンスを右クリックして、「管理」 > 「管理コンソールの実行」を選択し、管理コンソールを開きます。
    4. 「リソース」 > 「JDBC」 > 「JDBC プロバイダー」とクリックします。
    5. JDBC プロバイダーのページで「新規」をクリックします。 「データ・ソースの作成」ウィザードが開きます。
    6. ウィザードの指示に従って、JDBC プロバイダーを作成します。
    7. 変更内容を保存します。
  6. 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 を追加します。

タスクの結果

これで、JPA エンティティーを取り込み、JPA データを表示して、操作することができます。 ここでは JPA バンドルは、Web アプリケーション・バンドルからアクセスされます。
トピックのタイプを示すアイコン タスクのトピック
インフォメーション・センターのご利用条件 | フィードバック

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

ファイル名: taccessjpaoutbundle.html