WebSphere® eXtreme Scaleには、objectgrid.xml ファイル内で拡張ポイントとして使用するために Plain Old Java Object (POJO) を宣言する機能があり、Bean を指定してからクラス名を指定する方法が提供されています。 通常、指定された クラスのインスタンスが作成され、それらのオブジェクトはプラグインとして 使用されます。eXtreme Scale は、これらのプラグイン・オブジェクトの インスタンスの取得を Spring に委任できます。アプリケーションが Spring を使用する場合は、通常、このような POJO をアプリケーションの残り部分に接続する必要があります。
シナリオによっては、以下の例のようにプラグインを 構成するのに Spring を使用する必要があります。
<objectGrid name="Grid">
<bean id="TransactionCallback" className="com.ibm.websphere.objectgrid.jpa.JPATxCallback">
<property name="persistenceUnitName" type="java.lang.String" value="employeePU" />
</bean>
...
</objectGrid>
組み込み TransactionCallback 実装である com.ibm.websphere.objectgrid.jpa.JPATxCallback クラスは、TransactionCallback クラスとして構成されます。このクラスは上の例のように、persistenceUnitName プロパティーを使用して構成されます。JPATxCallback クラスには JPAPropertyFactory 属性もあり、これのタイプは java.lang.Object です。ObjectGrid XML 構成 は、このタイプの構成をサポートできません。
eXtreme Scale Spring 統合 は Bean 作成を Spring フレームワークに委任することで この問題を解決します。修正後の構成は、次のようになります。
<objectGrid name="Grid">
<bean id="TransactionCallback" className="{spring}jpaTxCallback"/>
...
</objectGrid>
"Grid" オブジェクト用の Spring ファイル には以下の情報が入っています。
<bean id="jpaTxCallback" class="com.ibm.websphere.objectgrid.jpa.JPATxCallback" scope="shard">
<property name="persistenceUnitName" value="employeeEMPU"/>
<property name="JPAPropertyFactory" ref ="jpaPropFactory"/>
</bean>
<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.
JPAPropFactoryImpl" scope="shard">
</bean>
ここでは、上の例に示されているように、{spring}jpaTxCallback として TransactionCallback が指定され、 Spring ファイル内に jpaTxCallback および jpaPropFactory Bean が 構成されています。このような Spring 構成に よって、JPAPropertyFactory Bean を JPATxCallback オブジェクトのパラメーターとして構成することが 可能になります。
デフォルトの Spring Bean ファクトリー
eXtreme Scale が、 接頭部 {spring} で始まる classname 値を持つプラグインまたは拡張 Bean (ObjectTransformer、Loader、TransactionCallback など) を検出した場合、 eXtreme Scale は名前の残りの 部分を Spring Bean 名として使用し、Spring Bean ファクトリーを使用して Bean インスタンスを 取得します。
デフォルトでは、与えられた ObjectGrid 用に登録された Bean ファクトリーがない 場合、ObjectGridName_spring.xml ファイルを見つけようとします。例えば、 データ・グリッドの名前が "Grid" の場合は、XML ファイルの名前は /Grid_spring.xml です。 このファイルはクラスパスにあるか、クラスパス内の META-INF ディレクトリーに あるはずです。このファイルが見つかったら、eXtreme Scale は、その ファイルを使用して ApplicationContext を作成し、その Bean ファクトリーから Bean を作成 します。
カスタム Spring Bean ファクトリー
WebSphere eXtreme Scale には ObjectGridSpringFactory API も あり、これを使用して、特定の指定された ObjectGrid のために使用するよう Spring Bean ファクトリー・インスタンスを登録できます。この API は、 以下の静的メソッドを使用して、BeanFactory のインスタンスを eXtreme Scale に 登録します。
void registerSpringBeanFactoryAdapter(String objectGridName, Object springBeanFactory)
バージョン 2.0 以降の Spring に は、Bean の定義と構成のため、基本的な Spring XML フォーマット をスキーマ・ベースで拡張するメカニズムが備わっています。ObjectGrid はこの新しい機能を 使用して、ObjectGrid Bean の定義と構成を行います。Spring XML スキーマ拡張 では、eXtreme Scale プラグインのいくつかの組み込み実装、 およびいくつかの ObjectGrid Bean が "objectgrid" 名前空間に事前定義されます。 Spring 構成ファイルを作成するとき、これらの組み込み実装の完全クラス名を指定する必要はありません。代わりに、事前定義された Bean を参照する ようにできます。
また、XML スキーマ内に Bean の属性が定義されていることによって、 間違った属性名を指定する可能性が減少します。XML スキーマに基づいた XML 妥当性検査は、この種の エラーを開発サイクルの初期にキャッチできます。
XML スキーマ拡張に定義されている Bean は、 以下のとおりです。
これらの Bean は objectgrid.xsd XML スキーマ内に定義されています。 この XSD ファイルは、ogspring.jar ファイル中の com/ibm/ws/objectgrid/spring/namespace/objectgrid.xsd ファイルと して出荷されます。XSD ファイルおよび XSD ファイルで定義された Bean について詳しくは、Spring 記述子 XML ファイルを参照してください。
前のセクションにある JPATxCallback 例を使用します。前のセクション では、JPATxCallback Bean は次のように構成されていました。
<bean id="jpaTxCallback" class="com.ibm.websphere.objectgrid.jpa.JPATxCallback" scope="shard">
<property name="persistenceUnitName" value="employeeEMPU"/>
<property name="JPAPropertyFactory" ref ="jpaPropFactory"/>
</bean>
<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.JPAPropFactoryImpl" scope="shard">
</bean>
この名前空間フィーチャーを使用して、Spring XML 構成を次のようにコーディングできます。
<objectgrid:JPATxCallback id="jpaTxCallback" persistenceUnitName="employeeEMPU"
jpaPropertyFactory="jpaPropFactory" />
<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.JPAPropFactoryImpl"
scope="shard">
</bean>
ここでは、前の例でのように com.ibm.websphere.objectgrid.jpa.JPATxCallback クラスを指定 する代わりに、事前定義された objectgrid:JPATxCallback Bean を直接使用する ことに注意してください。見て分かるように、この構成 のほうが冗長でなく、誤りがないかチェックするのも簡単です。
Spring Bean を使用した作業については、Spring を使用したコンテナー・サーバーの始動を参照してください。