動的コンテンツ管理
通常、バンドルをランタイム環境にインストールするには、フィーチャー・マニフェスト・ファイルの Subsystem-Content ヘッダーにバンドルをリストします。ただし、ユーザー作成フィーチャーの Subsystem-Content の一部としてユーザー作成バンドルをインストールすることで、OSGi バンドルを動的に追加したり削除したりすることもできます。 ユーザー作成バンドルは、OSGi バンドル・コンテキストを獲得して、追加のバンドルをインストールおよび制御します。
Liberty でのバンドルのインストール、開始、停止、およびアンインストール
- バンドルのインストール
- 以下のいずれかの方式を使用して、OSGi バンドル・コンテキスト org.osgi.framework.BundleContext を獲得する FeatureBundleA を作成できます。
- BundleActivator インターフェース org.osgi.framework.BundleActivator を実装する。start メソッドの BundleContext パラメーターが OSGi フレームワークによって渡され、ユーザー作成バンドルは、アクティブ化されるときそのパラメーターを使用できるようになります。BundleActivator インターフェースについて詳しくは、単純なアクティベーションを使用した OSGi バンドルの開発を参照してください。
- 別のメソッドまたはインターフェースを使用してバンドル・コンテキストにアクセスできるようにする、OSGi Declarative Services または Blueprint などの使用可能な仕様を実装する。詳しくは、『OSGi Declarative Services を使用した拡張フィーチャーの構成』および 「Blueprint バンドル」を参照してください。
FeatureBundleA がバンドル・コンテキストを獲得した後、installBundle(String location) メソッドまたは installBundle(String location, InputStream stream) メソッドを使用して、追加のバンドルをインストールできます。
動的にインストールされたバンドルは、デフォルト再始動時に以前の状態で再開します。これらのバンドルは、クリーン・スタート後には保持されないため、再インストールが必要です。詳しくは、「バンドル・キャッシング」を参照してください。
- バンドルの開始
- インストール済みバンドルを開始する必要がある場合、バンドルの start メソッドを呼び出す責任はインストール・バンドルである FeatureBundleA にあります。
- バンドルの停止とアンインストール
- ユーザー作成フィーチャー UserFeatureA がサーバー構成から削除された場合、FeatureBundleA も停止してアンインストールされます。FeatureBundleA のアンインストールにより、FeatureBundleA によってインストールされたすべてのバンドルのアンインストールが (それらがまだアンインストールされていない場合は) トリガーされます。バンドルごとに、バンドルを停止してアンインストールする org.osgi.framework.Bundle.uninstall() メソッドが呼び出されます。他の手段によって FeatureBundleA がアンインストールされた場合も、このアンインストール・プロセスが適用されます。
サーバー停止時に UserFeatureA がサーバー構成から削除された場合、UserFeatureA によってインストールされたバンドルは、次回のサーバー開始時に削除されます。バンドルの開始レベルがデフォルトから変更されていない場合、バンドルは再始動される前に削除されます。バンドルの開始レベルが変更されていた場合、バンドルは再始動後まで削除されないことがあります。
他のライフサイクル管理タスクは、org.osgi.framework.Bundle および org.osgi.framework.BundleContext インターフェースを使用して、OSGi コア仕様に従って FeatureBundleA によって行われます。
Liberty でのバンドル・キャッシング、パッケージ可視性、およびプログラミング・モデル・サポート
- バンドル・キャッシング
- サーバーがシャットダウンされると、現在インストールされているバンドルはすべて停止し、OSGi メタデータはバンドル・キャッシュに保持されます。デフォルト始動時、これらのインストール済みバンドルは前の状態に戻ります。クリーン・スタートの場合、FeatureBundleA によってインストールされたバンドルの永続データは削除されます。その結果、クリーン・スタート時、これらのバンドルは再開されません。UserFeatureA がサーバー構成内にまだ残っていれば、FeatureBundleA はフィーチャー・マネージャーによって再インストールされるため、このバンドルそのものは再開されます。 クリーン・スタート後に再インストールが必要なバンドルがある場合、再インストールは FeatureBundleA の責任になります。 クリーン・スタートに関する通知は行われませんが、OSGi BundleContext getBundle(String location) メソッドを使用して、バンドルがインストールされたかどうかを確認できます。
- パッケージ可視性
- 動的にインストールされ、フィーチャー・マニフェスト・ファイルの Subsystem-Content ヘッダーにリストされていないバンドルには、以下の可視性があります。
- 動的にインストールされたバンドルは、現在構成されているフィーチャーのセットによって提供される API および SPI パッケージをインポートできます。
- API または SPI として宣言されていない、同じ製品拡張内の他のバンドルによってエクスポートされるパッケージは、動的にインストールされたバンドルからは不可視です。
- 動的にインストールされたバンドルからエクスポートされたパッケージを API または SPI として宣言することはできません。
- 動的にインストールされたバンドルからエクスポートされたパッケージのインポートに関する制約事項はありません。
- プログラミング・モデルのサポート
- OSGi Enterprise Specification を使用可能にするために適切なランタイム・フィーチャーが構成されている場合、動的にインストールされたバンドルは OSGi Enterprise Specification の実装を使用できます。