class AsyncRequestInterceptor extends CallableProcessingInterceptorAdapter implements DeferredResultProcessingInterceptor
Modifier and Type | Field and Description |
---|---|
private EntityManagerFactory |
emFactory |
private EntityManagerHolder |
emHolder |
private static Log |
logger |
private boolean |
timeoutInProgress |
RESPONSE_HANDLED, RESULT_NONE
Constructor and Description |
---|
AsyncRequestInterceptor(EntityManagerFactory emFactory,
EntityManagerHolder emHolder) |
Modifier and Type | Method and Description |
---|---|
<T> void |
afterCompletion(NativeWebRequest request,
java.util.concurrent.Callable<T> task)
This implementation is empty.
|
<T> void |
afterCompletion(NativeWebRequest request,
DeferredResult<T> deferredResult)
Invoked from a container thread when an async request completed for any
reason including timeout and network error.
|
<T> void |
beforeConcurrentHandling(NativeWebRequest request,
DeferredResult<T> deferredResult)
Invoked immediately before the start of concurrent handling, in the same
thread that started it.
|
void |
bindSession() |
private void |
closeAfterTimeout() |
<T> java.lang.Object |
handleTimeout(NativeWebRequest request,
java.util.concurrent.Callable<T> task)
This implementation always returns
RESULT_NONE . |
<T> boolean |
handleTimeout(NativeWebRequest request,
DeferredResult<T> deferredResult)
Invoked from a container thread when an async request times out before
the
DeferredResult has been set. |
<T> void |
postProcess(NativeWebRequest request,
java.util.concurrent.Callable<T> task,
java.lang.Object concurrentResult)
This implementation is empty.
|
<T> void |
postProcess(NativeWebRequest request,
DeferredResult<T> deferredResult,
java.lang.Object result)
Invoked after a
DeferredResult has been set, via
DeferredResult.setResult(Object) or
DeferredResult.setErrorResult(Object) , and is also ready to
handle the concurrent result. |
<T> void |
preProcess(NativeWebRequest request,
java.util.concurrent.Callable<T> task)
This implementation is empty.
|
<T> void |
preProcess(NativeWebRequest request,
DeferredResult<T> deferredResult)
Invoked immediately after the start of concurrent handling, in the same
thread that started it.
|
beforeConcurrentHandling
private static final Log logger
private final EntityManagerFactory emFactory
private final EntityManagerHolder emHolder
private volatile boolean timeoutInProgress
public AsyncRequestInterceptor(EntityManagerFactory emFactory, EntityManagerHolder emHolder)
public <T> void preProcess(NativeWebRequest request, java.util.concurrent.Callable<T> task)
CallableProcessingInterceptorAdapter
preProcess
in interface CallableProcessingInterceptor
preProcess
in class CallableProcessingInterceptorAdapter
request
- the current requesttask
- the task for the current async requestpublic void bindSession()
public <T> void postProcess(NativeWebRequest request, java.util.concurrent.Callable<T> task, java.lang.Object concurrentResult)
CallableProcessingInterceptorAdapter
postProcess
in interface CallableProcessingInterceptor
postProcess
in class CallableProcessingInterceptorAdapter
request
- the current requesttask
- the task for the current async requestconcurrentResult
- the result of concurrent processing, which could
be a Throwable
if the Callable
raised an exceptionpublic <T> java.lang.Object handleTimeout(NativeWebRequest request, java.util.concurrent.Callable<T> task)
CallableProcessingInterceptorAdapter
RESULT_NONE
.handleTimeout
in interface CallableProcessingInterceptor
handleTimeout
in class CallableProcessingInterceptorAdapter
request
- the current requesttask
- the task for the current async requestCallableProcessingInterceptor.RESULT_NONE
or CallableProcessingInterceptor.RESPONSE_HANDLED
, concurrent processing
is resumed and subsequent interceptors are not invokedpublic <T> void afterCompletion(NativeWebRequest request, java.util.concurrent.Callable<T> task) throws java.lang.Exception
CallableProcessingInterceptorAdapter
afterCompletion
in interface CallableProcessingInterceptor
afterCompletion
in class CallableProcessingInterceptorAdapter
request
- the current requesttask
- the task for the current async requestjava.lang.Exception
- in case of errorsprivate void closeAfterTimeout()
public <T> void beforeConcurrentHandling(NativeWebRequest request, DeferredResult<T> deferredResult)
DeferredResultProcessingInterceptor
DeferredResult
.beforeConcurrentHandling
in interface DeferredResultProcessingInterceptor
request
- the current requestdeferredResult
- the DeferredResult for the current requestpublic <T> void preProcess(NativeWebRequest request, DeferredResult<T> deferredResult)
DeferredResultProcessingInterceptor
DeferredResult
.
The DeferredResult
may have already been set, for example at
the time of its creation or by another thread.
preProcess
in interface DeferredResultProcessingInterceptor
request
- the current requestdeferredResult
- the DeferredResult for the current requestpublic <T> void postProcess(NativeWebRequest request, DeferredResult<T> deferredResult, java.lang.Object result)
DeferredResultProcessingInterceptor
DeferredResult
has been set, via
DeferredResult.setResult(Object)
or
DeferredResult.setErrorResult(Object)
, and is also ready to
handle the concurrent result.
This method may also be invoked after a timeout when the
DeferredResult
was created with a constructor accepting a default
timeout result.
postProcess
in interface DeferredResultProcessingInterceptor
request
- the current requestdeferredResult
- the DeferredResult for the current requestresult
- the result to which the DeferredResult
public <T> boolean handleTimeout(NativeWebRequest request, DeferredResult<T> deferredResult)
DeferredResultProcessingInterceptor
DeferredResult
has been set. Implementations may invoke
setResult
or
setErrorResult
to resume processing.handleTimeout
in interface DeferredResultProcessingInterceptor
request
- the current requestdeferredResult
- the DeferredResult for the current request; if the
DeferredResult
is set, then concurrent processing is resumed and
subsequent interceptors are not invokedtrue
if processing should continue, or false
if
other interceptors should not be invokedpublic <T> void afterCompletion(NativeWebRequest request, DeferredResult<T> deferredResult)
DeferredResultProcessingInterceptor
DeferredResult
instance is no longer usable.afterCompletion
in interface DeferredResultProcessingInterceptor
request
- the current requestdeferredResult
- the DeferredResult for the current request