public interface DeferredResultProcessingInterceptor
DeferredResult
が設定されるのを待機することによって同時結果が取得される同時リクエスト処理をインターセプトします(たとえば、何らかの外部イベントにレスポンスして)。DeferredResultProcessingInterceptor
は、非同期処理の開始前、DeferredResult
の設定後、タイムアウト / エラー発生時、タイムアウトやネットワークエラーなどの何らかの理由で完了した後に呼び出されます。
原則として、インターセプターメソッドによって例外が発生すると、コンテナーにディスパッチして例外インスタンスを同時結果として使用することにより、非同期処理が再開されます。このような例外は、HandlerExceptionResolver
メカニズムを介して処理されます。
handleTimeout
メソッドは、処理を再開するために DeferredResult
を設定できます。
修飾子と型 | メソッドと説明 |
---|---|
default <T> void | afterCompletion(NativeWebRequest request, DeferredResult<T> deferredResult) タイムアウトやネットワークエラーなどの何らかの理由で非同期リクエストが完了したときにコンテナースレッドから呼び出されます。 |
default <T> void | beforeConcurrentHandling(NativeWebRequest request, DeferredResult<T> deferredResult) 並行処理の開始直前に、それを開始したのと同じスレッドで呼び出されます。 |
default <T> boolean | handleError(NativeWebRequest request, DeferredResult<T> deferredResult, ThrowableSE t) DeferredResult が設定される前の非同期リクエストの処理中にエラーが発生したときに、コンテナースレッドから呼び出されます。 |
default <T> boolean | handleTimeout(NativeWebRequest request, DeferredResult<T> deferredResult) DeferredResult が設定される前に非同期リクエストがタイムアウトしたときにコンテナースレッドから呼び出されます。 |
default <T> void | postProcess(NativeWebRequest request, DeferredResult<T> deferredResult, ObjectSE concurrentResult) DeferredResult.setResult(Object) または DeferredResult.setErrorResult(Object) を介して DeferredResult が設定された後に呼び出され、同時に結果を処理する準備ができています。 |
default <T> void | preProcess(NativeWebRequest request, DeferredResult<T> deferredResult) 並行処理の開始直後に、それを開始したのと同じスレッドで呼び出されます。 |
default <T> void beforeConcurrentHandling(NativeWebRequest request, DeferredResult<T> deferredResult) throws ExceptionSE
DeferredResult
での並行処理の開始直前の状態をキャプチャーするために使用できます。request
- 現在のリクエスト deferredResult
- 現在のリクエストの DeferredResultExceptionSE
- エラーの場合 default <T> void preProcess(NativeWebRequest request, DeferredResult<T> deferredResult) throws ExceptionSE
DeferredResult
との並行処理の開始を検出するために使用できます。DeferredResult
は、たとえば作成時または別のスレッドによってすでに設定されている可能性があります。
request
- 現在のリクエスト deferredResult
- 現在のリクエストの DeferredResultExceptionSE
- エラーの場合 default <T> void postProcess(NativeWebRequest request, DeferredResult<T> deferredResult, ObjectSE concurrentResult) throws ExceptionSE
DeferredResult.setResult(Object)
または DeferredResult.setErrorResult(Object)
を介して DeferredResult
が設定された後に呼び出され、同時に結果を処理する準備ができています。 このメソッドは、デフォルトのタイムアウト結果を受け入れるコンストラクターを使用して DeferredResult
が作成された場合、タイムアウト後に呼び出すこともできます。
request
- 現在のリクエスト deferredResult
- 現在のリクエストの DeferredResultconcurrentResult
- DeferredResult
の結果 ExceptionSE
- エラーの場合 default <T> boolean handleTimeout(NativeWebRequest request, DeferredResult<T> deferredResult) throws ExceptionSE
DeferredResult
が設定される前に非同期リクエストがタイムアウトしたときにコンテナースレッドから呼び出されます。実装は setResult
または setErrorResult
を呼び出して処理を再開できます。request
- 現在のリクエスト deferredResult
- 現在のリクエストの DeferredResult。DeferredResult
が設定されている場合、並行処理が再開され、後続のインターセプターは呼び出されません true
、他のインターセプターを呼び出さない場合は false
ExceptionSE
- エラーの場合 default <T> boolean handleError(NativeWebRequest request, DeferredResult<T> deferredResult, ThrowableSE t) throws ExceptionSE
DeferredResult
が設定される前の非同期リクエストの処理中にエラーが発生したときに、コンテナースレッドから呼び出されます。実装は setResult
または setErrorResult
を呼び出して処理を再開できます。request
- 現在のリクエスト deferredResult
- 現在のリクエストの DeferredResult。DeferredResult
が設定されている場合、並行処理が再開され、後続のインターセプターは呼び出されません t
- リクエスト処理中に発生したエラー true
、他のインターセプターをバイパスして呼び出さない場合は false
ExceptionSE
- エラーの場合 default <T> void afterCompletion(NativeWebRequest request, DeferredResult<T> deferredResult) throws ExceptionSE
DeferredResult
インスタンスが使用できなくなったことを検出できます。request
- 現在のリクエスト deferredResult
- 現在のリクエストの DeferredResultExceptionSE
- エラーの場合