クラス WebAsyncManager
java.lang.ObjectSE
org.springframework.web.context.request.async.WebAsyncManager
非同期リクエスト処理を管理するための中心的なクラス。主に SPI を目的としており、通常アプリケーションクラスによって直接使用されることはありません。
非同期シナリオは、スレッド(T1)での通常のリクエスト処理から始まります。同時リクエスト処理は、startCallableProcessing
または startDeferredResultProcessing
を呼び出すことで開始できます。両方とも、別個のスレッド(T2)で結果を生成します。結果が保存され、リクエストがコンテナーにディスパッチされ、保存された結果で処理が 3 番目のスレッド(T3)で再開されます。ディスパッチされたスレッド(T3)内で、保存された結果に getConcurrentResult()
を介してアクセスするか、hasConcurrentResult()
を介してその存在を検出できます。
- 導入:
- 3.2
- 作成者:
- Rossen Stoyanchev, Juergen Hoeller, Sam Brannen
- 関連事項:
メソッドのサマリー
修飾子と型メソッド説明void
concurrentResult と concurrentResultContext をクリアします。指定されたキーに登録されているCallableProcessingInterceptor
を取得します。並行処理の結果へのアクセスを提供します。ObjectSE[]
並行処理の開始時に保存された追加の処理コンテキストへのアクセスを提供します。指定されたキーに登録されているDeferredResultProcessingInterceptor
を取得します。boolean
同時処理の結果として結果値が存在するかどうか。boolean
現在のリクエストに対して選択されたハンドラーがリクエストを非同期的に処理することを選択したかどうか。void
registerCallableInterceptor
(ObjectSE key, CallableProcessingInterceptor interceptor) 指定されたキーにCallableProcessingInterceptor
を登録します。void
registerCallableInterceptors
(CallableProcessingInterceptor... interceptors) キーなしでCallableProcessingInterceptor
を登録します。void
registerDeferredResultInterceptor
(ObjectSE key, DeferredResultProcessingInterceptor interceptor) 指定されたキーにDeferredResultProcessingInterceptor
を登録します。void
registerDeferredResultInterceptors
(DeferredResultProcessingInterceptor... interceptors) キーを指定せずに 1 つ以上のDeferredResultProcessingInterceptors
を登録します。void
setAsyncWebRequest
(AsyncWebRequest asyncWebRequest) 使用するAsyncWebRequest
を構成します。void
setTaskExecutor
(AsyncTaskExecutor taskExecutor) startCallableProcessing(Callable, Object...)
を介した並行処理で使用するために AsyncTaskExecutor を構成します。void
startCallableProcessing
(CallableSE<?> callable, ObjectSE... processingContext) 同時リクエスト処理を開始し、指定されたタスクをAsyncTaskExecutor
で実行します。void
startCallableProcessing
(WebAsyncTask<?> webAsyncTask, ObjectSE... processingContext) 指定されたWebAsyncTask
を使用して、startCallableProcessing(Callable, Object...)
に委譲する前に、タスク実行プログラムとAsyncWebRequest
のタイムアウト値を構成します。void
startDeferredResultProcessing
(DeferredResult<?> deferredResult, ObjectSE... processingContext) 並行リクエスト処理を開始し、結果を保存し、その結果の処理を再開するためにリクエストをディスパッチするDeferredResult.DeferredResultHandler
で指定されたDeferredResult
を初期化します。
メソッドの詳細
setAsyncWebRequest
使用するAsyncWebRequest
を構成します。このプロパティは、1 回のリクエスト中に複数回設定して、リクエストの現在の状態を正確に反映することができます(例: 転送、リクエスト / レスポンスの折り返しなど)。ただし、並行処理の進行中、つまりisConcurrentHandlingStarted()
がtrue
の間は設定しないでください。- パラメーター:
asyncWebRequest
- 使用する Web リクエスト
setTaskExecutor
startCallableProcessing(Callable, Object...)
を介した並行処理で使用するために AsyncTaskExecutor を構成します。デフォルトでは、
SimpleAsyncTaskExecutor
インスタンスが使用されます。isConcurrentHandlingStarted
public boolean isConcurrentHandlingStarted()現在のリクエストに対して選択されたハンドラーがリクエストを非同期的に処理することを選択したかどうか。"true" の戻り値は、並行処理が進行中であり、レスポンスが開いたままであることを示します。"false" の戻り値は、並行処理が開始されていないか、おそらく完了しており、並行処理の結果をさらに処理するためにリクエストがディスパッチされたことを意味します。hasConcurrentResult
public boolean hasConcurrentResult()同時処理の結果として結果値が存在するかどうか。getConcurrentResult
並行処理の結果へのアクセスを提供します。- 戻り値:
- 同時処理が発生した場合は、おそらく
Exception
またはThrowable
のオブジェクト。 - 関連事項:
getConcurrentResultContext
並行処理の開始時に保存された追加の処理コンテキストへのアクセスを提供します。getCallableInterceptor
指定されたキーに登録されているCallableProcessingInterceptor
を取得します。- パラメーター:
key
- キー- 戻り値:
- そのキーに登録されたインターセプター、または存在しない場合は
null
getDeferredResultInterceptor
指定されたキーに登録されているDeferredResultProcessingInterceptor
を取得します。- パラメーター:
key
- キー- 戻り値:
- そのキーに登録されたインターセプター、または存在しない場合は
null
registerCallableInterceptor
指定されたキーにCallableProcessingInterceptor
を登録します。- パラメーター:
key
- キーinterceptor
- 登録するインターセプター
registerCallableInterceptors
キーなしでCallableProcessingInterceptor
を登録します。キーはクラス名とハッシュコードから派生します。- パラメーター:
interceptors
- 登録する 1 つ以上のインターセプター
registerDeferredResultInterceptor
public void registerDeferredResultInterceptor(ObjectSE key, DeferredResultProcessingInterceptor interceptor) 指定されたキーにDeferredResultProcessingInterceptor
を登録します。- パラメーター:
key
- キーinterceptor
- 登録するインターセプター
registerDeferredResultInterceptors
キーを指定せずに 1 つ以上のDeferredResultProcessingInterceptors
を登録します。デフォルトのキーは、インターセプタークラス名とハッシュコードから派生します。- パラメーター:
interceptors
- 登録する 1 つ以上のインターセプター
clearConcurrentResult
public void clearConcurrentResult()concurrentResult と concurrentResultContext をクリアします。startCallableProcessing
public void startCallableProcessing(CallableSE<?> callable, ObjectSE... processingContext) throws ExceptionSE 同時リクエスト処理を開始し、指定されたタスクをAsyncTaskExecutor
で実行します。タスクの実行結果が保存され、その結果の処理を再開するためにリクエストがディスパッチされます。タスクが例外を発生させた場合、保存された結果は発生した例外になります。- パラメーター:
callable
- 非同期的に実行される作業単位processingContext
-getConcurrentResultContext()
経由でアクセスできる保存する追加のコンテキスト- 例外:
ExceptionSE
- 並行処理の開始に失敗した場合- 関連事項:
startCallableProcessing
public void startCallableProcessing(WebAsyncTask<?> webAsyncTask, ObjectSE... processingContext) throws ExceptionSE 指定されたWebAsyncTask
を使用して、startCallableProcessing(Callable, Object...)
に委譲する前に、タスク実行プログラムとAsyncWebRequest
のタイムアウト値を構成します。- パラメーター:
webAsyncTask
- ターゲットCallable
を含む WebAsyncTaskprocessingContext
-getConcurrentResultContext()
経由でアクセスできる保存する追加のコンテキスト- 例外:
ExceptionSE
- 並行処理の開始に失敗した場合
startDeferredResultProcessing
public void startDeferredResultProcessing(DeferredResult<?> deferredResult, ObjectSE... processingContext) throws ExceptionSE 並行リクエスト処理を開始し、指定されたDeferredResult
を結果を保存し、その結果の処理を再開するためにリクエストをディスパッチするDeferredResult.DeferredResultHandler
で初期化します。AsyncWebRequest
は、DeferredResult
を期限切れにする完了ハンドラーと、DeferredResult
にデフォルトのタイムアウト結果があると想定するタイムアウトハンドラーでも更新されます。- パラメーター:
deferredResult
- 初期化する DeferredResult インスタンスprocessingContext
-getConcurrentResultContext()
経由でアクセスできる保存する追加のコンテキスト- 例外:
ExceptionSE
- 並行処理の開始に失敗した場合- 関連事項: