OSGi アプリケーションの分離と共有
実行時に、OSGi アプリケーションは相互に分離されますが、その依存関係は共有されます。
- OSGi アプリケーションは、パッケージを共有できません。
- OSGi アプリケーションはそれぞれ、独自のサービス・レジストリーを持つ独自の分離された OSGi フレームワークで実行されます。
- OSGi サービスは、アプリケーション・マニフェストに適切なヘッダーを設定することによって、フレームワーク間でインポートおよびエクスポートすることができます。
1 つ以上の OSGi アプリケーションを実行しているアプリケーション・サーバーにはそれぞれ、1 つの共有バンドル・スペースもあります。
OSGi アプリケーションのプライマリー・コンテンツは、アプリケーションのフレームワークで実行されます。 アプリケーション内の依存関係バンドルと共有バンドルは、共有バンドル・スペースで実行されます。
アプリケーションが開始されると、アプリケーションのデプロイメント・マニフェストにリストされているバンドルがランタイム環境にロードされます。 デプロイメント・マニフェストの Deployed-Content ヘッダーにリストされているバンドルが、分離されたフレームワークにロードされます。 デプロイメント・マニフェストの Deployed-Use-Bundle および Provision-Bundle ヘッダーにリストされているバンドルが、共有バンドル・スペースにロードされます。
共有バンドル・スペース内の依存関係バンドルは、内部バンドル・リポジトリー、外部バンドル・リポジトリー、またはアプリケーション内容から発生する場合があります。
しかし、アプリケーション内の共有バンドルは、アプリケーションに直接含まないで、参照によって提供する必要があります。 これは、共有バンドルがアプリケーションに直接含まれていると、他のアプリケーションが解決するときにそのアプリケーションで使用できないが、実行時に共有バンドル・スペースに存在すると、問題を発生させることがあるからです。
Manifest-Version: 1.0
Application-ManifestVersion: 1.0
Application-Name: Example Blog
Application-SymbolicName: example.blog.app
Application-Version: 1.0
Application-Content:
example.blog.api;version="[1.0.0,2.0.0)",
example.blog;version="[1.0.0,2.0.0)"依存関係が解決されると、デプロイされたアプリケーションは、バージョン 1.2.0 の
追加の従属バンドル blog.required.bundle を取り込む必要があります。 このバンドルは、パッケージ blog.required.package から入手できます。 このパッケージは、次の図に示すとおり、共有バンドル・スペース内の従属バンドルから、分離された両アプリケーション・フレームワーク内の
バンドルに接続されます。
