Loader プラグインを使用すると、 通常は、同一システムあるいは別システムの永続ストアに保持されるデータのメモリー・キャッシュとして ObjectGrid マップを動作させることができます。 通常、データベースまたはファイル・システムは永続ストアとして使用されます。 リモート Java 仮想マシン (JVM) は、データ・ソースとして使用することもでき、ObjectGrid を使用したハブ・ベースのキャッシュを作成できます。 ローダーには、 永続ストアとの間でデータの読み取りおよび書き込みを行うロジックが備わっています。
ローダーは、変更がバックアップ・マップに対して行われた場合、または、バックアップ・マップがデータ要求を満足できない (キャッシュ・ミス) 場合に呼び出されるバックアップ・マップ・プラグインです。
WebSphere eXtreme Scale には、リレーショナル・データベース・バックエンドと統合する 2 つの組み込みローダーがあります。 Java Persistence API (JPA) ローダーは、JPA 仕様の OpenJPA 実装と Hibernate 実装の両方のオブジェクト・リレーショナル・マッピング (ORM) 機能を使用します。
マルチマスター構成でのローダーの使用に関する考慮事項については、マルチマスター・トポロジーでのローダーについての考慮事項を参照してください。
以下のコード・スニペットは、ObjectGrid API を使用してアプリケーションが提供するローダーを map1 のバックアップ・マップに接続する方法を示しています。
import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;
import com.ibm.websphere.objectgrid.ObjectGridManager;
import com.ibm.websphere.objectgrid.ObjectGrid;
import com.ibm.websphere.objectgrid.BackingMap;
ObjectGridManager ogManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid og = ogManager.createObjectGrid( "grid" );
BackingMap bm = og.defineMap( "map1" );
MyLoader loader = new MyLoader();
loader.setDataBaseName("testdb");
loader.setIsolationLevel("read committed");
bm.setLoader( loader );
このスニペットでは、 MyLoader クラスは、com.ibm.websphere.objectgrid.plugins.Loader インターフェースを実装するアプリケーション提供のクラスであることが前提になります。 ObjectGrid の初期化後は、ローダーとバックアップ・マップとの関連付けを変更できないので、 呼び出されている ObjectGrid インターフェースの initialize メソッドを起動する前にコードを実行する必要があります。 初期化が起こった後に setLoader メソッドが呼び出された場合、IllegalStateException 例外 が発生します。
アプリケーションが提供する Loader には、set プロパティーがあります。例では、MyLoader ローダーを使用して、リレーショナル・データベースの表からデータを読み書きします。 ローダーにより、データベースの名前と SQL 分離レベルが指定されることが必要です。 MyLoader ローダーには、setDataBaseName メソッドと setIsolationLevel メソッドがあり、 アプリケーションはこれらのメソッドを使用してこれら 2 つの Loader プロパティーを設定できます。
<?xml version="1.0" encoding="UTF-8" ?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="grid">
<backingMap name="map1" pluginCollectionRef="map1" lockStrategy="OPTIMISTIC" />
</objectGrid>
</objectGrids>
<backingMapPluginCollections>
<backingMapPluginCollection id="map1">
<bean id="Loader" className="com.myapplication.MyLoader">
<property name="dataBaseName"
type="java.lang.String"
value="testdb"
description="database name" />
<property name="isolationLevel"
type="java.lang.String"
value="read committed"
description="iso level" />
</bean>
</backingMapPluginCollection>
</backingMapPluginCollections>
</objectGridConfig>