public interface CallableProcessingInterceptor
AsyncTaskExecutor
を使用して Callable
SE を実行することで同時結果が取得される、同時リクエスト処理をインターセプトします。CallableProcessingInterceptor
は、非同期スレッドでの Callable
タスクの呼び出しの前後、およびコンテナースレッドからのタイムアウト / エラー時に、またはタイムアウトやネットワークエラーを含む何らかの理由で完了した後に呼び出されます。
原則として、インターセプターメソッドによって例外が発生すると、コンテナーにディスパッチして例外インスタンスを同時結果として使用することにより、非同期処理が再開されます。このような例外は、HandlerExceptionResolver
メカニズムを介して処理されます。
handleTimeout
メソッドは、処理の再開に使用する値を選択できます。
修飾子と型 | フィールドと説明 |
---|---|
static ObjectSE | RESPONSE_HANDLED レスポンスがこのインターセプターによって結果なしで処理され、それ以上インターセプターが呼び出されないことを示す定数。 |
static ObjectSE | RESULT_NONE このインターセプターによって結果が決定されておらず、後続のインターセプターにチャンスを与えることを示す定数。 |
修飾子と型 | メソッドと説明 |
---|---|
default <T> void | afterCompletion(NativeWebRequest request, CallableSE<T> task) タイムアウトやネットワークエラーなどの何らかの理由で非同期処理が完了したときに、コンテナースレッドから呼び出されます。 |
default <T> void | beforeConcurrentHandling(NativeWebRequest request, CallableSE<T> task) Callable が並行処理のためにサブミットされた元のスレッドで並行処理の開始前に呼び出されます。 |
default <T> ObjectSE | handleError(NativeWebRequest request, CallableSE<T> task, ThrowableSE t) Callable タスクが完了する前に非同期リクエストを処理しているときにエラーが発生したときに、コンテナースレッドから呼び出されます。 |
default <T> ObjectSE | handleTimeout(NativeWebRequest request, CallableSE<T> task) Callable タスクが完了する前に非同期リクエストがタイムアウトしたときに、コンテナースレッドから呼び出されます。 |
default <T> void | postProcess(NativeWebRequest request, CallableSE<T> task, ObjectSE concurrentResult) Callable が Callable が実行される非同期スレッドで結果を生成した後に呼び出されます。 |
default <T> void | preProcess(NativeWebRequest request, CallableSE<T> task) Callable が実行される非同期スレッドで同時取り扱いを開始した後と Callable の実際の呼び出しの前に呼び出されます。 |
static final ObjectSE RESULT_NONE
static final ObjectSE RESPONSE_HANDLED
default <T> void beforeConcurrentHandling(NativeWebRequest request, CallableSE<T> task) throws ExceptionSE
Callable
が並行処理のためにサブミットされた元のスレッドで並行処理の開始前に呼び出されます。 これは、Callable
SE を呼び出す直前に現在のスレッドの状態をキャプチャーできます。状態がキャプチャーされると、preProcess(NativeWebRequest, Callable)
の新しい Thread
SE に転送できます。Spring Security の SecurityContextHolder の状態をキャプチャーし、それを新しいスレッドに移行することは、これが役立つ場所の具体例です。
デフォルトの実装は空です。
request
- 現在のリクエスト task
- 現在の非同期リクエストのタスク ExceptionSE
- エラーの場合 default <T> void preProcess(NativeWebRequest request, CallableSE<T> task) throws ExceptionSE
Callable
が実行される非同期スレッドで同時取り扱いを開始した後と Callable
の実際の呼び出しの前に呼び出されます。デフォルトの実装は空です。
request
- 現在のリクエスト task
- 現在の非同期リクエストのタスク ExceptionSE
- エラーの場合 default <T> void postProcess(NativeWebRequest request, CallableSE<T> task, ObjectSE concurrentResult) throws ExceptionSE
Callable
が Callable
が実行される非同期スレッドで結果を生成した後に呼び出されます。このメソッドは、Callable
が処理を終了するタイミングに応じて、afterTimeout
または afterCompletion
よりも後に呼び出される場合があります。デフォルトの実装は空です。
request
- 現在のリクエスト task
- 現在の非同期リクエストのタスク concurrentResult
- 並行処理の結果。Callable
が例外を発生させた場合は Throwable
SE になる可能性がある ExceptionSE
- エラーの場合 default <T> ObjectSE handleTimeout(NativeWebRequest request, CallableSE<T> task) throws ExceptionSE
Callable
タスクが完了する前に非同期リクエストがタイムアウトしたときに、コンテナースレッドから呼び出されます。実装は、Callable
SE が時間内に返さなかった値の代わりに使用する Exception
SE を含む値を返す場合があります。 デフォルトの実装は常に RESULT_NONE
を返します。
request
- 現在のリクエスト task
- 現在の非同期リクエストのタスク RESULT_NONE
または RESPONSE_HANDLED
以外の場合、並行処理が再開され、後続のインターセプターは呼び出されません ExceptionSE
- エラーの場合 default <T> ObjectSE handleError(NativeWebRequest request, CallableSE<T> task, ThrowableSE t) throws ExceptionSE
Callable
タスクが完了する前に非同期リクエストを処理しているときにエラーが発生したときに、コンテナースレッドから呼び出されます。実装は、Callable
SE が時間内に返さなかった値の代わりに使用する Exception
SE を含む値を返す場合があります。 デフォルトの実装は常に RESULT_NONE
を返します。
request
- 現在のリクエスト task
- 現在の非同期リクエストのタスク t
- リクエスト処理中に発生したエラー RESULT_NONE
または RESPONSE_HANDLED
以外の場合、並行処理が再開され、後続のインターセプターは呼び出されません ExceptionSE
- エラーの場合 default <T> void afterCompletion(NativeWebRequest request, CallableSE<T> task) throws ExceptionSE
デフォルトの実装は空です。
request
- 現在のリクエスト task
- 現在の非同期リクエストのタスク ExceptionSE
- エラーの場合