Merge pull request #199 from rwinch/SPR-10059
* SPR-10059: Make DeferredResult extensible
This commit is contained in:
commit
25a7136a96
|
@ -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;
|
|||
* 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> {
|
|||
* 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> {
|
|||
* @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> {
|
|||
return setResultInternal(result);
|
||||
}
|
||||
|
||||
DeferredResultProcessingInterceptor getInterceptor() {
|
||||
final DeferredResultProcessingInterceptor getInterceptor() {
|
||||
return new DeferredResultProcessingInterceptorAdapter() {
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue