2

OSGi宣言型サービスは、「コンポーネント構成が非アクティブ化されると、SCRは、アクティブ化に関連付けられたコンポーネントインスタンスおよびコンポーネントコンテキストへのすべての参照を破棄する必要がある」ため、参照に一致するunbindメソッドなしでbindメソッドを持つことが明示的に許可されます。

Apache Felix maven-scr-pluginを使用して、Java5アノテーションからサービスコンポーネントXMLを生成しています。@Referenceアノテーションから「unbind」属性を省略すると、次のエラーが発生します。

[ERROR] @Reference: Missing method unbind for reference configuration at Java annotations in <classname>:<linenum>

SCRジェネレータが非常に厳しいのはなぜですか?省略されたバインド解除メソッドを許容するように指示する方法はありますか?おそらく私はFelixに欠陥を提出する必要がありますか?

もちろん、簡単なバインド解除メソッドをサービスに追加するのは簡単ですが、仕様ではそれらは不要であるとされています。

4

3 に答える 3

4

あなたが引用するテキスト(112.5.13大要v4.2)は、バインド解除に直接関係していません。これは、非アクティブ化を指し、そのため、バインド解除が必要になります。仕様(112.5.15)の後半では、「イベントストラテジーを使用する参照ごとに、その参照のバインドされたサービスごとにunbindメソッドを呼び出す必要があります」と記載されています。

編集上記を無視してください。以下のコメントを参照してください。現在のバージョンのFelixSCRでは、「generateAccessors」がデフォルトで有効になっており、バインド/バインド解除メソッドを作成する必要はありません。2011年7月のIIRCはそうではありませんでした。

于 2011-07-28T17:41:04.653 に答える
0

Bndは注釈からDSXMLも生成し、この制限はありません。

于 2013-01-11T13:31:38.543 に答える
0

仕様の標準DSアノテーションを使用する場合、bndはXMLを生成し、個別のMavenプラグインも必要ありません。

ちなみに、参照ポリシーが動的である場合は、動的再バインドを処理する必要がある場合があるため、カーディナリティが必須であっても、常にunbindメソッドを使用する必要があります。この場合、bndはエラーではなく警告を発します。

参照ポリシーが静的である場合、バインド解除メソッドは完全に不要です。この場合、コンポーネントインスタンスを破棄する必要があるため、deactivateメソッドでクリーンアップを実行できます。

于 2016-08-30T05:09:26.213 に答える