2012-10-24 9 views
6

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-CapabilityProvide-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が解決されることを確認する良い方法ですか?他の方法はありますか?

この問題の良い解決策は、機能を提供しない他のレガシーバンドルにも適用できる解決策です。

答えて

4

仕様でosgi.extender名前空間が定義されていますが、実装で適切なエクステンダ機能を提供するように、さまざまなエクステンダ仕様(Blueprint、DS)を更新する必要があります。今、彼らはおそらくしません。

今のところ、DSバンドルがDS実装バンドルを解決(またはインストール)することを「要求」する方法があります。

OSGiはBlueprintとDSの次回のアップデートの進行中であり、これらのアップデートではosgi.extender機能が必要になります。

+0

私が提案した回避策は実際には機能しませんか? –

+3

そうです。また、その機能をDS実装バンドルに追加したフラグメントを作成することもできます。 –

+0

あなたのお返事ありがとうございます! –

関連する問題