ObjectGrid 記述子 XML ファイル

WebSphere® eXtreme Scale を構成するには、ObjectGrid ディスクリプター XML ファイルおよび ObjectGrid API を使用します。

以下のセクションでは、さまざまな構成を解説するサンプル XML ファイルが提供されています。XML ファイルの各エレメントおよび属性について定義されています。 ObjectGrid 記述子 XML スキーマを使用して、記述 XML ファイルを作成します。ObjectGrid 記述子 XML スキーマの例については、objectGrid.xsd ファイル を参照してください。

オリジナルの companyGrid.xml ファイルを変更したバージョンが使用されます。 次の companyGridSingleMap.xml ファイルは、companyGrid.xml ファイルと似ています。 companyGridSingleMap.xml ファイルにはマップが 1 つあり、companyGrid.xml ファイルにはマップが 4 つあります。 ファイルのエレメントと属性については、この例に続いて詳しく説明します。
<?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="CompanyGrid">
						<backingMap name="Customer"/>
				</objectGrid>
		</objectGrids>
</objectGridConfig>

objectGridConfig エレメント

objectGridConfig エレメントは、XML ファイルの最上位レベルのエレメントです。前の例で示されているように、このエレメントを eXtreme Scale XML 文書に記述します。このエレメントは、ファイルの名前空間とスキーマ・ロケーションをセットアップします。 スキーマは objectGrid.xsd ファイルで定義されます。

objectGrids エレメント

objectGrids エレメントは、すべての objectGrid エレメントのコンテナーです。 companyGridSingleMap.xml ファイルでは、objectGrids エレメントに CompanyGrid という objectGrid が 1 つ含まれています。

objectGrid エレメント

objectGrid エレメントを使用して ObjectGrid を定義します。objectGrid エレメント上の各属性は、ObjectGrid インターフェース上のメソッドに対応します。
属性
name
ObjectGrid に割り当てられている名前を指定します。この属性が欠落している場合、XML 妥当性検査は失敗します。(必須)
securityEnabled
属性を true に設定したとき、ObjectGrid レベルのセキュリティーを使用可能にします。これにより、マップ内のデータに対するアクセス許可が使用可能になります。デフォルトは true です。 (オプション)
authorizationMechanism
エレメントの許可メカニズムを設定します。 この属性は 2 つの値 (AUTHORIZATION_MECHANISM_JAAS または AUTHORIZATION_MECHANISM_CUSTOM) のいずれかに設定できます。 デフォルトは AUTHORIZATION_MECHANISM_JAAS です。 authorizationMechanism 属性を有効にするためには、securityEnabled 属性を true に設定する必要があります。(オプション)
permissionCheckPeriod
クライアント・アクセスを許可するために使用されるアクセス権の検査頻度を、秒単位の整数値で指定します。 デフォルトは 0 です。属性値 0 を設定すると、すべての get、put、update、remove または evict メソッド呼び出しが許可メカニズム (Java Authentication and Authorization Service (JAAS) 権限またはカスタム権限のいずれか) に問い合わせ、現行サブジェクトがアクセス権を持っているかどうかを検査します。0 より大きな値は、アクセス権のセットを、更新のために許可メカニズムへ戻す前に、キャッシュに入れる秒数を示します。permissionCheckPeriod 属性を有効にするためには、securityEnabled 属性を true に設定する必要があります。(オプション)
txTimeout
トランザクションを完了するのに許されている時間を秒で指定します。トランザクションがこの時間内に完了しなかった場合、 そのトランザクションはロールバック対象としてマークされ、TransactionTimeoutException 例外が発生します。 値を 0 に設定すると、トランザクションのタイムアウトとして、デフォルトの設定値の 10 分が使用されます。(オプション)
entityMetadataXMLFile
エンティティー・スキーマを定義するエンティティー記述子 XML ファイルへのパスを指定します。各エンティティーがバックアップ・マップにバインドできるように、カタログ・サーバーを始動する前にエンティティーを定義してください。
  • 相対ディレクトリーの場合: objectgrid.xml ファイルの場所に対して相対的な場所を指定します。
  • 絶対パスの場合: file:// または http:// などの URL 形式で場所を指定します。
(オプション)
<objectGrid
(1)	name="objectGridName"
(2)	securityEnabled="true" | "false"
(3)	authorizationMechanism="AUTHORIZATION_MECHANISM_JASS" | "AUTHORIZATION_MECHANISM_CUSTOM"
(4) 	permissionCheckPeriod="permission_check_period"
(5)	txTimeout="seconds"
(6)	entityMetadataXMLFile="URL"
/>
以下の例 (companyGridObjectGridAttr.xml ファイル) は、objectGrid エレメントの属性を構成するための 1 つの方法を説明するものです。 セキュリティーは使用可能にされ、許可メカニズムは JAAS に設定され、アクセス権検査期間は 45 秒に設定されています。 また、このファイルでは entityMetadataXMLFile 属性を指定してエンティティーを登録しています。
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlnc: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="CompanyGrid" securityEnabled="true"
			authorizationMechanism="AUTHORIZATION_MECHANISM_JASS"
			permissionCheckPeriod="45"
			entityMetadataXMLFile="companyGridEntities.xml">
			<backingMap name="Customer"/>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
以下のコード・サンプルは、前の例の companyGridObjectGridAttr.xml ファイルと同じ構成を達成するプログラマチックな方法を示すものです。
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);

companyGrid.setSecurityEnabled();
companyGrid.setAuthorizationMechanism(SecurityConstants.AUTHORIZATION_MECHANISM_JAAS);
companyGrid.setPermissionCheckPeriod(45);
companyGrid.registerEntities(new URL("file:companyGridEntities.xml"));

backingMap エレメント

backingMap エレメントは、ObjectGrid で BackingMap インスタンスを定義するために使用します。backingMap エレメント上の各属性は、BackingMap インターフェース上のメソッドに対応します。 詳しくは、BackingMap インターフェースを参照してください。
属性
name
backingMap インスタンスに割り当てられている名前を指定します。 この属性が欠落している場合、XML 妥当性検査は失敗します。 (必須)
readOnly
この属性を false として指定すると、BackingMap インスタンスを読み取り/書き込みとして設定します。 この属性を true として設定すると、BackingMap インスタンスは読み取り専用となります。 (オプション)
template
動的マップが使用できるかどうかを指定します。BackingMap マップがテンプレート・マップである場合、この値を true に設定します。テンプレート・マップを使用して、 ObjectGrid の開始後に動的にマップを作成できます。 Session.getMap(String) を呼び出すと、メソッドに渡された名前が、backingMap の name 属性に指定された正規表現に一致する場合、 動的マップが作成されます。 デフォルト値は false です。(オプション)
pluginCollectionRef
backingMapPluginCollection プラグインへの参照を指定します。 この属性の値は、backingMapCollection プラグインの ID 属性と一致しなければなりません。一致する ID が存在しない場合、妥当性検査は失敗します。BackingMap プラグインを再利用するように、この属性を設定してください。(オプション)
numberOfBuckets
BackingMap インスタンスが使用するバケットの数を指定します。 BackingMap インスタンスは実装でハッシュ・マップを使用します。 BackingMap の中に複数のエントリーが存在する場合は、バケット数が増えると衝突のリスクが低減するため、バケットの数が多くなるほどパフォーマンスが向上します。 また、バケットが多いと並行性も高くなります。値 0 を設定すると、eXtreme Scale とのリモート通信中クライアントのニア・キャッシュが使用不可になります。 クライアントでこの値を 0 に設定するときは、この値をクライアント・オーバーライド ObjectGrid XML ディスクリプター・ファイルでのみ設定してください。(オプション)
preloadMode
Loader プラグインがこの BackingMap インスタンスに設定されている場合は、プリロード・モードを設定します。 デフォルト値は false です。属性が true に設定されている場合は、Loader.preloadMap(Session, BackingMap) メソッドが非同期に起動されます。 それ以外の場合は、プリロードが完了するまでキャッシュが使用不可になるように、データのロード中、メソッドの実行がブロックされます。 プリロードは初期化中に発生します。 (オプション)
lockStrategy
トランザクションがマップ・エントリーにアクセスするたびに内部ロック・マネージャーを使用するかどうかを指定します。 この属性は、OPTIMISTICPESSIMISTIC または NONE の 3 つの値のいずれかに設定できます。デフォルト値は OPTIMISTIC です。 (オプション)

オプティミスティック・ロック・ストラテジーは、通常、Loader プラグインを持たないマップで使用します。このようなマップは大部分が既読で、書き込みや更新は頻繁には行われません。また、eXtreme Scale をサイド・キャッシュとして使用するパーシスタンス・マネージャーからも、アプリケーションからもロックは提供されません。 コミット時に挿入、更新、または除去されるマップ・エントリー上では排他ロックが取得されます。 コミット中のトランザクションがオプティミスティック・バージョン・チェックを実行している間、別のトランザクションによってバージョン情報が変更されないことが、ロックによって保証されます。

ペシミスティック・ロック・ストラテジーは、通常、Loader プラグインを持たないマップで使用します。また、eXtreme Scale をサイド・キャッシュとして使用するパーシスタンス・マネージャーからも、Loader プラグインからも、アプリケーションからもロックは提供されません。 ペシミスティック・ロック・ストラテジーは、同じマップ・エントリー上で更新トランザクションが 頻繁に衝突を起こすことが原因で、オプティミスティック・ロック・ストラテジーの失敗回数が多すぎる場合に使用されます。

ロックなしストラテジーは、内部ロック・マネージャーが不要であることを示します。 eXtreme Scale の外部では、eXtreme Scale をサイド・キャッシュとして使用するパーシスタンス・マネージャー、またはアプリケーション、またはデータベース・ロックを使用して並行性を制御する Loader プラグインのいずれかによって並行性制御が提供されます。

詳しくは、ロック・マネージャーを参照してください。

numberOfLockBuckets
ロック・マネージャーが BackingMap インスタンスのために使用するロック・バケットの数を設定します。 lockStrategy 属性を OPTIMISTIC または PESSIMISTIC に設定すると、BackingMap インスタンス用のロック・マネージャーが作成されます。 ロック・マネージャーは、ハッシュ・マップを使用して、1 つ以上のトランザクションによってロックされるエントリーを追跡します。 多くのエントリーが存在する場合は、バケット数が増えるにつれて衝突のリスクが低減するため、ロック・バケットが多い方がパフォーマンスが向上します。 またロック・バケットを増やすことが、並行性の増大につながります。 lockStrategy 属性を NONE に設定すると、BackingMap インスタンスがロック・マネージャーを使用しないことが指定されます。(オプション)
lockTimeout
ロック・マネージャーが BackingMap インスタンスのために使用するロック・タイムアウト設定します。 lockStrategy 属性を OPTIMISTIC または PESSIMISTIC に設定すると、BackingMap インスタンス用のロック・マネージャーが作成されます。 デッドロックの発生を回避するために、ロック・マネージャーにはデフォルトのタイムアウト値 (15 秒) があります。 このタイムアウト制限を超過すると、LockTimeoutException 例外が発生します。 デフォルト値の 15 秒は、ほとんどのアプリケーションに対して適切ですが、負荷の過剰なシステム上では、デッドロックが存在しないときにタイムアウトが発生する可能性があります。 lockTimeout 属性を使用してデフォルトより大きい値を設定すれば、誤ったタイムアウト例外が発生しないようにすることができます。 lockStrategy 属性を NONE に設定すると、BackingMap インスタンスがロック・マネージャーを使用しないことが指定されます。(オプション)
CopyMode
BackingMap インスタンス内のエントリーの get 操作が実際の値、その値のコピー、またはその値のプロキシーを戻すかどうかを指定します。 CopyMode 属性を次の 5 つの値のいずれかに設定します。
COPY_ON_READ_AND_COMMIT
デフォルト値は COPY_ON_READ_AND_COMMIT です。 値を COPY_ON_READ_AND_COMMIT に設定すると、アプリケーションが BackingMap インスタンス内にある値オブジェクトへの参照を持たないようにすることができます。 代わりに、アプリケーションは BackingMap インスタンス内にある値のコピーを常に使用します。(オプション)
COPY_ON_READ
値を COPY_ON_READ に設定すると、トランザクションがコミットされたときに発生するコピーを除去することによって、COPY_ON_READ_AND_COMMIT 値以上にパフォーマンスを向上させることができます。 BackingMap データの整合性を保持するため、アプリケーションは、トランザクションがコミットされた後、エントリーに対するすべての参照を削除します。 この値を設定すると、ObjectMap.get メソッドは、値に対する参照の代わりにその値のコピーを戻し、トランザクションがコミットされるまで、アプリケーションによってその値に行われた変更が BackingMap エレメントに影響を与えないことを保証します。
COPY_ON_WRITE
値を COPY_ON_WRITE に設定すると、指定したキーのトランザクションによって ObjectMap.get メソッドが初めて呼び出されたときに発生するコピーを除去することにより、COPY_ON_READ_AND_COMMIT 値以上にパフォーマンスを向上させることができます。 その代わりに、ObjectMap.get メソッドは、値オブジェクトを直接参照するのではなく、その値にプロキシーを戻します。 プロキシーは、アプリケーションが値インターフェース上に set メソッドを呼び出さない限りは、その値のコピーを作成しないことを保証します。
NO_COPY
値を NO_COPY に設定すると、アプリケーションは、ObjectMap.get メソッドを使用して取得した値オブジェクトをパフォーマンス向上と交換に変更しないようにすることができます。 EntityManager API エンティティーに関連付けられているマップの場合は、値を NO_COPY に設定してください。
COPY_TO_BYTES
値を COPY_TO_BYTES に設定すると、オブジェクトのコピー処理がコピー作成のシリアライゼーションに依存している場合に、複雑なオブジェクト・タイプのメモリー・フットプリントを改善し、 パフォーマンスを改善します。 オブジェクトが Cloneable でないか、あるいは、効率的な copyValue メソッドを使用するカスタム ObjectTransformer が指定されていない場合、 デフォルトのコピー・メカニズムは、コピー作成のためにオブジェクトをシリアライズしてインフレーションします。 COPY_TO_BYTES 設定を使用すると、読み取り時にのみインフレーションが実行されて、コミット時にのみシリアライズが実行されます。
これらの設定について詳しくは、コピー・モードのチューニングを参照してください。
valueInterfaceClassName
CopyMode 属性を COPY_ON_WRITE に設定する際に必要なクラスを指定します。 この属性は、それ以外のモードでは無視されます。ObjectMap.get メソッド呼び出しが行われると、COPY_ON_WRITE 値はプロキシーを使用します。 プロキシーは、アプリケーションが valueInterfaceClassName 属性として指定されたクラス上に set メソッドを呼び出さない限りは、その値のコピーを作成しないことを保証します。 (オプション)
copyKey
マップ・エントリーの作成時にキーのコピーが必要であるかどうかを指定します。 キーのコピーによって、アプリケーションがそれぞれの ObjectMap 操作に対して同じキー・オブジェクトを使用することが可能になります。 値を true に設定すると、マップ・エントリーの作成時にキー・オブジェクトがコピーされます。 デフォルト値は false です。(オプション)
nullValuesSupported
値を true に設定すると、ObjectMap でヌル値がサポートされます。 ヌル値がサポートされていると、NULL を戻す get 操作は、値が NULL であること、またはメソッドに渡されるキーがマップに含まれていないことを意味する場合があります。 デフォルト値は true です。(オプション)
ttlEvictorType
BackingMap エントリーの有効期限の時間を算出する方法を指定します。 この属性は、CREATION_TIMELAST_ACCESS_TIMELAST_UPDATE_TIME、または NONE のいずれかの値に設定できます。CREATION_TIME 値の場合、エントリーの有効期限の時間は、このエントリーの作成時間と timeToLive 属性値の合計になります。 LAST_ACCESS_TIME 値の場合、エントリーの有効期限の時間は、エントリーの最終アクセス時間 (エントリーが更新された場合でも、読み取られただけの場合でも可) と timeToLive 属性値の合計になります。LAST_UPDATE_TIME 値の場合、エントリーの有効期限の時間は、このエントリーの最終更新時間と timeToLive 属性値の合計になります。NONE 値 (デフォルト) の場合、エントリーには有効期限がなく、アプリケーションによって明示的に除去または無効化されるまで、BackingMap 内に存続できることを示します。(オプション)
timeToLive
各マップ・エントリーの存続可能時間 (秒数) を指定します。 デフォルト値の 0 は、このマップ・エントリーが永久に存続するか、アプリケーションが明示的にこのエントリーを除去または無効化するまで存続することを意味します。 その他の場合は、TTL Evictor がこの値に基づいてマップ・エントリーを除去します。(オプション)
viewRef
backingMap がビュー・マップであることを指定します。 (オプション)
writeBehind
後書きパラメーター (オプション) によって後書きサポートが使用可能になることを指定します。 後書きパラメーターは、最大更新時間と最大キー更新カウントから成ります。 後書きパラメーターの形式は "[T(time)][;][C(count)]" です。 次のいずれかのイベントが発生すると、データベースが更新されます。
  • 前回の更新が終わってから最大更新時間 (秒数で指定) が経過した。
  • キュー・マップ内の使用可能な更新の数が最大更新カウントに達した。

詳しくは、後書きキャッシングを参照してください。

後書きサポートは、eXtreme Scale をデータベースに組み込む際に使用する Loader プラグインの拡張機能です。 例えば、JPA ローダーの構成については JPA ローダーの構成 の情報を参照してください。

evictionTriggers
追加使用する除去トリガーのタイプを設定します。 バックアップ・マップ用の Evictor は、すべてこの追加トリガーのリストを使用します。 IllegalStateException を回避するためには、ObjectGrid.initialize() メソッドを呼び出す前にこの属性を呼び出す必要があります。 また、ObjectGrid.initialize() メソッドがアプリケーションによってまだ呼び出されていない場合は、ObjectGrid.getSession() メソッドがこのメソッドを暗黙的に呼び出すので、注意してください。 トリガー・リスト内のエントリーはセミコロンで区切られます。 現在の除去トリガーには MEMORY_USAGE_THRESHOLD などがあります。 (オプション)
<backingMap
(1)			name="objectGridName"
(2)			readOnly="true" | "false"
(3)			template="true" | "false"
(4)			pluginCollectionRef="reference to backingMapPluginCollection"
(5)			numberOfBuckets="number of buckets"
(6)			preloadMode="true" | "false"
(7)			lockStrategy="OPTIMISTIC" | "PESSIMISTIC" | "NONE"
(8)			numberOfLockBuckets="number of lock buckets"
(9)			lockTimeout="lock timeout"
(10)			copyMode="COPY_ON_READ_AND_COMMIT" | "COPY_ON_READ" | "COPY_ON_WRITE"
							| "NO_COPY" | "COPY_TO_BYTES"
(11)			valueInterfaceClassName="value interface class name"
(12)			copyKey="true" | "false"
(13)			nullValuesSupported="true" | "false"
(14)			ttlEvictorType="CREATION_TIME" | "LAST_ACCESS_TIME" | "LAST_UPDATE_TIME" | NONE"
(15)			timeToLive="time to live"
(16)			streamRef="reference to a stream"
(17)			viewRef="reference to a view"
(18)			writeBehind="write-behind parameters"
(19)			evictionTriggers="MEMORY_USAGE_THRESHOLD"
/>		
次の例では、サンプルの backingMap 構成を例示するために companyGridBackingMapAttr.xml ファイルが使用されています。
<?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="CompanyGrid">
			 <backingMap name="Customer" readOnly="true"
					numberOfBuckets="641" preloadMode="false"
					lockStrategy="OPTIMISTIC" numberOfLockBuckets="409"
					lockTimeout="30" copyMode="COPY_ON_WRITE"
					valueInterfaceClassName="com.ibm.websphere.samples.objectgrid.CounterValueInterface"
					copyKey="true" nullValuesSupported="false"
					ttlEvictorType="LAST_ACCESS_TIME" timeToLive="3000"/>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
以下のサンプル・コードは、前述の companyGridBackingMapAttr.xml ファイルの例と同じ構成を達成するプログラマチックな方法を示すものです。
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);

BackingMap customerMap = companyGrid.defineMap("Customer");
customerMap.setReadOnly(true);
customerMap.setNumberOfBuckets(641);
customerMap.setPreloadMode(false);
customerMap.setLockStrategy(LockStrategy.OPTIMISTIC);
customerMap.setNumberOfLockBuckets(409);
customerMap.setLockTimeout(30);

// when setting copy mode to COPY_ON_WRITE, a valueInterface class is required
customerMap.setCopyMode(CopyMode.COPY_ON_WRITE, 
	com.ibm.websphere.samples.objectgrid.CounterValueInterface.class);
customerMap.setCopyKey(true);
customerMap.setNullValuesSupported(false);
customerMap.setTtlEvictorType(TTLType.LAST_ACCESS_TIME);
customerMap.setTimeToLive(3000); // set time to live to 50 minutes

Bean エレメント

Bean エレメントを使用して、プラグインを定義します。 プラグインを objectGrid エレメントおよび BackingMap エレメントに接続することができます。
属性
id
作成するプラグインのタイプを指定します。(必須)
objectGrid エレメントの子エレメントである bean に有効なプラグインは次のリストのとおりです。
  • TransactionCallback プラグイン
  • ObjectGridEventListener プラグイン
  • SubjectSource プラグイン
  • SubjectValidation プラグイン
backingMapPluginCollection エレメントの子エレメントである bean に有効なプラグインは次のリストのとおりです。
  • Loader プラグイン
  • ObjectTransformer プラグイン
  • OptimisticCallback プラグイン
  • Evictor プラグイン
  • MapEventListener プラグイン
  • MapIndex プラグイン
className
プラグインを作成するためにインスタンス化するクラスまたは Spring Bean の名前を指定します。 クラスはプラグイン・タイプのインターフェースを実装しなければなりません。 例えば、id 属性の値として ObjectGridEventListener を指定する場合は、className 属性値が ObjectGridEventListener インターフェースを実装するクラスを参照する必要があります。 className または osgiService は必須です。
osgiService
OSGi サービス・マネージャーでルックアップする OSGi サービスの名前を指定します。Eclipse Gemini または Apache Aries Blueprint コンテナーを持つ Eclipse Equinox OSGi フレームワークで実行中である場合、OSGi Blueprint XML ファイルを使用してプラグインを定義することができます。 Bean プロパティーは Blueprint 構成ファイル内に定義されているため、osgiService 名を使用している場合、通常、他の Bean プロパティーは使用されません。詳しくは、ObjectGrid 記述子 XML ファイルを使用した OSGi 対応プラグインの構成を参照してください。className または osgiService は必須です。
<bean
(1)	id="TransactionCallback" | "ObjectGridEventListener" |"SubjectSource" |
     "SubjectValidation" | "Loader" | "ObjectTransformer" |
    "OptimisticCallback" | "Evictor" | "MapEventListener" | "MapIndexPlugin"
(2)	className="class name" | "(spring)bean name"
/>

次の例では、Bean エレメントを使用するプラグインを構成する方法を示すために companyGridBean.xml ファイルが使用されています。 ObjectGridEventListener プラグインが CompanyGrid ObjectGrid に追加されます。 この Bean の className 属性は com.ibm.websphere.objectgrid.plugins.builtins.TranPropListener クラスです。 このクラスは、必要に応じて com.ibm.websphere.objectgrid.plugins.ObjectGridEventListener インターフェースを実装します。

companyGridBean.xml ファイルでは BackingMap プラグインも定義されています。evictor プラグインが Customer BackingMap インスタンスに追加されています。bean の ID が Evictor であるため、className 属性には com.ibm.websphere.objectgrid.plugins.Evictor インターフェースを実装するクラスを指定する必要があります。com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor クラスがこのインターフェースを実装します。 backingMap は pluginCollectionRef 属性を使用して、そのプラグインを参照します。
<?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="CompanyGrid">
			bean id="ObjectGridEventListener"
				className="com.ibm.websphere.objectgrid.plugins.builtins.TranPropListener"/>
			<backingMap name="Customer"
				pluginCollectionRef="customerPlugins"/>
		</objectGrid>
	</objectGrids>
	<backingMapPluginCollections>
		<backingMapPluginCollection id="customerPlugins">
			<bean id="Evictor"
					className="com.ibm.websphere.objectGrid.plugins.builtins.LRUEvictor/>
		</backingMapPluginCollection>
	</backingMapPluginCollections>
</objectGridConfig>
以下のコード・サンプルは、前の例の companyGridBean.xml ファイルと同じ構成を達成するプログラマチックな方法を示すものです。
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
TranPropListener tranPropListener = new TranPropListener();
companyGrid.addEventListener(tranPropListener);

BackingMap customerMap = companyGrid.defineMap("Customer");
Evictor lruEvictor = new com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor();
customerMap.setEvictor(lruEvictor);

プラグインの使用について詳しくは、プラグインの概要を参照してください。

property エレメント

property エレメントは、プラグインにプロパティーを追加するために使用します。このプロパティーの名前は、このプロパティーを含む Bean が参照するクラスの set メソッドに対応している必要があります。
属性
name
プロパティーの名前を指定します。この属性に割り当てられる値は、このプロパティーを含む Bean の className 属性で指定されたクラスの set メソッドと対応している必要があります。例えば、Bean の className 属性を com.ibm.MyPlugin に設定し、指定したプロパティーの名前が size である場合、com.ibm.MyPlugin クラスに setSize メソッドが必要です。(必須)
type
プロパティーのタイプを指定します。 このタイプは、name 属性により識別される set メソッドに受け渡されます。 有効な値は、Java プリミティブ、それに対応する java.lang プリミティブ、および java.lang.String です。 name 属性と type 属性は、Bean の className 属性のメソッド・シグニチャーに対応していなければなりません。 例えば、名前を size と設定し、タイプを int と設定する場合は、Bean の className 属性として指定されたクラスに setSize(int) メソッドが存在している必要があります。 (必須)
value
プロパティーの値を指定します。 この値は type 属性によって指定されたタイプに変換され、 次に name 属性と type 属性で識別された set メソッドへの呼び出しでパラメーターとして使用されます。 この属性の値は、どんな方法でも妥当性検査されません。 (必須)
description
プロパティーの説明です。(オプション)
<bean
(1)	name="name"
(2)	type="java.lang.String" | "boolean" | "java.lang.Boolean" | "int" |
			 "java.lang.Integer" | "double" | "java.lang.Double" | "byte" |
			 "java.lang.Byte" | "short" | "java.lang.Short" | "long" | 
			 "java.lang.Long" | "float" | "java.lang.Float" | "char" | 
			 "java.lang.Character"
(3)	value="value"
(4)	description="description"
/>
以下の例では、companyGridProperty.xml ファイルを使用して、Bean に property エレメントを追加する方法を示しています。この例では、maxSize という名前で int 型を持つプロパティーが Evictor に追加されます。 com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor クラスは、setMaxSize(int) メソッドと一致するメソッド・シグニチャーを持っています。 整数値 499 が com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor クラス上の setMaxSize(int) メソッドに渡されます。
<?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="CompanyGrid">
			<backingMap name="Customer"
				pluginCollectionRef="customerPlugins"/>
		</objectGrid>
	</objectGrids>
	<backingMapPluginCollections>
		<backingMapPluginCollection id="customerPlugins">
			<bean id="Evictor"
					className="com.ibm.websphere.objectGrid.plugins.builtins.LRUEvictor>
					<property name="maxSize" type="int" value="449"
							description="The maximum size of the LRU Evictor"/>
			</bean>
		</backingMapPluginCollection>
	</backingMapPluginCollections>
</objectGridConfig>
以下のコード・サンプルは、前の例の companyGridProperty.xml ファイルと同じ構成をプログラムで実現する方法を示しています。
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);

BackingMap customerMap = companyGrid.defineMap("Customer");

LRUEvictor lruEvictor = new com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor();
// if the XML file is used instead,
// the property that was added would cause the following call to occur
lruEvictor.setMaxSize(449);
customerMap.setEvictor(lruEvictor);

backingMapPluginsCollections エレメント

backingMapPluginsCollections エレメントは、すべての backingMapPluginCollection エレメントのコンテナーです。 前のセクションにある companyGridProperty.xml ファイルでは、backingMapPluginCollections エレメントに customerPlugins という ID の backingMapPluginCollection エレメントが 1 つ含まれています。

backingMapPluginCollection エレメント

backingMapPluginCollection エレメントは、BackingMap プラグインを定義し、id 属性によって識別されます。 pluginCollectionRef 属性を指定して、このプラグインを参照します。 いくつかの BackingMaps プラグインを同様の方法で構成すると、各 BackingMap は同じ backingMapPluginCollection エレメントを参照できます。
属性
id
backingMapPluginCollection を識別し、backingMap エレメントの pluginCollectionRef 属性によって参照されます。各 ID は固有である必要があります。pluginCollectionRef 属性の値が 1 つの backingMapPluginCollection エレメントの ID と一致しない場合、XML 妥当性検査は失敗します。 任意の数の backingMap エレメントが、単一の backingMapPluginCollection エレメントを参照できます。 (必須)
<backingMapPluginCollection
(1)			id="id"
/>
以下の例では、companyGridCollection.xml ファイルを使用して、backingMapPluginCollection エレメントの使用法を示しています。 このファイルでは、Customer BackingMap が customerPlugins backingMapPluginCollection を使用して、LRUEvictor を使用する Customer BackingMap を構成します。 Item および OrderLine の BackingMap は、collection2 backingMapPluginCollection を参照します。 これらの BackingMap には、それぞれ LFUEvictor のセットが含まれています。
<?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="CompanyGrid">
			<backingMap name="Customer"
				pluginCollectionRef="customerPlugins"/>
			<backingMap name="Item" pluginCollectionRef="collection2"/>
			<backingMap name="OrderLine"
				pluginCollectionRef="collection2"/>
			<backingMap name="Order"/>
		</objectGrid>
	</objectGrids>
	<backingMapPluginCollections>
		<backingMapPluginCollection id="customerPlugins">
			<bean id="Evictor"
					className="com.ibm.websphere.objectGrid.plugins.builtins.LRUEvictor/>
		</backingMapPluginCollection>
		<backingMapPluginCollection id="collection2">
			<bean id="Evictor"
					className="com.ibm.websphere.objectgrid.plugins.builtins.LFUEvictor/>
			<bean id="OptimisticCallback"
					className="com.ibm.websphere.samples.objectgrid.EmployeeOptimisticCallBackImpl"/>
		</backingMapPluginCollection>
		</backingMapPluginCollections>
</objectGridConfig>
以下のコード・サンプルは、前の例の companyGridCollection.xml ファイルと同じ構成をプログラムで実現する方法を示しています。
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();

ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
BackingMap customerMap = companyGrid .defineMap("Customer");
LRUEvictor customerEvictor = new LRUEvictor();
customerMap.setEvictor(customerEvictor);

BackingMap itemMap = companyGrid.defineMap("Item");
LFUEvictor itemEvictor = new LFUEvictor();
itemMap.setEvictor(itemEvictor);

BackingMap orderLineMap = companyGrid.defineMap("OrderLine");
LFUEvictor orderLineEvictor = new LFUEvictor();
orderLineMap.setEvictor(orderLineEvictor);

BackingMap orderMap = companyGrid.defineMap("Order");

querySchema エレメント

querySchema エレメントは、BackingMap 間のリレーションシップを定義し、各マップ内にあるオブジェクトのタイプを識別します。この情報は、照会言語ストリングをマップ・アクセス呼び出しに変換するために ObjectQuery によって使用されます。詳しくは、ObjectQuery スキーマの構成を参照してください。

mapSchemas エレメント

各 querySchema エレメントは、1 つ以上の mapSchema エレメントを含む mapSchemas エレメントを 1 つ持ちます。

mapSchema エレメント

mapSchema エレメントは、BackingMap に保管されるオブジェクトのタイプ、およびそのデータにアクセスする方法を定義します。
属性
mapName
スキーマに追加する BackingMap の名前を指定します。(必須)
valueClass
BackingMap の値部分に保管されるオブジェクトのタイプを指定します。(必須)
primaryKeyField
valueClass 属性内の 1 次キー属性の名前を指定します。1 次キーも BackingMap のキー部分に保管する必要があります。(オプション)
accessType
照会エンジンが valueClass オブジェクト・インスタンス内の永続データをイントロスペクトしてそのデータにアクセスする方法を示します。値を FIELD に設定すると、クラスのフィールドがイントロスペクトされ、スキーマに追加されます。 値が PROPERTY の場合、get メソッドおよび is メソッドに関連付けられた属性が使用されます。デフォルト値は PROPERTY です。 (オプション)
<mapSchema
(1)			mapName="backingMapName"
(2)			valueClass="com.mycompany.OrderBean"
(3)			primaryKeyField="orderId"
(4)			accessType="PROPERTY" | "FIELD"
/>
以下の例では、companyGridQuerySchemaAttr.xml ファイルを使用して、サンプル mapSchema 構成を示しています。
<?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="CompanyGrid">
			<backingMap name="Order"/>
			<backingMap name="Customer"/>

			<querySchema>
				<mapSchemas>
					<mapSchema mapName="Order"
						valueClass="com.mycompany.OrderBean"
						primaryKeyField="orderNumber"
						accessType="FIELD"/>
					<mapSchema mapName="Customer"
						valueClass="com.mycompany.CustomerBean"
						primaryKeyField="id"
						accessType="FIELD"/>
				</mapSchemas>
			</querySchema>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
以下のコード・サンプルは、前の例の companyGridQuerySchemaAttr.xml ファイルと同じ構成をプログラムで実現する方法を示しています。
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
companyGrid.defineMap("Order");
companyGrid.defineMap("Customer");

// Define the schema
QueryConfig queryCfg = new QueryConfig();
queryCfg.addQueryMapping(new QueryMapping(
    "Order", OrderBean.class.getName(), "orderNumber", QueryMapping.FIELD_ACCESS));
queryCfg.addQueryMapping(new QueryMapping(
    "Customer", CustomerBean.class.getName(), "id", QueryMapping.FIELD_ACCESS));
companyGrid.setQueryConfig(queryCfg);

relationships エレメント

各 querySchema エレメントは、relationships エレメントをまったく持たないか (ゼロ)、または 1 つ以上の relationship エレメントを含む relationships エレメントを 1 つ持ちます。

relationship エレメント

relationship エレメントは、2 つの BackingMap 間のリレーションシップ、およびそのリレーションシップをバインドする valueClass 属性の属性を定義します。
属性
source
リレーションシップのソース側 valueClass の名前を指定します。 (必須)
target
リレーションシップのターゲット側 valueClass の名前を指定します。 (必須)
relationField
ソース valueClass 内でターゲットを参照している属性の名前を指定します。(必須)
invRelationField
ターゲット valueClass 内でソースを参照している属性の名前を指定します。この属性が指定されていないと、リレーションシップは単一方向となります。(オプション)
<mapSchema
(1)			source="com.mycompany.OrderBean"
(2)			target="com.mycompany.CustomerBean"
(3)			relationField="customer"
(4)			invRelationField="orders"
/>
以下の例では、companyGridQuerySchemaWithRelationshipAttr.xml ファイルを使用して、双方向リレーションシップを含むサンプル mapSchema 構成を示しています。
<?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="CompanyGrid">
			<backingMap name="Order"/>
			<backingMap name="Customer"/>

			<querySchema>
				<mapSchemas>
					<mapSchema mapName="Order"
						valueClass="com.mycompany.OrderBean"
						primaryKeyField="orderNumber"
						accessType="FIELD"/>
					<mapSchema mapName="Customer"
						valueClass="com.mycompany.CustomerBean"
						primaryKeyField="id"
						accessType="FIELD"/>
				</mapSchemas>
				<relationships>
					<relationship
						source="com.mycompany.OrderBean"
						target="com.mycompany.CustomerBean"
						relationField="customer"/>
						invRelationField="orders"/>
				</relationships>
			</querySchema>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
以下のコード・サンプルは、前の例の companyGridQuerySchemaWithRelationshipAttr.xml ファイルと同じ構成をプログラムで実現する方法を示しています。
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
companyGrid.defineMap("Order");
companyGrid.defineMap("Customer");

// Define the schema
QueryConfig queryCfg = new QueryConfig();
queryCfg.addQueryMapping(new QueryMapping(
    "Order", OrderBean.class.getName(), "orderNumber", QueryMapping.FIELD_ACCESS));
queryCfg.addQueryMapping(new QueryMapping(
    "Customer", CustomerBean.class.getName(), "id", QueryMapping.FIELD_ACCESS));
queryCfg.addQueryRelationship(new QueryRelationship(
     OrderBean.class.getName(), CustomerBean.class.getName(), "customer", "orders"));
companyGrid.setQueryConfig(queryCfg);

stream エレメント

stream エレメントは、ストリーム照会エンジンへのストリームを表します。stream エレメントの各属性は、StreamMetadata インターフェースのメソッドに対応します。
属性
name
ストリームの名前を指定します。この属性が指定されていないと、妥当性検査は失敗します。(必須)
valueClass
このストリーム ObjectMap に保管される値のクラス・タイプを指定します。このクラス・タイプは、オブジェクトをストリーム・イベントに変換し、SQL ステートメントが指定されていない場合は SQL ステートメントを生成するために使用されます。 (必須)
sql
ストリームの SQL ステートメントを指定します。このプロパティーを指定しなかった場合、valueClass 属性で属性または accessor メソッドのリフレクション、またはエンティティー・メタデータの tuple 属性を使用してストリーム SQL が生成されます。(オプション)
access
値クラスの属性にアクセスするためのタイプを指定します。 この値を FIELD に設定すると、属性は Java のリフレクションを使用してフィールドから直接取り出されます。そうでない場合、属性は accessor メソッドを使用して読み取られます。デフォルト値は PROPERTY です。 (オプション)
<stream
(1)	name="streamName"
(2)	valueClass="streamMapClassType"
(3)	sql="streamSQL create stream stockQuote
				 keyed by t ( transactionvolume INTEGER, price DECIMAL (9,2), issue VARCHAR(100) );"
(4)	access="PROPERTY" | "FIELD"
/>

view エレメント

view エレメントはストリーム照会ビューを表します。各 stream エレメントが ViewMetadata インターフェースのメソッドに対応します。
属性
name
ビューの名前を指定します。この属性が指定されていないと、妥当性検査は失敗します。(必須)
sql
ビューの変換を定義する、ストリームの SQL を指定します。 この属性が指定されていないと、妥当性検査は失敗します。(必須)
valueClass
ObjectMap のこのビューに保管される値のクラス・タイプを指定します。このクラス・タイプは、ビュー・イベントをこのクラス・タイプと互換性のある適切なタプル・フォーマットに変換するのに使用されます。 クラス・タイプを指定しなかった場合、Stream Processing Technology Structured Query Language (SPTSQL) の列定義に従ってデフォルトのフォーマットが使用されます。このビュー・マップにエンティティー・メタデータが定義されている場合には、 valueClass 属性を使用しないでください。(オプション)
access
値クラスの属性にアクセスするためのタイプを指定します。 アクセス・タイプを FIELD に設定すると、列値は、Java のリフレクションを使用して直接にフィールドに設定されます。そうでない場合、accessor メソッドを使用して属性が設定されます。デフォルト値は PROPERTY です。 (オプション)
<view
(1)			name="viewName"
(2)			valueClass="viewMapValueClass"
(3)			sql="viewSQL CREATE VIEW last5MinuteAvgPrice AS
						SELECT issue, avg(price) as totalVolume
 					  FROM (SELECT * FROM stockQuote FETCH LATEST 5 MINUTES) group by issue;"/>
(4)			access="PROPERTY" | "FIELD"
/>

basic エレメント

basic エレメントは、値クラスまたはエンティティー・メタデータの属性名から SPTSQL で定義された列へのマッピングを定義するために使用します。
<basic
(1)			name="attributeName"
(2)			column="columnName"
/>

id エレメント

id エレメントは、キー属性のマッピングに使用されます。
<id
(1)			name="idName"
(2)			column="columnName"
/>