OSGi 環境での非動的プラグインを持つ eXtreme Scale コンテナーの実行

OSGi 環境の動的機能を使用する必要がない場合でも、OSGi フレームワークが提供する密結合、宣言的パッケージ化、およびサービス依存関係を活用することができます。

始める前に

  1. WebSphere® eXtreme Scale の API およびプラグインを使用してアプリケーションを開発します。
  2. 1 つ以上のバンドル・マニフェストで宣言される適切なインポート依存関係またはエクスポート依存関係を持つ 1 つ以上の OSGi バンドルにアプリケーションをパッケージ化します。 プラグイン、エージェント、データ・オブジェクトその他のために必要なすべてのクラスまたはパッケージがエクスポートされるようにしてください。

このタスクについて

動的プラグインがあれば、グリッドを停止することなくプラグインをアップグレードすることができます。 この機能を使用するためには、元のプラグインと新しいプラグインが互換でなければなりません。 プラグインを更新する必要がない場合や、プラグインをアップグレードするためにグリッドを停止しても問題がない場合は、複雑な動的プラグインを必要としないことがあります。 しかし、それでも、eXtreme Scale アプリケーションを OSGi 環境で実行するだけの十分な理由があります。 その理由は、密結合、宣言的パッケージ、サービス依存関係その他にあります。

動的プラグインを使用することなく (より具体的には、OSGi サービスを使用してプラグインを宣言することなく) OSGi 環境でグリッドやクライアントをホストすることには 1 つ問題があります。それは、eXtreme Scale バンドルがどのようにしてプラグイン・クラスをロードするかということです。 eXtreme Scale バンドルはプラグイン・クラスのロードを OSGi サービスに依存します。そのため、このバンドルは他のバンドル内のクラスでオブジェクト・メソッドを呼び出すことができ、その際、それらのクラスのパッケージを直接インポートする必要がありません。

プラグインが OSGi サービスを介して使用可能にならないときは、eXtreme Scale バンドルがプラグイン・クラスを直接ロードできなければなりません。 ユーザー・クラスとパッケージをインポートするように eXtreme Scale バンドルのマニフェストを変更するのではなく、必要なパッケージ・インポートを追加するバンドル・フラグメントを作成してください。 このフラグメントは、他の非プラグイン・ユーザー・クラス (データ・オブジェクトやエージェント・クラスなど) のために必要なクラスをインポートすることもできます。

手順

  1. eXtreme Scale バンドル (対象とするデプロイメント環境に応じてクライアントまたはサーバー) をそのホストとして使用する OSGi フラグメントを作成します。 このフラグメントは、1 つ以上のプラグインがロードしなければならないすべてのパッケージの依存関係 (Import-Package) を宣言します。 例えば、com.mycompany.myapp.serializers パッケージに存在するクラスを持ち、かつ com.mycompany.myapp.common パッケージ内のクラスに依存するシリアライザー・プラグインをインストールする場合は、フラグメント META-INF/MANIFEST.MF ファイルが次の例のようになります。
    Bundle-ManifestVersion: 2
    Bundle-Name: Plug-in fragment for XS serializers
    Bundle-SymbolicName: com.mycompany.myapp.myfragment; singleton:=true
    Bundle-Version: 1.0.0
    Fragment-Host: com.ibm.websphere.xs.server; bundle-version=7.1.1
    Manifest-Version: 1.0
    Import-Package: com.mycompany.myapp.serializers,
     com.mycompany.myapp.common
    …
    このマニフェストはフラグメント JAR ファイル (この例では com.mycompany.myapp.myfragment_1.0.0.jar) にパッケージ化する必要があります。
  2. 新たに作成したフラグメント (eXtreme Scale バンドル) とアプリケーション・バンドルの両方を OSGi 環境にデプロイします。 ここで、これらのバンドルを開始してください。

タスクの結果

これで、OSGi サービスを使用してプラグインやエージェントなどのユーザー・クラスをロードしなくても OSGi 環境でアプリケーションのテストと実行を行えるようになりました。