2

OSGi で宣言型サービスを使用しているときに、特別なユースケースに遭遇しました。

長時間の操作が完了したらすぐに ds コンポーネントにサービスを登録させたい場合があります。サービスは activate メソッドの終了後に登録されるため、通常はこれは問題になりません。ただし、(スレッドがブロックされないようにするために) activate メソッド内でスレッドを開き、スレッドが作業を終了したらサービスを登録する必要がある場合があります。

@Component
public class MyClass implements MyService {

   private ExecutorService executor = Executors.newCachedThreadPool();

@Activate
public void start(final BundleContext context) {
  executor.execute(new Runnable() {

  @Override
  public void run() {

    ...   // doing something for long

     context.registerService(MyService.class, MyClass.this, null);
  }
  });
 }
}

まさにそれを行う util クラスを思いつきました (そして、スレッドがまだ実行されている間にコンポーネントが停止するなどの問題をカバーします)。そのようなことを行うより良い方法はありますか?そうでない場合は、そのような util クラスをフレームワークに追加すると便利ではないでしょうか?

敬具、マイク

4

1 に答える 1