eXtreme Scale ObjectGrid および BackingMap プラグインは
すべて、Eclipse Gemini または Apache Aries で使用可能な OSGi Blueprint サービスを
使用して OSGi Bean およびサービスとして定義できます。
始める前に
プラグインを OSGi サービスとして構成するには、プラグインを OSGi バンドルに
パッケージ化し、必要なプラグインの基本原則を理解する必要があります。バンドルは、
WebSphere® eXtreme
Scale サーバー・パッケージ
またはクライアント・パッケージに加えてプラグインが必要とするその他の従属パッケージを
インポートするか、
eXtreme Scale サーバー・バンドルまたは
クライアント・バンドルへのバンドル依存関係を作成しなければなりません。
このトピックでは、Blueprint XML を構成して、プラグイン Bean を作成し、それらを
eXtreme Scale で
使用できるように OSGi サービスとして公開する方法を説明します。
このタスクについて
Bean とサービスは Blueprint XML ファイル内に定義します。
そうすると、Blueprint コンテナーによって Bean が検出および作成され、Bean 同士が
ワイヤリングされ、サービスとして公開されます。このプロセスにより、eXtreme Scale サーバー・バンドルと
クライアント・バンドルを含め、その他の OSGi バンドルで Bean が使用可能になります。
eXtreme Scale で使用するカスタム・プラグイン・サービスを
作成する場合、プラグインをホスティングするバンドルは、Blueprint を使用するように構成しなければなりません。さらに、Blueprint XML ファイルを作成し、そのファイルを
バンドル内に保管しなければなりません。Blueprint Container 仕様の全般的な知識を得るには、Blueprint Container 仕様による OSGi アプリケーションの構築を参照してください。
手順
- Blueprint XML ファイルを作成します。 ファイルには任意の名前を付けることができます。ただし、次のように blueprint 名前空間を含める必要があります。
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
...
</blueprint>
- eXtreme Scale プラグインごとに Bean 定義を Blueprint XML ファイル内に作成します。
Bean は
<bean> エレメントを使用して定義し、他の Bean 参照にワイヤリングでき、
初期化パラメーターを組み込むことができます。
重要: Bean の定義時は、正しいスコープを使用する必要があります。Blueprint は singleton スコープとプロトタイプ・スコープをサポートします。eXtreme Scale はカスタム断片スコープも
サポートします。
すべての Bean は、関連付けられる各 ObjectGrid 断片
または BackingMap インスタンスで固有でなければならないため、ほとんどの
eXtreme Scale プラグインはプロトタイプ・スコープまたは
断片スコープの Bean として定義します。
正しいインスタンスの取得を可能にするために Bean を他のコンテキストで
使用する場合、断片スコープの Bean が便利です。
プロトタイプ・スコープの Bean を定義するには、Bean の
scope="prototype" 属性を使用します。
<bean id="myPluginBean" class="com.mycompany.MyBean" scope="prototype">
...
</bean>
断片スコープの Bean を定義するには、
objectgrid 名前空間を XML スキーマに
追加し、Bean の
scope="objectgrid:shard" 属性を使用してください。
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:objectgrid="http://www.ibm.com/schema/objectgrid"
xsi:schemaLocation="http://www.ibm.com/schema/objectgrid
http://www.ibm.com/schema/objectgrid/objectgrid.xsd">
<bean id="myPluginBean" class="com.mycompany.MyBean"
scope="objectgrid:shard">
...
</bean>
...
- 各プラグイン Bean の PluginServiceFactory Bean 定義を作成します。 正しい Bean スコープを適用できるように、すべての eXtreme Scale Bean に
PluginServiceFactory Bean を定義する必要があります。eXtreme Scale には、ユーザーが使用できる BlueprintServiceFactory が
組み込まれています。それには設定が必要な 2 つのプロパティーがあります。blueprintContainer プロパティーには
blueprintContainer 参照を設定し、beanId プロパティーには Bean ID 名を
設定する必要があります。eXtreme Scale が適切な Bean のインスタンスを生成するために
サービスを検索すると、サーバーは Blueprint コンテナーを使用して Bean コンポーネント・インスタンスを検索します。
bean id="myPluginBeanFactory"
class="com.ibm.websphere.objectgrid.plugins.osgi.BluePrintServiceFactory">
<property name="blueprintContainer" ref="blueprintContainer" />
<property name="beanId" value="myPluginBean" />
</bean>
- 各 PluginServiceFactory Bean のサービス・マネージャーを作成します。 各サービス・マネージャーは、<service> エレメントを使用して PluginServiceFactory Bean を
公開します。サービス・エレメントは、OSGi に公開する名前、PluginServiceFactory Bean への
参照、公開するインターフェース、およびサービスのランキングを識別します。eXtreme Scale はサービス・マネージャー・ランキングを使用して、eXtreme Scale グリッドが
アクティブなときにサービス・アップグレードを実行します。
ランキングが指定されない場合、OSGi フレームワークはランキング 0 を想定します。
詳細については、サービス・ランキングの更新を参照してください。
Blueprint には、サービス・マネージャーを構成するためのオプションがいくつかあります。
PluginServiceFactory Bean の
単純なサービス・マネージャーを定義するには、
PluginServiceFactory Bean ごとに
<service> エレメントを作成します。
<service ref="myPluginBeanFactory"
interface="com.ibm.websphere.objectgrid.plugins.osgi.PluginServiceFactory"
ranking="1">
</service>
- Blueprint XML ファイルをプラグイン・バンドル内に保管します。 Blueprint XML ファイルは OSGI-INF/blueprint ディレクトリー内に保管し、Blueprint コンテナーが
検出されるようにしなければなりません。
Blueprint XML ファイルを他のディレクトリーに保管するには、次の Bundle-Blueprint マニフェスト・ヘッダーを
指定する必要があります。
Bundle-Blueprint: OSGI-INF/blueprint.xml
タスクの結果
これで、OSGi Blueprint コンテナー内に公開される
eXtreme Scale プラグインが
構成されました。さらに、OSGi Blueprint サービスを使用してプラグインを参照するように ObjectGrid 記述子 XML ファイルも構成されました。