10

私は自分のアプリケーションで Apache Felix 宣言型サービスを使用しており、@Reference注釈に与えることができるパラメーターを説明するチート シートを探しています。それに関する非常に有益なチート シート (または表) を含む Web ページを見たことがありますが、見つけられないようです。これは、多くの Felix ユーザーにとって役立つと思います。私が話しているパラメータ:

  • カーディナリティ:MANDATORY_UNARY, MANDATORY_MULTIPLE, OPTIONAL_UNARY, OPTIONAL_MULTIPLE
  • 戦略:EVENT, LOOKUP
  • ポリシー:DYNAMIC, STATIC
  • ポリシーオプション:GREEDY, RELUCTANT

カーディナリティはかなり単純ですが、他のものは私にはわかりません。彼らは何をし、どのように機能しますか?

4

1 に答える 1

10

公式の OSGI R5 Compendium Specページ 281ff から。

参照カーディナリティ

参照のカーディナリティは、次の 4 つの選択肢のいずれかとして指定できます。

  • 0..1 – オプションで単項。
  • 1..1 – 必須で単項 (デフォルト) 。
  • 0..n – オプションで複数。
  • 1..n – 必須で複数。

ストラテジー

  • イベント戦略– サービスがバインドされたとき、サービスがバインド解除されたとき、またはそのプロパティが更新されたときに、SCR はコンポーネント インスタンスのメソッドを呼び出します。これらのメソッドは、参照によって指定されたバインド、更新、およびバインド解除のメソッドです。イベント戦略は、動的参照のためにバインドされたサービスへの変更をコンポーネントに通知する必要がある場合に役立ちます。
  • ルックアップ戦略– コンポーネント インスタンスは、ComponentContext の locateService メソッドの 1 つを使用して、バインドされたサービスを見つけることができます。これらのメソッドは、参照の名前をパラメーターとして受け取ります。参照に動的ポリシーがある場合は、返されたサービス オブジェクトを格納するのではなく、必要になるたびに検索することが重要です。

ポリシー

  • 静的ポリシーは最も単純なポリシーであり、デフォルトのポリシーです。コンポーネント インスタンスは、ダイナミクスを認識しません。静的ポリシーを持つ参照にバインドされたサービスが使用できなくなる前に、コンポーネント構成が非アクティブ化されます。利用できなくなったバインドされたサービスを置き換えるためにターゲット サービスが利用できる場合、コンポーネント構成を再度アクティブにして、置き換えられたサービスにバインドする必要があります。

  • コンポーネントの実装は、任意のスレッドで発生する可能性がある一連のバインドされたサービスの変更を適切に処理する必要があるため、動的ポリシーはもう少し複雑です。動的ポリシーを使用すると、SCR は、コンポーネント構成を非アクティブ化することなく、バインドされたサービスのセットを変更できます。コンポーネントがイベント戦略を使用してサービスにアクセスする場合、コンポーネント インスタンスは、bind メソッドと unbind メソッドの呼び出しによって、バインドされたサービス セットの変更を通知されます。

ポリシー オプション

  • reluctant – 再結合と再活性化を最小限に抑えます。
  • greedy – 静的参照を非アクティブ化するか、動的参照を再バインドすることにより、最適なサービスを最大限に活用します。

その他のフェリックス固有のリソース

[Felic SCR アノテーション] ( http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html )

于 2015-05-26T09:01:14.817 に答える