public interface CallableProcessingInterceptor
Callable
on behalf of the application with
an AsyncTaskExecutor
.
A CallableProcessingInterceptor
is invoked before and after the
invocation of the Callable
task in the asynchronous thread, as well
as on timeout from a container thread, or after completing for any reason
including a timeout or network error.
As a general rule exceptions raised by interceptor methods will cause
async processing to resume by dispatching back to the container and using
the Exception instance as the concurrent result. Such exceptions will then
be processed through the HandlerExceptionResolver
mechanism.
The afterTimeout
method
can select a value to be used to resume processing.
Modifier and Type | Field and Description |
---|---|
static Object |
RESPONSE_HANDLED |
static Object |
RESULT_NONE |
Modifier and Type | Method and Description |
---|---|
<T> void |
afterCompletion(NativeWebRequest request,
Callable<T> task)
Invoked from a container thread when async processing completes for any
reason including timeout or network error.
|
<T> void |
beforeConcurrentHandling(NativeWebRequest request,
Callable<T> task)
Invoked before the start of concurrent handling in the original
thread in which the
Callable is submitted for concurrent handling. |
<T> Object |
handleTimeout(NativeWebRequest request,
Callable<T> task)
Invoked from a container thread when the async request times out before
the
Callable task completes. |
<T> void |
postProcess(NativeWebRequest request,
Callable<T> task,
Object concurrentResult)
Invoked after the
Callable has produced a result in the
async thread in which the Callable is executed. |
<T> void |
preProcess(NativeWebRequest request,
Callable<T> task)
Invoked after the start of concurrent handling in the async
thread in which the
Callable is executed and before the
actual invocation of the Callable . |
static final Object RESULT_NONE
static final Object RESPONSE_HANDLED
<T> void beforeConcurrentHandling(NativeWebRequest request, Callable<T> task) throws Exception
Callable
is submitted for concurrent handling.
This is useful for capturing the state of the current thread just prior to
invoking the Callable
. Once the state is captured, it can then be
transfered to the new Thread
in
preProcess(NativeWebRequest, Callable)
. Capturing the state of
Spring Security's SecurityContextHolder and migrating it to the new Thread
is a concrete example of where this is useful.
request
- the current requesttask
- the task for the current async requestException
- in case of errors<T> void preProcess(NativeWebRequest request, Callable<T> task) throws Exception
Callable
is executed and before the
actual invocation of the Callable
.request
- the current requesttask
- the task for the current async requestException
- in case of errors<T> void postProcess(NativeWebRequest request, Callable<T> task, Object concurrentResult) throws Exception
Callable
has produced a result in the
async thread in which the Callable
is executed. This method may
be invoked later than afterTimeout
or afterCompletion
depending on when the Callable
finishes processing.<T> Object handleTimeout(NativeWebRequest request, Callable<T> task) throws Exception
Callable
task completes. Implementations may return a value,
including an Exception
, to use instead of the value the
Callable
did not return in time.request
- the current requesttask
- the task for the current async requestRESULT_NONE
or RESPONSE_HANDLED
, concurrent processing
is resumed and subsequent interceptors are not invokedException
- in case of errors<T> void afterCompletion(NativeWebRequest request, Callable<T> task) throws Exception
request
- the current requesttask
- the task for the current async requestException
- in case of errors