JPA ローダー

Java Persistence API (JPA) は、 Java オブジェクトをリレーショナル・データベースにマップ するための仕様です。JPA には、Java 言語メタデータ・アノテーション、XML 記述子、 またはその両方を使用して、Java オブジェクトとリレーショナル・データベースとの 間のマッピングを定義するための、完全なオブジェクト・リレーショナル・マッピング (ORM) 仕様が含まれています。オープン・ソースおよび商用の実装がいくつか使用できます。

eXtreme Scale と一緒に Java Persistence API (JPA) Loader プラグイン実装を使用すると、選択されたローダーがサポートする任意のデータベースと対話することができます。JPA を使用するには、サポートされる JPA プロバイダー (OpenJPA や Hibernate など)、JAR ファイル、および META-INF/persistence.xml ファイル がクラスパスになければなりません。

JPALoader の com.ibm.websphere.objectgrid.jpa.JPALoader および JPAEntityLoader com.ibm.websphere.objectgrid.jpa.JPAEntityLoader プラグインは、ObjectGrid マップとデータベースを同期するために使用される 2 つの組み込み JPA Loader プラグインです。この機能を使用するには、Hibernate または OpenJPA などの JPA 実装がなくてはなりません。データベースは、選択された JPA プロバイダーがサポートする任意のバックエンドを使用できます。

ObjectMap API を使用してデータを保管する場合、JPALoader プラグインを使用することができます。EntityManager API を使用してデータを保管する場合、JPAEntityLoader プラグインを使用します。

JPA ローダー・アーキテクチャー

JPA ローダー は、Plain Old Java Object (POJO) を保管する eXtreme Scale マップに使用されます。

図 1. JPA ローダー・アーキテクチャー
JPA ローダー・アーキテクチャー

ObjectMap.get(Object key) メソッドが呼び出されると、eXtreme Scale ランタイムが、まず ObjectMap 層にエントリーがあるかどうかをチェックします。 ない場合、ランタイムは、要求を JPA Loader に委任します。キーのロード要求時に、JPALoader は JPA EntityManager.find(Object key) メソッドを呼び出して、JPA 層からのデータを検索します。データが JPA エンティティー・マネージャーに含まれている場合、そのデータが返されます。含まれていない場合は、JPA プロバイダーがデータベースと対話して値を取得します。

例えば、ObjectMap.update(Object key, Object value) メソッドを使用して ObjectMap に対する更新が行われると、eXtreme Scale ランタイムは、この更新に対する LogElement を作成し、これを JPALoader に送ります。JPALoader は、JPA EntityManager.merge(Object value) メソッドを呼び出して、データベースに対する値を更新します。

JPAEntityLoader の場合も、同じ 4 つの層が含まれます。ただし、JPAEntityLoader プラグインは、eXtreme Scale エンティティーを保管するマップに使用されるため、エンティティー間の関係が使用シナリオを複雑にする可能性があります。eXtreme Scale エンティティーは、JPA エンティティーとは区別されます。詳しくは、JPAEntityLoader プラグインを参照してください。詳しくは、JPAEntityLoader プラグインを参照してください。詳しくは、プログラミング・ガイドの JPAEntityLoader プラグインに関する説明を参照してください。

方式

ローダーでは、3 つの主要なメソッドを提供しています。
  1. get: JPA を使用してデータを取得することにより、渡されたキーのリストに対応する値のリストを返します。 このメソッドは、JPA を使用して、データベース内のエンティティーを検出します。JPALoader プラグインの場合、返されるリストには、find 操作から直接得られた JPA エンティティーのリストが含まれます。JPAEntityLoader プラグインの場合、返されるリストには、JPA エンティティーから変換された eXtreme Scale エンティティー値タプルが含まれます。
  2. batchUpdate: ObjectGrid マップのデータをデータベースに書き込みます。異なる操作タイプ (挿入、更新、削除) に応じて、ローダーは、JPA パーシスト、マージ、および除去操作を使用してデータベースに対するデータを更新します。JPALoader の場合、マップ内のオブジェクトが JPA エンティティーとして直接使用されます。JPAEntityLoader の場合、マップ内のエンティティー・タプルが、JPA エンティティーとして使用されるオブジェクトに変換されます。
  3. preloadMap: ClientLoader.load クライアント・ローダー・メソッドを使用してマップをプリロードします。区画化マップの場合、preloadMap メソッドは 1 つの区画でのみ呼び出されます。区画は、JPALoader または JPAEntityLoader クラスの preloadPartition プロパティーに指定します。 preloadPartition 値がゼロより小さく設定されているか、total_number_of_partitions - 1) より大きく設定されている場合、プリロードは使用不可になります。

JPALoaderJPAEntityLoader のいずれのプラグインも、JPATxCallback クラスで動作し、eXtreme Scale トランザクションと JPA トランザクションを調整します。これら 2 つのローダーを使用するには、JPATxCallback を ObjectGrid インスタンス内に構成する必要があります。

構成およびプログラミング

JPA ローダーをマルチマスター環境で使用する場合は、マルチマスター・トポロジーでのローダーについての考慮事項を参照してください。JPA ローダーの構成 について詳しくは、JPA ローダーの構成を参照してください。JPA ローダーの プログラミングについて詳しくは、JPA ローダーのプログラミング考慮事項を参照してください。