Interface CallableProcessingInterceptor
- All Known Implementing Classes:
CallableProcessingInterceptorAdapter,TimeoutCallableProcessingInterceptor
public interface CallableProcessingInterceptor
Intercepts concurrent request handling, where the concurrent result is obtained by executing aCallableon behalf of the application with anAsyncTaskExecutor.A
CallableProcessingInterceptoris invoked before and after the invocation of theCallabletask 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
HandlerExceptionResolvermechanism.The
handleTimeoutmethod can select a value to be used to resume processing.- Since:
- 3.2
- Author:
- Rossen Stoyanchev, Rob Winch
Field Summary
Fields Modifier and Type Field Description static ObjectRESPONSE_HANDLEDConstant indicating that the response has been handled by this interceptor without a result and that no further interceptors are to be invoked.static ObjectRESULT_NONEConstant indicating that no result has been determined by this interceptor, giving subsequent interceptors a chance.
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description <T> voidafterCompletion(NativeWebRequest request, Callable<T> task)Invoked from a container thread when async processing completes for any reason including timeout or network error.<T> voidbeforeConcurrentHandling(NativeWebRequest request, Callable<T> task)Invoked before the start of concurrent handling in the original thread in which theCallableis submitted for concurrent handling.<T> ObjecthandleTimeout(NativeWebRequest request, Callable<T> task)Invoked from a container thread when the async request times out before theCallabletask completes.<T> voidpostProcess(NativeWebRequest request, Callable<T> task, Object concurrentResult)Invoked after theCallablehas produced a result in the async thread in which theCallableis executed.<T> voidpreProcess(NativeWebRequest request, Callable<T> task)Invoked after the start of concurrent handling in the async thread in which theCallableis executed and before the actual invocation of theCallable.
Field Detail
RESULT_NONE
static final Object RESULT_NONE
Constant indicating that no result has been determined by this interceptor, giving subsequent interceptors a chance.
RESPONSE_HANDLED
static final Object RESPONSE_HANDLED
Constant indicating that the response has been handled by this interceptor without a result and that no further interceptors are to be invoked.
Method Detail
beforeConcurrentHandling
<T> void beforeConcurrentHandling(NativeWebRequest request, Callable<T> task) throws Exception
Invoked before the start of concurrent handling in the original thread in which theCallableis 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 transferred to the newThreadinpreProcess(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.- Parameters:
request- the current requesttask- the task for the current async request- Throws:
Exception- in case of errors
preProcess
<T> void preProcess(NativeWebRequest request, Callable<T> task) throws Exception
Invoked after the start of concurrent handling in the async thread in which theCallableis executed and before the actual invocation of theCallable.- Parameters:
request- the current requesttask- the task for the current async request- Throws:
Exception- in case of errors
postProcess
<T> void postProcess(NativeWebRequest request, Callable<T> task, Object concurrentResult) throws Exception
Invoked after theCallablehas produced a result in the async thread in which theCallableis executed. This method may be invoked later thanafterTimeoutorafterCompletiondepending on when theCallablefinishes processing.
handleTimeout
<T> Object handleTimeout(NativeWebRequest request, Callable<T> task) throws Exception
Invoked from a container thread when the async request times out before theCallabletask completes. Implementations may return a value, including anException, to use instead of the value theCallabledid not return in time.- Parameters:
request- the current requesttask- the task for the current async request- Returns:
- a concurrent result value; if the value is anything other than
RESULT_NONEorRESPONSE_HANDLED, concurrent processing is resumed and subsequent interceptors are not invoked - Throws:
Exception- in case of errors
afterCompletion
<T> void afterCompletion(NativeWebRequest request, Callable<T> task) throws Exception
Invoked from a container thread when async processing completes for any reason including timeout or network error.- Parameters:
request- the current requesttask- the task for the current async request- Throws:
Exception- in case of errors