1.5. OSGi バンドル
概要
OSGi を使用すると、アプリケーションをバンドルにモジュール化できます。各バンドルは、疎結合されており、動的に読み込み可能なクラス、JAR および設定ファイルのコレクションで、外部の依存関係を明示的に宣言します。OSGi では、バンドルが主要なデプロイメント形式です。バンドルは、JAR にパッケージ化されたアプリケーションであり、インストール、開始、停止、更新、および削除できます。
OSGi は、バンドルの開発向けに、動的かつ簡潔で、一貫性のあるプログラミングモデルを提供します。サービスの仕様 (Java インターフェイス) をその実装から切り離すことにより、開発とデプロイメントが簡素化されます。
OSGi バンドルの抽象化により、モジュールは Java クラスを共有できます。これは、再利用の静的な形式です。依存バンドルの開始時に、共有クラスが使用可能である必要があります。
バンドルは、OSGi マニフェストファイルにメタデータが含まれる JAR ファイルです。バンドルには、クラスファイルと、オプションで他のリソースおよびネイティブライブラリーが含まれます。バンドル内のどのパッケージが外部に表示されるか (エクスポートされたパッケージ)、およびバンドルに必要な外部パッケージ (インポートされたパッケージ) を明示的に宣言できます。
モジュールレイヤーは、バンドル間での Java パッケージのパッケージ化と共有、および他のバンドルからのパッケージの非表示を処理します。OSGi フレームワークは、バンドル間の依存関係を動的に解決します。フレームワークは、インポートおよびエクスポートされたパッケージと一致するようにバンドル解決を実行します。また、デプロイされたバンドルの複数のバージョンを管理することもできます。
OSGi でのクラスのロード
OSGi は、ツリーモデル (JVM で使用される) ではなく、グラフモデルをクラスのロードに使用します。バンドルは、ランタイムのクラス読み込みの競合なしに、標準化された方法でクラスを共有および再利用できます。
各バンドルには独自の内部クラスパスがあるため、必要に応じて独立したユニットとして機能できます。
OSGi でのクラス読み込みの利点は次のとおりです。
- バンドル間でクラスを直接共有します。JAR を親クラ出力ダーにプロモートする必要はありません。
- 競合することなく、同じクラスの異なるバージョンを同時にデプロイできます。