1

非同期 ServletRequest がAsyncContextから完了したかどうかを確認する方法はありますか? 春にはこれをサポートするある種のラッパーがあることがわかりましたが、標準ライブラリには何も見つかりませんでした。それが私が望んでいたことです。

Tomcat 7 を使用しています。

4

2 に答える 2

3

2つのうちの1つのように聞こえます-非同期リクエストの完了時に呼び出されるリスナーが必要であるか、非同期呼び出しを使用する必要はありません。

あなたの質問は少し一般的すぎます。

一般的に話す-発信者が通話の即時の結果に関心がない場合、非同期通話が使用されます。発信者が呼び出しの結果をすぐに知りたい場合は、同期呼び出しを使用する必要があります。呼び出し元が結果をすぐに知りたくない場合(たとえば、一部のビジネスアプリケーションへのログインなど、2番目の優先順位があります)、非同期呼び出しの実行の終了時に何らかのアクションを実行する必要がある場合は、何らかのリスナーを使用する必要があります。

非同期呼び出しに必要なのは、(クラスjavax.servlet.AsyncListenerの)リスナーです。

リスナーでは、非同期呼び出しが終了したことを確認し(onCompleteメソッド)、非同期呼び出しを終了/補完するためのアクションを実行する場合があります。


繰り返しになりますが、リクエストの呼び出し元が完了後すぐに結果を知る必要がある場合は、アーキテクチャに誤りがある可能性があります。同期呼び出しを使用する必要が あります。呼び出しが完了するまで待つだけで、結果が得られます。この状況では、非同期呼び出しの使用は間違っています。


ある種のループを使用して非同期呼び出しの結果を時々チェックする方法を見ましたが、99.99%の場合、そのようなアプローチは何らかのアーキテクチャ上のミスの結果であるように見えます。

于 2013-03-16T07:30:42.363 に答える
1

onComplete()メソッドを実装できるAsyncListenerを登録できます。

AsyncListenerをAsyncContextに追加する必要があります。

于 2013-03-16T12:33:38.670 に答える