T - the result typepublic class DeferredResult<T> extends Object
DeferredResult provides an alternative to using a Callable for
 asynchronous request processing. While a Callable is executed concurrently
 on behalf of the application, with a DeferredResult the application can
 produce the result from a thread of its choice.
 Subclasses can extend this class to easily associate additional data or behavior
 with the DeferredResult. For example, one might want to associate the user
 used to create the DeferredResult by extending the class and adding an
 additional property for the user. In this way, the user could easily be accessed
 later without the need to use a data structure to do the mapping.
 
An example of associating additional behavior to this class might be realized
 by extending the class to implement an additional interface. For example, one
 might want to implement Comparable so that when the DeferredResult
 is added to a PriorityQueue it is handled in the correct order.
| Modifier and Type | Class and Description | 
|---|---|
| static interface  | DeferredResult.DeferredResultHandlerHandles a DeferredResult value when set. | 
| Constructor and Description | 
|---|
| DeferredResult()Create a DeferredResult. | 
| DeferredResult(Long timeoutValue)Create a DeferredResult with a custom timeout value. | 
| DeferredResult(Long timeoutValue,
              Object timeoutResult)Create a DeferredResult with a timeout value and a default result to use
 in case of timeout. | 
| DeferredResult(Long timeoutValue,
              Supplier<?> timeoutResult)Variant of  DeferredResult(Long, Object)that accepts a dynamic
 fallback value based on aSupplier. | 
| Modifier and Type | Method and Description | 
|---|---|
| Object | getResult()Return the result, or  nullif the result wasn't set. | 
| boolean | hasResult()Return  trueif the DeferredResult has been set. | 
| boolean | isSetOrExpired()Return  trueif this DeferredResult is no longer usable either
 because it was previously set or because the underlying request expired. | 
| void | onCompletion(Runnable callback)Register code to invoke when the async request completes. | 
| void | onError(Consumer<Throwable> callback)Register code to invoke when an error occurred during the async request. | 
| void | onTimeout(Runnable callback)Register code to invoke when the async request times out. | 
| boolean | setErrorResult(Object result)Set an error value for the  DeferredResultand handle it. | 
| boolean | setResult(T result)Set the value for the DeferredResult and handle it. | 
| void | setResultHandler(DeferredResult.DeferredResultHandler resultHandler)Provide a handler to use to handle the result value. | 
public DeferredResult()
public DeferredResult(Long timeoutValue)
By default not set in which case the default configured in the MVC Java Config or the MVC namespace is used, or if that's not set, then the timeout depends on the default of the underlying server.
timeoutValue - timeout value in millisecondspublic DeferredResult(@Nullable Long timeoutValue, Object timeoutResult)
timeoutValue - timeout value in milliseconds (ignored if null)timeoutResult - the result to usepublic DeferredResult(@Nullable Long timeoutValue, Supplier<?> timeoutResult)
DeferredResult(Long, Object) that accepts a dynamic
 fallback value based on a Supplier.timeoutValue - timeout value in milliseconds (ignored if null)timeoutResult - the result supplier to usepublic final boolean isSetOrExpired()
true if this DeferredResult is no longer usable either
 because it was previously set or because the underlying request expired.
 The result may have been set with a call to setResult(Object),
 or setErrorResult(Object), or as a result of a timeout, if a
 timeout result was provided to the constructor. The request may also
 expire due to a timeout or network error.
public boolean hasResult()
true if the DeferredResult has been set.@Nullable public Object getResult()
null if the result wasn't set. Since the result
 can also be null, it is recommended to use hasResult() first
 to check if there is a result prior to calling this method.public void onTimeout(Runnable callback)
This method is called from a container thread when an async request
 times out before the DeferredResult has been populated.
 It may invoke setResult or
 setErrorResult to resume processing.
public void onError(Consumer<Throwable> callback)
This method is called from a container thread when an error occurs
 while processing an async request before the DeferredResult has
 been populated. It may invoke setResult
 or setErrorResult to resume
 processing.
public void onCompletion(Runnable callback)
This method is called from a container thread when an async request
 completed for any reason including timeout and network error. This is useful
 for detecting that a DeferredResult instance is no longer usable.
public final void setResultHandler(DeferredResult.DeferredResultHandler resultHandler)
resultHandler - the handlerDeferredResultProcessingInterceptorpublic boolean setResult(T result)
result - the value to settrue if the result was set and passed on for handling;
 false if the result was already set or the async request expiredisSetOrExpired()public boolean setErrorResult(Object result)
DeferredResult and handle it.
 The value may be an Exception or Throwable in which case
 it will be processed as if a handler raised the exception.result - the error result valuetrue if the result was set to the error value and passed on
 for handling; false if the result was already set or the async
 request expiredisSetOrExpired()