接口 DeferredResultProcessingInterceptor

所有已知实现类:
TimeoutAsyncProcessingInterceptor

public interface DeferredResultProcessingInterceptor
Intercepts concurrent request handling, where the concurrent result is obtained by waiting for a DeferredResult to be set from a thread chosen by the application (e.g. in response to some external event).

A DeferredResultProcessingInterceptor is invoked before the start of async processing, after the DeferredResult is set as well as on timeout/error, or after completing for any reason including a timeout or network error.

As a general rule exceptions raised by interceptor methods will cause async processing to resume by dispatching back to the container and using the Exception instance as the concurrent result. Such exceptions will then be processed through the HandlerExceptionHandler mechanism.

The handleTimeout method can set the DeferredResult in order to resume processing.

从以下版本开始:
4.0
作者:
Rossen Stoyanchev, Rob Winch
  • 方法详细资料

    • beforeConcurrentHandling

      default <T> void beforeConcurrentHandling(RequestContext request, DeferredResult<T> deferredResult) throws Exception
      Invoked immediately before the start of concurrent handling, in the same thread that started it. This method may be used to capture state just prior to the start of concurrent processing with the given DeferredResult.
      参数:
      request - the current request
      deferredResult - the DeferredResult for the current request
      抛出:
      Exception - in case of errors
    • preProcess

      default <T> void preProcess(RequestContext request, DeferredResult<T> deferredResult) throws Exception
      Invoked immediately after the start of concurrent handling, in the same thread that started it. This method may be used to detect the start of concurrent processing with the given DeferredResult.

      The DeferredResult may have already been set, for example at the time of its creation or by another thread.

      参数:
      request - the current request
      deferredResult - the DeferredResult for the current request
      抛出:
      Exception - in case of errors
    • postProcess

      default <T> void postProcess(RequestContext request, DeferredResult<T> deferredResult, Object concurrentResult) throws Exception
      Invoked after a 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.

      参数:
      request - the current request
      deferredResult - the DeferredResult for the current request
      concurrentResult - the result to which the DeferredResult
      抛出:
      Exception - in case of errors
    • handleTimeout

      default <T> boolean handleTimeout(RequestContext request, DeferredResult<T> deferredResult) throws Exception
      Invoked from a container thread when an async request times out before the DeferredResult has been set. Implementations may invoke setResult or setErrorResult to resume processing.
      参数:
      request - the current request
      deferredResult - the DeferredResult for the current request; if the DeferredResult is set, then concurrent processing is resumed and subsequent interceptors are not invoked
      返回:
      true if processing should continue, or false if other interceptors should not be invoked
      抛出:
      Exception - in case of errors
    • handleError

      default <T> boolean handleError(RequestContext request, DeferredResult<T> deferredResult, Throwable t) throws Exception
      Invoked from a container thread when an error occurred while processing an async request before the DeferredResult has been set. Implementations may invoke setResult or setErrorResult to resume processing.
      参数:
      request - the current request
      deferredResult - the DeferredResult for the current request; if the DeferredResult is set, then concurrent processing is resumed and subsequent interceptors are not invoked
      t - the error that occurred while request processing
      返回:
      true if error handling should continue, or false if other interceptors should by bypassed and not be invoked
      抛出:
      Exception - in case of errors
    • afterCompletion

      default <T> void afterCompletion(RequestContext request, DeferredResult<T> deferredResult) throws Exception
      Invoked from a container thread when an async request completed for any reason including timeout and network error. This method is useful for detecting that a DeferredResult instance is no longer usable.
      参数:
      request - the current request
      deferredResult - the DeferredResult for the current request
      抛出:
      Exception - in case of errors