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, waitSEpublic void setAsyncWebRequest(AsyncWebRequest asyncWebRequest)
AsyncWebRequest を構成します。このプロパティは、1 回のリクエスト中に複数回設定して、リクエストの現在の状態を正確に反映することができます(例: 転送、リクエスト / レスポンスの折り返しなど)。ただし、並行処理の進行中、つまり isConcurrentHandlingStarted() が true の間は設定しないでください。asyncWebRequest - 使用する Web リクエスト @Nullable public AsyncWebRequest getAsyncWebRequest()
AsyncWebRequest を返します。public void setTaskExecutor(AsyncTaskExecutor taskExecutor)
startCallableProcessing(Callable, Object...) を介した並行処理で使用するために AsyncTaskExecutor を構成します。 デフォルトでは、SimpleAsyncTaskExecutor インスタンスが使用されます。
public boolean isConcurrentHandlingStarted()
public boolean hasConcurrentResult()
@Nullable public ObjectSE getConcurrentResult()
Exception または Throwable が発生した場合は、そのオブジェクトになります。clearConcurrentResult()@Nullable 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()