@ -15,6 +15,7 @@
@@ -15,6 +15,7 @@
* /
package org.springframework.web.context.request.async ;
import java.util.PriorityQueue ;
import java.util.concurrent.Callable ;
import org.apache.commons.logging.Log ;
@ -28,10 +29,24 @@ import org.springframework.web.context.request.NativeWebRequest;
@@ -28,10 +29,24 @@ import org.springframework.web.context.request.NativeWebRequest;
* concurrently on behalf of the application , with a { @code DeferredResult } the
* application can produce the result from a thread of its choice .
*
* < p > Subclasses can extend this class to easily associate additional data or
* behavior with the { @link DeferredResult } . For example , one might want to
* associate the user used to create the { @link DeferredResult } by extending the
* class and adding an addition 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 .
*
* < p > 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 a { @link Comparable } so that when the
* { @link DeferredResult } is added to a { @link PriorityQueue } it is handled in
* the correct order .
*
* @author Rossen Stoyanchev
* @author Rob Winch
* @since 3 . 2
* /
public final class DeferredResult < T > {
public class DeferredResult < T > {
private static final Log logger = LogFactory . getLog ( DeferredResult . class ) ;
@ -88,14 +103,14 @@ public final class DeferredResult<T> {
@@ -88,14 +103,14 @@ public final class DeferredResult<T> {
* timeout result was provided to the constructor . The request may also
* expire due to a timeout or network error .
* /
public boolean isSetOrExpired ( ) {
public final boolean isSetOrExpired ( ) {
return ( ( this . result ! = RESULT_NONE ) | | this . expired ) ;
}
/ * *
* Return the configured timeout value in milliseconds .
* /
Long getTimeoutValue ( ) {
final Long getTimeoutValue ( ) {
return this . timeout ;
}
@ -126,7 +141,7 @@ public final class DeferredResult<T> {
@@ -126,7 +141,7 @@ public final class DeferredResult<T> {
* @param resultHandler the handler
* @see { @link DeferredResultProcessingInterceptor }
* /
public void setResultHandler ( DeferredResultHandler resultHandler ) {
public final void setResultHandler ( DeferredResultHandler resultHandler ) {
Assert . notNull ( resultHandler , "DeferredResultHandler is required" ) ;
synchronized ( this ) {
this . resultHandler = resultHandler ;
@ -179,7 +194,7 @@ public final class DeferredResult<T> {
@@ -179,7 +194,7 @@ public final class DeferredResult<T> {
return setResultInternal ( result ) ;
}
DeferredResultProcessingInterceptor getInterceptor ( ) {
final DeferredResultProcessingInterceptor getInterceptor ( ) {
return new DeferredResultProcessingInterceptorAdapter ( ) {
@Override