Jersey、CDI 2.0(Weld 3.0.1.final実装)とTomcatを使用してREST Webサービスを作成しています。 Webサービスの目標は、数分または数時間でも実行できる長い計算タスクを起動することです。タスクは、Webサービスに送信されたHTTP POST要求で開始する必要がありますが、開始されたタスクは別のスレッドでジョブを実行する必要がありますが、要求はすぐに終了してクライアントに返信する必要があります。CDI 2.0:Event.fireAsync()で起動された非同期イベントの数を同時に確認する方法
イベントを非同期で処理することを可能にするCDI 2.0とそのEvent.fireAsync()
メソッドを使用して解決しました。 POSTリクエストを処理するJAX-RSリソースクラスは非同期イベントを発生させ、別の@ApplicationScoped
CDI Beanで非同期オブザーバメソッド(@ObservesAsync
と注釈されています)によって処理されます。
上記の解決策は素晴らしいです。しかし、非同期イベントでいくつかの長いタスクを同時に起動すると、実際には4つしか実行されず、残りがキューに入れられていることに気付きました。実行中の4つのイベントの1つが終了するとすぐに、キューに入れられた最初のイベントが処理を開始します。
だから、私の質問は以下のとおりです。
- CDIのイベントの本当の非同期処理のために利用可能なスレッドの数をチェックする方法は?
- 非同期オブザーバーメソッドでキューに登録されている処理の数を確認する方法はありますか?