0

FindHook今日、私は OSGi フック、特にサービスとサービスのために少し作業しましたEventListenerHook。プロキシサービスを試してみたかった。正常に動作し、私のEventListenerHookサービスはプロキシされています。しかし、関連するメソッドに(Bnd スタイル)FindHookのアノテーションを付けて、サービスがサービス実装の参照を取得すると、イベントが呼び出されないことに気付きました。アノテーションの問題ではなく、DS 全般の問題かもしれません。setXXX@Reference

これは非常に悪いことです。bc には、プロキシなしとプロキシ付きの 2 つのサービスが登録されています。プロキシされたものからのみ参照を取得したい。一般に、DS を使用しない場合、呼び出すことで参照を取得できBundleContext.getServiceReference(java.lang.Class<S> clazz)、イベントFindHook.findが呼び出されます。ここで、どちらServiceReferenceを返すかを決定できます。

DS のようなアプローチを使用すると、どのようなプロセスが実行されますか (私にとっては Bnd アノテーション@Reference)。上記のセクションで説明したように、どのサービスを参照するかを決定したいと考えています。

4

3 に答える 3

0

フレームワークは、両方が要求を満たす2つのサービスのどちらかを決定する必要がある場合、最初にサービスランクの高い方を選択します。そのランキングは、サービス登録時にプロパティとして設定できます。したがって、プロキシを登録するとき、jusは、競合するサービスよりも高いサービスランクを持っていることを確認します。

于 2012-08-02T15:41:57.147 に答える
0

これは実際に DS の実装に関する問題です。サービスを見つけるのは DS 実装バンドルであるため、DS impl がコンポーネント バンドルに代わってサービス アクセスを管理する方法に依存します。DS 実装がコンポーネント バンドルの BundleContext を使用してサービスを検索する場合、コンポーネント バンドルに表示されるサービスに影響を与えることができるはずです。

于 2012-08-02T12:28:43.153 に答える
0

答えてくれてありがとう、しかし私は自分で解決策を見つけました。何時間ものデバッグの後、コードの条件に違反していて、特別なことは何も起こらなかったことがわかりました。

于 2012-08-03T16:17:27.757 に答える