クラス WebAsyncManager

java.lang.ObjectSE
org.springframework.web.context.request.async.WebAsyncManager

public final class WebAsyncManager extends ObjectSE
非同期リクエスト処理を管理するための中心的なクラス。主に SPI を目的としており、通常アプリケーションクラスによって直接使用されることはありません。

非同期シナリオは、スレッド(T1)での通常のリクエスト処理から始まります。同時リクエスト処理は、startCallableProcessing または startDeferredResultProcessing を呼び出すことで開始できます。両方とも、別個のスレッド(T2)で結果を生成します。結果が保存され、リクエストがコンテナーにディスパッチされ、保存された結果で処理が 3 番目のスレッド(T3)で再開されます。ディスパッチされたスレッド(T3)内で、保存された結果に getConcurrentResult() を介してアクセスするか、hasConcurrentResult() を介してその存在を検出できます。

導入:
3.2
作成者:
Rossen Stoyanchev, Juergen Hoeller, Sam Brannen
関連事項:
  • メソッドの詳細

    • setAsyncWebRequest

      public void setAsyncWebRequest(AsyncWebRequest asyncWebRequest)
      使用する AsyncWebRequest を構成します。このプロパティは、1 回のリクエスト中に複数回設定して、リクエストの現在の状態を正確に反映することができます(例: 転送、リクエスト / レスポンスの折り返しなど)。ただし、並行処理の進行中、つまり isConcurrentHandlingStarted() が true の間は設定しないでください。
      パラメーター:
      asyncWebRequest - 使用する Web リクエスト
    • getAsyncWebRequest

      @Nullable public AsyncWebRequest getAsyncWebRequest()
      現在の AsyncWebRequest を返します。
      導入:
      5.3.33
    • setTaskExecutor

      public void setTaskExecutor(AsyncTaskExecutor taskExecutor)
      startCallableProcessing(Callable, Object...) を介した並行処理で使用するために AsyncTaskExecutor を構成します。

      デフォルトでは、SimpleAsyncTaskExecutor インスタンスが使用されます。

    • isConcurrentHandlingStarted

      public boolean isConcurrentHandlingStarted()
      現在のリクエストに対して選択されたハンドラーがリクエストを非同期的に処理することを選択したかどうかを返します。戻り値が "true" の場合、同時処理が進行中であり、レスポンスが開いたままであることを示します。戻り値が "false" の場合、同時処理が開始されていないか、完了しており、同時処理の結果をさらに処理するためにリクエストがディスパッチされたことを意味します。
    • hasConcurrentResult

      public boolean hasConcurrentResult()
      同時処理の結果として結果値が存在するかどうかを返します。
    • getConcurrentResult

      @Nullable public ObjectSE getConcurrentResult()
      並行処理から結果を取得します。
      戻り値:
      オブジェクト。同時処理で Exception または Throwable が発生した場合は、そのオブジェクトになります。
      関連事項:
    • getConcurrentResultContext

      @Nullable public ObjectSE[] getConcurrentResultContext()
      並行処理の開始時に保存された追加の処理コンテキストを取得します。
      関連事項:
    • getCallableInterceptor

      @Nullable public CallableProcessingInterceptor getCallableInterceptor(ObjectSE key)
      指定されたキーに登録されている CallableProcessingInterceptor を取得します。
      パラメーター:
      key - キー
      戻り値:
      そのキーに登録されたインターセプター、または存在しない場合は null 
    • getDeferredResultInterceptor

      @Nullable public DeferredResultProcessingInterceptor getDeferredResultInterceptor(ObjectSE key)
      指定されたキーに登録されている DeferredResultProcessingInterceptor を取得します。
      パラメーター:
      key - キー
      戻り値:
      そのキーに登録されたインターセプター、または存在しない場合は null 
    • registerCallableInterceptor

      public void registerCallableInterceptor(ObjectSE key, CallableProcessingInterceptor interceptor)
      指定されたキーに CallableProcessingInterceptor を登録します。
      パラメーター:
      key - キー
      interceptor - 登録するインターセプター
    • registerCallableInterceptors

      public void registerCallableInterceptors(CallableProcessingInterceptor... interceptors)
      キーなしで CallableProcessingInterceptor を登録します。キーはクラス名とハッシュコードから派生します。
      パラメーター:
      interceptors - 登録する 1 つ以上のインターセプター
    • registerDeferredResultInterceptor

      public void registerDeferredResultInterceptor(ObjectSE key, DeferredResultProcessingInterceptor interceptor)
      指定されたキーに DeferredResultProcessingInterceptor を登録します。
      パラメーター:
      key - キー
      interceptor - 登録するインターセプター
    • registerDeferredResultInterceptors

      public void registerDeferredResultInterceptors(DeferredResultProcessingInterceptor... interceptors)
      キーを指定せずに 1 つ以上の DeferredResultProcessingInterceptors を登録します。デフォルトのキーは、インターセプタークラス名とハッシュコードから派生します。
      パラメーター:
      interceptors - 登録する 1 つ以上のインターセプター
    • clearConcurrentResult

      public void clearConcurrentResult()
    • 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 を含む WebAsyncTask
      processingContext - getConcurrentResultContext() 経由でアクセスできる保存する追加のコンテキスト
      例外:
      ExceptionSE - 並行処理の開始に失敗した場合
    • startDeferredResultProcessing

      public void startDeferredResultProcessing(DeferredResult<?> deferredResult, ObjectSE... processingContext) throws ExceptionSE
      並行リクエスト処理を開始し、指定された DeferredResult を結果を保存し、その結果の処理を再開するためにリクエストをディスパッチする DeferredResult.DeferredResultHandler で初期化します。AsyncWebRequest は、DeferredResult を期限切れにする完了ハンドラーと、DeferredResult にデフォルトのタイムアウト結果があると想定するタイムアウトハンドラーでも更新されます。
      パラメーター:
      deferredResult - 初期化する DeferredResult インスタンス
      processingContext - getConcurrentResultContext() 経由でアクセスできる保存する追加のコンテキスト
      例外:
      ExceptionSE - 並行処理の開始に失敗した場合
      関連事項: