製品拡張
製品拡張を作成することによって、Liberty プロファイルの能力を強化できます。
独自の Liberty フィーチャーを開発し、それらを既存の Liberty プロファイル・サーバーにインストールするか、または、ユーザーに配布できるようにパッケージすることができます。
Liberty プロファイルで提供されているさまざまなシステム・プログラミング・インターフェース (SPI) を使用して、ランタイム環境を拡張することができます。また、Liberty プロファイル・サーバーを Java™ アプリケーションからプログラマチックに操作するなど、さらに上級のフィーチャーを使用することもできます。
製品拡張
製品拡張は、Liberty プロファイルのインストール・ディレクトリー ${wlp.install.dir} のように構造化された、ディスク上のディレクトリーです。これは、${wlp.install.dir}/etc/extensions ディレクトリー内の extension-name.properties というファイルによって、Liberty インストール済み環境に定義されます。その後、製品拡張ディレクトリーの内容は、Liberty プロファイルを拡張するために使用されます。複数の製品拡張をともにインストールできますが、名前は固有でなければなりません。これは、プロパティー・ファイルの命名によって強制されます。デフォルトの製品拡張ロケーション ${wlp.user.dir}/extension にプロパティー・ファイルは不要です。このロケーション内の内容は自動的に検出されて、ランタイムに「usr」製品拡張として認識されます。
製品拡張には通常、1 つ以上の Liberty フィーチャーが含まれますが、Liberty プロファイル環境を拡張する任意のコンテンツ (例えば、スクリプトやリソース) を含めることができます。

com.ibm.websphere.productId=your_product_id
com.ibm.websphere.productInstall=absolute_or_relative_file_path
com.ibm.websphere.productId=org.acme.supergui
com.ibm.websphere.productInstall=supergui/wlp-ext
フィーチャー
Liberty フィーチャーは、定義ファイル (フィーチャー・マニフェスト) と、Liberty プロファイル・ランタイム環境の特定の機能に対応するクラスおよびサービスを提供する OSGi バンドルのコレクションから成ります。
通常のアプリケーションの代わりに Liberty フィーチャーを使用するシナリオ
- フィーチャーはフィーチャー・マネージャー構成によって制御されるため、ユーザー・アプリケーション管理から分離しています。
- フィーチャー・コードでは Liberty プロファイル SPI にアクセスできるため、ランタイム環境とのより深い統合が可能になります。
- フィーチャーは、server.xml ファイルからユーザー指定の構成を受け取って、開発ツールで、ツールを変更することなく、その構成設定を公開できます。
- フィーチャーは、クラスおよびサービスを相互に、またユーザー・アプリケーションに簡単に公開できます。
- フィーチャーは、アプリケーション・コンテナーに依存することなく、極めて軽量にすることができます。
- フィーチャーを使用して特定のプログラミング・モデルを拡張することができます。 例えば、ユーザー・フィーチャーで、カスタムの Blueprint 名前空間ハンドラー または Blueprint アノテーションのサポートを OSGi アプリケーション・プログラミング・モデルに追加することができます。
単純なフィーチャーの作成
手動による Liberty フィーチャーの作成、開発者ツールを使用した Liberty フィーチャーの作成、およびLiberty プロファイルのマニフェスト・ファイルを参照してください。
サーバーでのフィーチャーの使用
Liberty プロファイル・サーバーでユーザー作成のフィーチャーを使用するには、そのフィーチャーを製品拡張ディレクトリーにインストールする必要があります。これは、事前定義の「ユーザー製品拡張」ロケーションにすることも、Liberty プロファイルのインストール・ディレクトリーの外部にある拡張にすることもできます。次に、フィーチャー名をサーバー構成に追加できます。
ユーザー製品拡張は、サーバーが追加フィーチャーを検索する事前定義のディレクトリーです。 フィーチャー定義 .mf ファイルを ${wlp.user.dir}/extension/lib/features ディレクトリーにコピーする必要があります。また、バンドル .jar ファイルを ${wlp.user.dir}/extension/lib ディレクトリーにコピーする必要があります。
ユーザー作成のフィーチャーは、製品フィーチャーと同じ方法でサーバー構成に追加されます。別のプロバイダーからのフィーチャーとの名前の競合を回避するために、製品拡張の一部であるフィーチャーの前に拡張名を付加する必要があります。usr/extension/lib ディレクトリー内のフィーチャーの場合、デフォルトの接頭部は usr: です。
<featureManager>
<feature>usr:simple-1.0</feature>
</featureManager>
<featureManager>
<feature>myExt:myFeature</feature>
</featureManager>
サーバーの始動時に、フィーチャーがフィーチャー・マネージャーによって検出され、バンドルが OSGi フレームワークにインストールされて開始されます。
『Liberty フィーチャーの追加および削除』および『フィーチャーの管理』も参照してください。
アプリケーションからのフィーチャーのプログラマチックな使用
フィーチャーは、クラスおよびサービスをアプリケーションに公開できます。
アプリケーション用に Java クラスを公開するには、フィーチャー・マニフェストの IBM-API-Package ヘッダーにクラス・パッケージをリストする必要があります。IBM-API-Package ヘッダーにクラス・パッケージをリストすると、アプリケーション・クラス・ローダーからクラスが可視になります。API パッケージの可視性は、API 可視性タイプを使用して制御できます。 『Liberty フィーチャー・プロジェクト用の API および SPI パッケージの指定』を参照してください。
サービスを OSGi アプリケーションで使用できるようにするには、フィーチャー・マニフェストの IBM-API-Service ヘッダーにサービスをリストする必要があります。フィーチャーによって OSGi サービスが提供され、アプリケーションからプログラマチックにそのサービスを参照できます。
サービスは通常、アプリケーション (または他のフィーチャー) から検出できるように、OSGi サービス・レジストリー (SR) に登録する必要があります。OSGi アプリケーションおよび他のフィーチャーは、SR から直接ルックアップを実行するか、Blueprint や OSGi Declarative Services などの機能を使用してサービス依存関係を注入できます。Java EE アプリケーションは、JNDI を使用してサービスを検出する可能性が高いと思われます。Liberty プロファイルでは、SR と JNDI のフェデレーションが用意されているため、Java EE アプリケーションは JNDI を使用して SR のサービスを検出できます。詳細については、『OSGi サービス・レジストリーの使用』を参照してください。
Web アプリケーションとしてのフィーチャーの公開
Liberty フィーチャーを Web アプリケーションとして公開するために、フィーチャー内の OSGi バンドルを Web アプリケーション・バンドル (WAB) として公開できます。バンドルに必要な OSGi ヘッダーに加えて、Web-ContextPath ヘッダーを使用して Web アプリケーションのコンテキスト・パスを指定できます。
以下に例を示します。
Web-ContextPath: myWABapp
Bundle-ClassPath: WEB-INF/classes
構成の注入および処理
フィーチャーを使用する主なメリットは、server.xml ファイル (および組み込みファイル) でユーザーが簡単に構成できる点にあります。構成ファイルは Liberty プロファイルのカーネルによってモニターおよび解析され、変更があるたびに、結果のプロパティー・セットを関連コンポーネントに注入できます。
Liberty プロファイル構成は、カーネルの OSGi Configuration Admin (CA) サービスによって管理され、その仕様に従ってアクセスできます。構成プロパティー・セットはパーシスト ID (PID) によって識別されます。PID を使用して、プロパティーを受け取るために登録されたコンポーネントに server.xml ファイル内のエレメントを関連付けます。
<com.acme.console color="blue" size="17"/>
これにより、フィーチャーは以下のプロパティーを受け取ります。- color="blue"
- size="17"
オプションとして、OSGi Metatype 記述子を使用して、構成プロパティーを記述するメタデータを提供できます。記述子を使用すると、Liberty プロファイルによって生成される構成スキーマに構成メタデータが組み込まれます。この構成スキーマは Developer Tools によって使用されるため、サーバーの構成時に構成プロパティーが自動的にアプリケーション開発者に提示されます
構成プロパティーの受け取りおよび記述について詳しくは、『サービスによる構成データの受け取りを可能にする』を参照してください。
Liberty プロファイルでの Declarative Services
大きなフィーチャーまたは複雑なフィーチャーでは、多くの場合、OSGi Declarative Services (DS) を使用することでメリットを享受して、フィーチャーを複数のサービスで構成したり、依存関係および構成プロパティーの注入を管理したりすることができます。 DS を使用すると、サービスの lazy アクティベーションが可能になり、サービスを使用するまで Java クラスのロードを遅延させ、また依存関係に基づいてサービスのアクティベーションを順序付けできます。Liberty プロファイル製品内のほとんどのフィーチャーは、DS によって管理されます。
『OSGi Declarative Services を使用した拡張フィーチャーの構成』も参照してください。