class AsyncRequestInterceptor extends java.lang.Object implements CallableProcessingInterceptor, DeferredResultProcessingInterceptor
Modifier and Type | Field and Description |
---|---|
private EntityManagerFactory |
emFactory |
private EntityManagerHolder |
emHolder |
private boolean |
errorInProgress |
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)
Invoked from a container thread when async processing completes for any
reason including timeout or network error.
|
<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.
|
void |
bindEntityManager() |
private void |
closeEntityManager() |
<T> java.lang.Object |
handleError(NativeWebRequest request,
java.util.concurrent.Callable<T> task,
java.lang.Throwable t)
Invoked from a container thread when an error occurred while processing
the async request before the
Callable task completes. |
<T> boolean |
handleError(NativeWebRequest request,
DeferredResult<T> deferredResult,
java.lang.Throwable t)
Invoked from a container thread when an error occurred while processing an async request
before the
DeferredResult has been set. |
<T> java.lang.Object |
handleTimeout(NativeWebRequest request,
java.util.concurrent.Callable<T> task)
Invoked from a container thread when the async request times out before
the
Callable task completes. |
<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)
Invoked after the
Callable has produced a result in the
async thread in which the Callable is executed. |
<T> void |
preProcess(NativeWebRequest request,
java.util.concurrent.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 . |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
beforeConcurrentHandling
beforeConcurrentHandling, postProcess, preProcess
private static final Log logger
private final EntityManagerFactory emFactory
private final EntityManagerHolder emHolder
private volatile boolean timeoutInProgress
private volatile boolean errorInProgress
public AsyncRequestInterceptor(EntityManagerFactory emFactory, EntityManagerHolder emHolder)
public <T> void preProcess(NativeWebRequest request, java.util.concurrent.Callable<T> task)
CallableProcessingInterceptor
Callable
is executed and before the
actual invocation of the Callable
.
The default implementation is empty.
preProcess
in interface CallableProcessingInterceptor
request
- the current requesttask
- the task for the current async requestpublic void bindEntityManager()
public <T> void postProcess(NativeWebRequest request, java.util.concurrent.Callable<T> task, java.lang.Object concurrentResult)
CallableProcessingInterceptor
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.
The default implementation is empty.
postProcess
in interface CallableProcessingInterceptor
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)
CallableProcessingInterceptor
Callable
task completes. Implementations may return a value,
including an Exception
, to use instead of the value the
Callable
did not return in time.
The default implementation always returns CallableProcessingInterceptor.RESULT_NONE
.
handleTimeout
in interface CallableProcessingInterceptor
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> java.lang.Object handleError(NativeWebRequest request, java.util.concurrent.Callable<T> task, java.lang.Throwable t)
CallableProcessingInterceptor
Callable
task completes.
Implementations may return a value, including an Exception
, to
use instead of the value the Callable
did not return in time.
The default implementation always returns CallableProcessingInterceptor.RESULT_NONE
.
handleError
in interface CallableProcessingInterceptor
request
- the current requesttask
- the task for the current async requestt
- the error that occurred while request processingCallableProcessingInterceptor.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
CallableProcessingInterceptor
The default implementation is empty.
afterCompletion
in interface CallableProcessingInterceptor
request
- the current requesttask
- the task for the current async requestjava.lang.Exception
- in case of errorsprivate void closeEntityManager()
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> boolean handleError(NativeWebRequest request, DeferredResult<T> deferredResult, java.lang.Throwable t)
DeferredResultProcessingInterceptor
DeferredResult
has been set. Implementations may invoke
setResult
or
setErrorResult
to resume processing.handleError
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 invokedt
- the error that occurred while request processingtrue
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