OSGiエンタープライズリリース5仕様には、0名前空間が導入されています。このネームスペースにより、Blueprintや宣言型サービスなどのエクステンダーを想定したバンドルをフレームワークにインストールして、Require-Capability
ヘッダーを使用してこの依存関係をモデル化することができます。SCR拡張機能の要件を宣言するにはどうすればいいですか?
第135.2 osgi.extender名前空間は、それぞれの特定のエクステンダの機能の値を、対応する仕様で指定する必要があることを示しています。例は青写真のために与えられる:
Provide-Capability: osgi.extender;
osgi.extender="osgi.blueprint";
uses:="org.osgi.service.blueprint.container,org.osgi.service.blueprint.reflect"
version:Version="1.0"
しかし、章112 宣言型サービス仕様は、SCRの実装が提供する機能を指定していません。
blog post on Requirements and Capabilitiesの例では、SCRの機能がosgi.component
であることを示しています。私は最終的にこの値が仕様で適切に定義されると仮定します。しかしそれまでは私はそれを使うことはできません。
Require-Capability
とProvide-Capability
ヘッダーがOSGiコアリリース4.3で導入されているため、このメカニズムはフレームワーク実装ですでに利用可能です。 SCRの実装をOBRリポジトリから解決できるように、バンドルがSCRの要件を表すことを望みます。
私は空のバンドルを作成し、一方はカスタム機能を提供し、他方は実装バンドルを必要とするソリューションを想像することができます。例:
Provide-Capability: com.example.extender; extender=scr
Require-Bundle: org.apache.felix.scr; bundle-version=1.6.0
宣言型サービスを含むバンドルであれば、この機能の要件を表すことができます。例:
Require-Capability: com.example.extender; filter:="(extender=scr)"
これは、宣言型サービスを含むバンドルを展開するときにSCRが解決されることを確認する良い方法ですか?他の方法はありますか?
この問題の良い解決策は、機能を提供しない他のレガシーバンドルにも適用できる解決策です。
私が提案した回避策は実際には機能しませんか? –
そうです。また、その機能をDS実装バンドルに追加したフラグメントを作成することもできます。 –
あなたのお返事ありがとうございます! –