Interface DeferredResultProcessingInterceptor

Intercepts concurrent request handling, where the concurrent result is
obtained by waiting for a DeferredResult to be set from a thread
chosen by the application (e.g. in response to some external event).

A DeferredResultProcessingInterceptor is invoked before the start
of async processing, after the DeferredResult is set as well as on
timeout/error, 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 handleTimeout
method can set the DeferredResult in order to resume processing.

Method Detail

beforeConcurrentHandling

Invoked immediately before the start of concurrent handling, in the same
thread that started it. This method may be used to capture state just prior
to the start of concurrent processing with the given DeferredResult.

handleError

Invoked from a container thread when an error occurred while processing an async request
before the DeferredResult has been set. Implementations may invoke
setResult or
setErrorResult to resume processing.

Parameters:

request - the current request

deferredResult - the DeferredResult for the current request; if the
DeferredResult is set, then concurrent processing is resumed and
subsequent interceptors are not invoked

t - the error that occurred while request processing

Returns:

true if error handling should continue, or false if
other interceptors should by bypassed and not be invoked

afterCompletion

Invoked from a container thread when an async request completed for any
reason including timeout and network error. This method is useful for
detecting that a DeferredResult instance is no longer usable.