public final class WebAsyncManager extends ObjectSE
非同期シナリオは、スレッド(T1)での通常のリクエスト処理から始まります。同時リクエスト処理は、startCallableProcessing
または startDeferredResultProcessing
を呼び出すことで開始できます。両方とも、別個のスレッド(T2)で結果を生成します。結果が保存され、リクエストがコンテナーにディスパッチされ、保存された結果で処理が 3 番目のスレッド(T3)で再開されます。ディスパッチされたスレッド(T3)内で、保存された結果に getConcurrentResult()
を介してアクセスするか、hasConcurrentResult()
を介してその存在を検出できます。
AsyncWebRequestInterceptor
, AsyncHandlerInterceptor
, OncePerRequestFilter.shouldNotFilterAsyncDispatch()
, OncePerRequestFilter.isAsyncDispatch(javax.servlet.http.HttpServletRequest)
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setAsyncWebRequest(AsyncWebRequest asyncWebRequest)
AsyncWebRequest
を構成します。このプロパティは、1 回のリクエスト中に複数回設定して、リクエストの現在の状態を正確に反映することができます(例: 転送、リクエスト / レスポンスの折り返しなど)。ただし、並行処理の進行中、つまり isConcurrentHandlingStarted()
が true
の間は設定しないでください。asyncWebRequest
- 使用する Web リクエスト public void setTaskExecutor(AsyncTaskExecutor taskExecutor)
startCallableProcessing(Callable, Object...)
を介した並行処理で使用するために AsyncTaskExecutor を構成します。 デフォルトでは、SimpleAsyncTaskExecutor
インスタンスが使用されます。
public boolean isConcurrentHandlingStarted()
public boolean hasConcurrentResult()
public ObjectSE getConcurrentResult()
Exception
または Throwable
のオブジェクト。clearConcurrentResult()
public ObjectSE[] getConcurrentResultContext()
@Nullable public CallableProcessingInterceptor getCallableInterceptor(ObjectSE key)
CallableProcessingInterceptor
を取得します。key
- キー null
@Nullable public DeferredResultProcessingInterceptor getDeferredResultInterceptor(ObjectSE key)
DeferredResultProcessingInterceptor
を取得します。key
- キー null
public void registerCallableInterceptor(ObjectSE key, CallableProcessingInterceptor interceptor)
CallableProcessingInterceptor
を登録します。key
- キー interceptor
- 登録するインターセプター public void registerCallableInterceptors(CallableProcessingInterceptor... interceptors)
CallableProcessingInterceptor
を登録します。キーはクラス名とハッシュコードから派生します。interceptors
- 登録する 1 つ以上のインターセプター public void registerDeferredResultInterceptor(ObjectSE key, DeferredResultProcessingInterceptor interceptor)
DeferredResultProcessingInterceptor
を登録します。key
- キー interceptor
- 登録するインターセプター public void registerDeferredResultInterceptors(DeferredResultProcessingInterceptor... interceptors)
DeferredResultProcessingInterceptors
を登録します。デフォルトのキーは、インターセプタークラス名とハッシュコードから派生します。interceptors
- 登録する 1 つ以上のインターセプター public void clearConcurrentResult()
public void startCallableProcessing(CallableSE<?> callable, ObjectSE... processingContext) throws ExceptionSE
AsyncTaskExecutor
で実行します。タスクの実行結果が保存され、その結果の処理を再開するためにリクエストがディスパッチされます。タスクが例外を発生させた場合、保存された結果は発生した例外になります。callable
- 非同期的に実行される作業単位 processingContext
- getConcurrentResultContext()
経由でアクセスできる保存する追加のコンテキスト ExceptionSE
- 並行処理の開始に失敗した場合 getConcurrentResult()
, getConcurrentResultContext()
public void startCallableProcessing(WebAsyncTask<?> webAsyncTask, ObjectSE... processingContext) throws ExceptionSE
WebAsyncTask
を使用して、startCallableProcessing(Callable, Object...)
に委譲する前に、タスク実行プログラムと AsyncWebRequest
のタイムアウト値を構成します。webAsyncTask
- ターゲット Callable
を含む WebAsyncTask processingContext
- getConcurrentResultContext()
経由でアクセスできる保存する追加のコンテキスト ExceptionSE
- 並行処理の開始に失敗した場合 public void startDeferredResultProcessing(DeferredResult<?> deferredResult, ObjectSE... processingContext) throws ExceptionSE
DeferredResult
を結果を保存し、その結果の処理を再開するためにリクエストをディスパッチする DeferredResult.DeferredResultHandler
で初期化します。AsyncWebRequest
は、DeferredResult
を期限切れにする完了ハンドラーと、DeferredResult
にデフォルトのタイムアウト結果があると想定するタイムアウトハンドラーでも更新されます。deferredResult
- 初期化する DeferredResult インスタンス processingContext
- getConcurrentResultContext()
経由でアクセスできる保存する追加のコンテキスト ExceptionSE
- 並行処理の開始に失敗した場合 getConcurrentResult()
, getConcurrentResultContext()