インターフェース DeferredResultProcessingInterceptor

すべての既知の実装クラス:
TimeoutDeferredResultProcessingInterceptor

public interface DeferredResultProcessingInterceptor
同時リクエスト処理をインターセプトします。同時結果は、アプリケーションによって選択されたスレッド (たとえば、外部イベントへのレスポンス) から DeferredResult が設定されるまで待機することによって取得されます。

DeferredResultProcessingInterceptor は、非同期処理の開始前、DeferredResult の設定後、タイムアウト / エラー発生時、タイムアウトやネットワークエラーなどの何らかの理由で完了した後に呼び出されます。

原則として、インターセプターメソッドによって例外が発生すると、コンテナーにディスパッチして例外インスタンスを同時結果として使用することにより、非同期処理が再開されます。このような例外は、HandlerExceptionResolver メカニズムを介して処理されます。

handleTimeout メソッドは、処理を再開するために DeferredResult を設定できます。

導入:
3.2
作成者:
Rossen Stoyanchev, Rob Winch
  • メソッドの詳細

    • beforeConcurrentHandling

      default <T> void beforeConcurrentHandling(NativeWebRequest request, DeferredResult<T> deferredResult) throws ExceptionSE
      並行処理の開始直前に、それを開始したのと同じスレッドで呼び出されます。このメソッドは、指定された DeferredResult での並行処理の開始直前の状態をキャプチャーするために使用できます。
      パラメーター:
      request - 現在のリクエスト
      deferredResult - 現在のリクエストの DeferredResult
      例外:
      ExceptionSE - エラーの場合
    • preProcess

      default <T> void preProcess(NativeWebRequest request, DeferredResult<T> deferredResult) throws ExceptionSE
      並行処理の開始直後に、それを開始したのと同じスレッドで呼び出されます。このメソッドは、指定された DeferredResult との並行処理の開始を検出するために使用できます。

      DeferredResult は、たとえば作成時または別のスレッドによってすでに設定されている可能性があります。

      パラメーター:
      request - 現在のリクエスト
      deferredResult - 現在のリクエストの DeferredResult
      例外:
      ExceptionSE - エラーの場合
    • postProcess

      default <T> void postProcess(NativeWebRequest request, DeferredResult<T> deferredResult, @Nullable ObjectSE concurrentResult) throws ExceptionSE
      DeferredResult.setResult(Object) または DeferredResult.setErrorResult(Object) を介して DeferredResult が設定された後に呼び出され、同時に結果を処理する準備ができています。

      このメソッドは、デフォルトのタイムアウト結果を受け入れるコンストラクターを使用して DeferredResult が作成された場合、タイムアウト後に呼び出すこともできます。

      パラメーター:
      request - 現在のリクエスト
      deferredResult - 現在のリクエストの DeferredResult
      concurrentResult - 同時結果
      例外:
      ExceptionSE - エラーの場合
    • handleTimeout

      default <T> boolean handleTimeout(NativeWebRequest request, DeferredResult<T> deferredResult) throws ExceptionSE
      DeferredResult が設定される前に非同期リクエストがタイムアウトしたときにコンテナースレッドから呼び出されます。実装は setResult または setErrorResult を呼び出して処理を再開できます。
      パラメーター:
      request - 現在のリクエスト
      deferredResult - 現在のリクエストの DeferredResult。DeferredResult が設定されている場合、並行処理が再開され、後続のインターセプターは呼び出されません
      戻り値:
      処理を続行する必要がある場合は true、他のインターセプターを呼び出さない場合は false 
      例外:
      ExceptionSE - エラーの場合
    • handleError

      default <T> boolean handleError(NativeWebRequest request, DeferredResult<T> deferredResult, ThrowableSE t) throws ExceptionSE
      DeferredResult が設定される前の非同期リクエストの処理中にエラーが発生したときに、コンテナースレッドから呼び出されます。実装は setResult または setErrorResult を呼び出して処理を再開できます。
      パラメーター:
      request - 現在のリクエスト
      deferredResult - 現在のリクエストの DeferredResult。DeferredResult が設定されている場合、並行処理が再開され、後続のインターセプターは呼び出されません
      t - リクエスト処理中に発生したエラー
      戻り値:
      エラー処理を続行する必要がある場合は true、他のインターセプターをバイパスして呼び出さない場合は false 
      例外:
      ExceptionSE - エラーの場合
    • afterCompletion

      default <T> void afterCompletion(NativeWebRequest request, DeferredResult<T> deferredResult) throws ExceptionSE
      タイムアウトやネットワークエラーなどの何らかの理由で非同期リクエストが完了したときにコンテナースレッドから呼び出されます。このメソッドは、DeferredResult インスタンスが使用できなくなったことを検出できます。
      パラメーター:
      request - 現在のリクエスト
      deferredResult - 現在のリクエストの DeferredResult
      例外:
      ExceptionSE - エラーの場合