0

OSGIアプリケーションでキャッシングシステムを構築しています。最初の考えは、キャッシングを適用したいサービスが登録されたら、そのサービスをプロキシして、プロキシを非常に高いサービスランキングに登録するだけです。

バンドルが開始される順序に応じて、これはほとんど機能します。コンシューマーが最後に開始された場合、すべてが機能し、キャッシング バンドルを停止すると、コンシューマーは元の実装にフォールバックしますが、キャッシングバンドルを再起動すると、コンシューマーはサービスのプロキシ バージョンを取得しません。

これを証明するための簡単な例を作るために、はるかに高いランキング (つまり、プロキシを作成しないなど) で手動で既知のサービスを登録する単純なバンドルを作成しましたが、上位のサービスが開始されても消費者はまだ問題が残っています。ランクの低いサービスを利用します。

設計図のダイナミズムは特定の状況でのみ適用されますか?

  1. 初期配線→最上位のサービスを選択
  2. 有線サービスがなくなったら→最上位のサービスを選択
  3. 新しいサービスが表示された場合 -> 何もしない

3:d ケースでも 1 と 2 の動作を取得する方法はありますか?

または、私がやろうとしていることを達成するためのより良い方法はありますか? すなわち。HookEvent などで?

ありがとう

編集: プロキシ登録後に使用済みバンドルを更新することで、この特定の問題を解決しました。これにより、サービス配線が更新されるようです。

Bundle[] usingBundles = reference.getUsingBundles();
for(.....)
{
   b.update();
}
4

1 に答える 1