OSGi フラグメント

OSGi フラグメントは、特有のマニフェスト・ヘッダーを持つ Java™ アーカイブ・ファイルであり、これらのヘッダーは、OSGi フラグメントを 1 つまたは複数の指定されたホスト・バンドルに付加して機能させることができます。 フラグメントは、ホスト・バンドルの一部として扱われます。フラグメントの関連定義は、 情報が矛盾しない限り、ホストが解決される前にホスト・バンドル定義 とマージされます。 フラグメントの依存関係は、可能であれば解決されます。フラグメントの依存関係が解決できない場合、フラグメントはホスト・バンドルには付加されません。フラグメントは、独自のクラス・ローダーおよびバンドル・アクティベーターを持つことはできません。フラグメントは、ホスト・バンドルにある情報を上書きすることはできません。フラグメントは、 リソース、クラス、および許可されたヘッダーでバンドルを拡張することにより、 バンドルのカスタマイズを可能にします。

OSGi フラグメント・マニフェスト・ファイル

OSGi フラグメント JAR ファイルには、フラグメント・マニフェスト・ファイルが含まれます。 このファイルには、OSGi フレームワークが 1 つまたは複数のホスト・バンドルにフラグメントを付加できるメタデータが含まれています。

以下のコードは、バンドル・マニフェスト・ファイル META-INF/MANIFEST.MF のコンテンツの例です。
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Fragment
Bundle-SymbolicName: Fragment
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Fragment-Host: WebBundle;bundle-version=1.0.0.qualifier
Import-Package: org.apache.commons.logging;version="1.0.4"
Export-Package: com.sample.myservice.api;version="1.0.0"
このマニフェスト・ファイル内のメタデータには、以下のキー・プロパティーが含まれます。
Fragment-Host
フラグメントを潜在的なバンドル・ホストにリンクします。
Bundle-Version
フラグメントのバージョンを記述し、バンドルの複数のバージョンを同じフレームワーク・インスタンスで 同時にアクティブにできるようにします。
Bundle-Name
人間が理解できるフラグメントの名前を提供します。
Bundle-SymbolicName
フレームワーク内のフラグメントを一意的に識別します。これを指定しても、Bundle-Name ヘッダーが必要であることに変わりはありません。
Import-Package
フラグメントの解決のために OSGi Framework で使用される、フラグメントの外部依存関係を宣言します。各パッケージの特定のバージョンまたはバージョン範囲を宣言できます。 この例のマニフェスト・ファイルでは、org.apache.commons.logging パッケージがバージョン 1.0.4 以降で必要とされます。
このプロパティーを使用して、フラグメントがランタイムからインポートする、任意のパッケージの名前を指定します。 バンドルに必要なパッケージをこのプロパティーで指定しない場合、バンドルのロード時に NoClassDefFound 例外およびコンパイル・エラーを受け取る可能性があります。
注: パッケージを含むバンドルの Export-Package プロパティーにこのパッケージを指定する必要もあります。
制約事項: バンドル・マニフェスト・ファイルで Import-Package プロパティーを使用してワークスペースまたはターゲット・プラットフォーム内にないバンドルへのバンドル依存関係を宣言する場合、エディターはこの依存関係にエラーのマークを付けます。この制限を回避するには、依存関係として宣言するバンドルがすべて確実にワークスペースにあるようにするか、クイック・フィックスを使用してターゲット・プラットフォームにバンドルを追加します。クイック・フィックスを使用するには、「マーカー」ビューに切り替えてからエラー・マーカーを右クリックして「クイック・フィックス」を選択します。
重要: MANIFEST.MF ファイルでバンドル依存関係を指定するとき、プロパティー Require-bundle ではなく Import-Package を使用してください。 Require-bundle を使用してバンドル依存関係を指定すると、アプリケーションはデプロイされません。
依存関係を宣言するためのより柔軟な方法は、Import-Package を使用することです。
  • バンドルでは必要ではないがその従属バンドルに含まれている パッケージに対する不必要な依存関係が追加されないため、機能の発生元であるバンドルにではなく、必要とする機能に 対して依存関係を宣言することができます。
  • 宣言されたパッケージのバージョンまたはバージョン範囲を指定でき、 その結果、異なるバージョンのバンドルでの変更に対応する必要がありません。
Export-Package
フラグメント外部からも可視となるパッケージを宣言します。ここで宣言されないパッケージは、フラグメント内でのみ可視となります。
このプロパティーを使用して、フラグメントがランタイムにエクスポートする、任意のパッケージの名前を指定します。 このプロパティーの他のバンドルに必要なパッケージを指定しない場合、従属バンドルが解決しない可能性があります。
トピックのタイプを示すアイコン 概念のトピック
インフォメーション・センターのご利用条件 | フィードバック

タイム・スタンプ・アイコン 最終更新: May 29, 2014 10:20

ファイル名: cbundlefragment.html