OSGi アプリケーションは、バンドルのセットをグループ化して、首尾一貫したビジネス・ロジックを提供します。 アプリケーションは、Web 対応バンドルやパーシスタンス使用可能バンドルなど、さまざまなバンドル・タイプで構成できます。
1 つの OSGi アプリケーション内のバンドルは、他の OSGi アプリケーションで定義されているバンドル、サービス、またはパッケージとは、それらが両方のアプリケーションで明示的に共有されていない限り分離されます。OSGi アプリケーションは、直接 OSGi バンドルを含めるか、OSGi バンドル・リポジトリーでホストされているバンドルを参照することができます。
アプリケーション 内の OSGi バンドルは、他の OSGi アプリケーションとサービスを共有できます。OSGi アプリケーションが外部サービスおよび参照を生成する場合、これらは、アプリケーション・マニフェストに宣言することによって、明示的に公開されます。同様に、OSGi アプリケーションが消費する外部サービスおよび参照は、アプリケーション・マニフェスト内に宣言されます。また、OSGi アプリケーションは、メタデータを使用して、その構成要素バンドルの一部をシステム内で共有できるようにします。このような共有によって、システムのメモリー所要量およびリソース所要量を少なくすることができます。
アプリケーション・マニフェスト META-INF/APPLICATION.MF は、アプリケーション・レベルのモジュール性を記述します。デフォルトでは、アプリケーション・マニフェストが宣言されていない場合、アプリケーション・コンテンツは OSGi アプリケーションに含まれる OSGi バンドルのセットであり、外部サービスまたは参照は生成も消費もされません。
Java に類似するパッケージ記法を使用した、OSGi アプリケーションの固有のシンボル名。
バンドル・バージョンに OSGi 構文を使用した、アプリケーションのバージョン。
アプリケーションの名前。
バンドルの解決のために OSGi Framework で使用されるバンドルの外部依存関係を宣言します。各サービスの特定のバージョンまたはバージョン範囲を宣言できます。
アプリケーションが消費する外部サービス用のフィルターのセット。アプリケーション・マニフェストには、サービスが要求するクラスが含まれている必要があります。このヘッダーが指定されていない場合、要求されたサービスはインポートされません。
<サービス ID>;<ディレクティブ>;<属性>
例えば、以下のようになります。
test.it;filter="some_filter"
Application-ImportService ヘッダーには、以下の属性があります。バンドル外部で可視のサービスを宣言します。ここで宣言されないサービスは、バンドル内でのみ可視となります。
アプリケーションが生成する外部サービス用のフィルターのセット。このヘッダーが指定されていない場合、要求されたサービスはエクスポートされません。
<サービス ID>;<ディレクティブ>;<属性>
例えば、以下のようになります。
test.it;filter="some_filter"
Application-ExportService ヘッダーには、以下の属性があります。少なくとも 1 つのパッケージをアプリケーション・バンドルに提供する共有バンドル。
Application-Content リスト内のバンドルのパッケージ依存関係を満たすために 使用するバンドルまたはコンポジット・バンドルのリスト。Use-Bundle リスト内の各バンドルまたは コンポジット・バンドルは、Application-Content リスト内の少なくとも 1 つのバンドルに対して、 少なくとも 1 つのパッケージを提供する必要があります。これらのバンドルは、実行時に共有バンドル・スペースにプロビジョンされます。
Use-Bundle ヘッダーは 不要なことが多いものの、これがあると便利な場合もあります。 このヘッダーは、共有が可能になるレベルを制限するために使用できます。 例えば、1 つのアプリケーションが、パッケージ・インポートで、 既にテスト済みの同じバンドルを確実に使用するように指定できます。 あるいは、2 つのアプリケーションがパッケージ・インポートで同じバンドルを 確実に使用するように指定できます。アプリケーション・レベルでの制限を設定すると、 バンドルを柔軟に保つことができます。
アプリケーションに含まれる非 OSGi 動的 Web プロジェクトのリスト。
このヘッダーは、OSGi 標準の一部ではありません。
<module identifier>;<directives>;<attributes>
通常、モジュール ID はバンドルのシンボル名です。バンドルされていないリソースを参照するために、 モジュール ID は、OSGi アプリケーション・ルートへの相対パスです。
Application-Content ヘッダーは、ビジネス・サービスを構成する重要なアプリケーションを定義しますが、アプリケーション内の全バンドル・リストを定義するわけではありません。 コンテンツにリストされているバンドルが、アプリケーションに含まれていないパッケージを使用する場合、 依存関係分析が実行され、欠落したすべてのバンドルが組み込まれます。 これらのバンドルはアプリケーション外部のサービスを提供できず、それらにセキュリティーを適用することができません。このメカニズムを使用して組み込まれるバンドルは共有されます。
OSGi アプリケーションがインストールされるときに、アプリケーション・マニフェストは、アプリケーションを構成するバンドルを指定します。いくつかのバンドルに複数のバージョンを指定することができます。
デプロイメント・マニフェスト META-INF/DEPLOYMENT.MF は、依存関係分析後に必要なバンドルを含む、アプリケーションを構成するすべてのバンドルを指定します。デプロイメント・マニフェストは、アプリケーション内で使用される各バンドルの実際のバージョンを指定します。これは Enterprise Bundle Archive (EBA) アセットがインストールされる際に 自動的に作成され、アプリケーション・サーバーが開始されるたびにアプリケーションを構成するバンドルが同じであることを保証します。
EBA では、単一の OSGi アプリケーションとしてデプロイされ、他の OSGi アプリケーションとは分離される OSGi バンドルのセットが定義されます。EBA ファイルは、.eba ファイル拡張子の付いた単一のアーカイブ・ファイルです。 EBA ファイルには、アプリケーション・モジュールのセットかアプリケーション・マニフェストのいずれか、またはその両方が含まれています。
アプリケーションのインストール後、EBA アセットを構成することによって、バンドルのバージョンを更新できます。
使用されるバンドルのシンボル名と正確なバージョンの、コンマ区切りのリスト。
このリストには、アプリケーション・マニフェストの Application-Content ヘッダーにリストされているすべてのバンドルと、依存関係分析によりインポートされるバンドルが含まれます。 変換されたバンドルのシンボル名を使用して、非 OSGi モジュール・タイプが含まれます。