A new instance of AsyncResponse may be injected into a
resource or sub-resource method parameter using
the @Suspended annotation.
Following example demonstrates the use of the AsyncResponse for asynchronous
HTTP request processing:
@Path("/messages/next")
public class MessagingResource {
private static final BlockingQueue<AsyncResponse> suspended =
new ArrayBlockingQueue<AsyncResponse>(5);
@GET
public void readMessage(@Suspended AsyncResponse ar) throws InterruptedException {
suspended.put(ar);
}
@POST
public String postMessage(final String message) throws InterruptedException {
final AsyncResponse ar = suspended.take();
ar.resume(message); // resumes the processing of one GET request
return "Message sent";
}
}
If the asynchronous response was suspended with a positive timeout value, and has not been explicitly resumed before the timeout has expired, the processing will be resumed once the specified timeout threshold is reached, provided a positive timeout value was set on the response.
By default a timed-out asynchronous response is resumed with a javax.ws.rs.WebApplicationException
that has HTTP 503 (Service unavailable)
error response status code set. This default behavior may be overridden by
setting a custom time-out handler.
| Modifier and Type | Field and Description |
|---|---|
| public static final long | NO_TIMEOUT
Constant specifying no suspend timeout value. |
| Modifier and Type | Method and Description |
|---|---|
| public boolean | |
| public boolean | cancel(int
a decimal integer number of seconds after the response is sent to the client that
indicates how long the service is expected to be unavailable to the requesting
client. retryAfter)Cancel the suspended request processing. |
| public boolean | |
| public boolean | Returns: true if this task was canceled before completion.Check if the asynchronous response instance has been cancelled. |
| public boolean | Returns: true if this execution context has finished processing.Check if the processing of a request this asynchronous response instance belongs to has finished. |
| public boolean | Returns: true if this asynchronous response is in a suspend state, false
otherwise.Check if the asynchronous response instance is in a suspended state. |
| public Collection | Returns: collection of registered callback interfaces. If the callback class does not implement any recognized callback interfaces, the returned collection will be empty.callback class. callback)Register an asynchronous processing lifecycle callback class to receive lifecycle events for the asynchronous response based on the implemented callback interfaces. |
| public Map | Returns: map of registered classes and the callback interfaces registered for each class. If a callback class does not implement any recognized callback interfaces, the associated collection of registered interfaces for the class will be empty.callback class. callback, Class<?>... additional callback classes. callbacks)Register asynchronous processing lifecycle callback classes to receive lifecycle events for the asynchronous response based on the implemented callback interfaces. |
| public Collection | Returns: collection of registered callback interfaces. If the callback class does not implement any recognized callback interfaces, the returned collection will be empty.callback instance implementing one or more of the recognized callback
interfaces. callback)Register an asynchronous processing lifecycle callback instance to receive lifecycle events for the asynchronous response based on the implemented callback interfaces. |
| public Map | Returns: map of registered classes and the callback interfaces registered for each class. If a callback class does not implement any recognized callback interfaces, the associated collection of registered interfaces for the class will be empty.callback instance. callback, Object... additional callback instances. callbacks)Register an asynchronous processing lifecycle callback instances to receive lifecycle events for the asynchronous response based on the implemented callback interfaces. |
| public boolean | |
| public boolean | |
| public boolean | Returns: true if the suspend time out has been set, returns false in case
the request processing is not in the suspended state.suspend timeout value in the give time time, TimeUnit unit. Value lower
or equal to 0 causes the context to suspend indefinitely.suspend timeout value time unit. unit)Set/update the suspend timeout. |
| public void | setTimeoutHandler(TimeoutHandler
response time-out handler. handler)Set/replace a time-out handler for the suspended asynchronous response. |
| NO_TIMEOUT | back to summary |
|---|---|
| public static final long NO_TIMEOUT Constant specifying no suspend timeout value. | |
| cancel | back to summary |
|---|---|
| public boolean cancel() Cancel the suspended request processing.
When a request processing is cancelled using this method, the JAX-RS implementation
MUST indicate to the client that the request processing has been cancelled by sending
back a
Invoking a
| |
| cancel | back to summary |
|---|---|
| public boolean cancel(int retryAfter) Cancel the suspended request processing.
When a request processing is cancelled using this method, the JAX-RS implementation
MUST indicate to the client that the request processing has been cancelled by sending
back a
Invoking a
| |
| cancel | back to summary |
|---|---|
| public boolean cancel(Date retryAfter) Cancel the suspended request processing.
When a request processing is cancelled using this method, the JAX-RS implementation
MUST indicate to the client that the request processing has been cancelled by sending
back a
Invoking a
| |
| isCancelled | back to summary |
|---|---|
| public boolean isCancelled() Check if the asynchronous response instance has been cancelled.
Method returns
| |
| isDone | back to summary |
|---|---|
| public boolean isDone() Check if the processing of a request this asynchronous response instance belongs to
has finished.
Method returns
The request processing may be finished due to a normal termination, a suspend timeout, or
cancellation -- in all of these cases, this method will return
| |
| isSuspended | back to summary |
|---|---|
| public boolean isSuspended() Check if the asynchronous response instance is in a suspended state.
Method returns
| |
| register | back to summary |
|---|---|
| public Collection Register an asynchronous processing lifecycle callback class to receive lifecycle events for the asynchronous response based on the implemented callback interfaces.
| |
| register | back to summary |
|---|---|
| public Map Register asynchronous processing lifecycle callback classes to receive lifecycle events for the asynchronous response based on the implemented callback interfaces.
| |
| register | back to summary |
|---|---|
| public Collection Register an asynchronous processing lifecycle callback instance to receive lifecycle events for the asynchronous response based on the implemented callback interfaces.
| |
| register | back to summary |
|---|---|
| public Map Register an asynchronous processing lifecycle callback instances to receive lifecycle events for the asynchronous response based on the implemented callback interfaces.
| |
| resume | back to summary |
|---|---|
| public boolean resume(Object response) Resume the suspended request processing using the provided response data.
The provided response data can be of any Java type that can be
returned from a
The asynchronous response must be still in a By executing this method, the request is guaranteed to complete either successfully or with an error. The data processing by the JAX-RS runtime follows the same path as it would for the response data returned synchronously by a JAX-RS resource, except that unmapped exceptions are not re-thrown by JAX-RS runtime to be handled by a hosting I/O container. Instead, any unmapped exceptions are propagated to the hosting I/O container via a container-specific callback mechanism. Depending on the container implementation, propagated unmapped exceptions typically result in an error status being sent to the client and/or the connection being closed.
| |
| resume | back to summary |
|---|---|
| public boolean resume(Throwable response) Resume the suspended request processing using the provided throwable.
For the provided throwable same rules apply as for an exception thrown
by a By executing this method, the request is guaranteed to complete either successfully or with an error. The throwable processing by the JAX-RS runtime follows the same path as it would for the response data returned synchronously by a JAX-RS resource, except that unmapped exceptions are not re-thrown by JAX-RS runtime to be handled by a hosting I/O container. Instead, any unmapped exceptions are propagated to the hosting I/O container via a container-specific callback mechanism. Depending on the container implementation, propagated unmapped exceptions typically result in an error status being sent to the client and/or the connection being closed.
| |
| setTimeout | back to summary |
|---|---|
| public boolean setTimeout(long time, TimeUnit unit) Set/update the suspend timeout.
The new suspend timeout values override any timeout value previously specified.
The asynchronous response must be still in a
| |
| setTimeoutHandler | back to summary |
|---|---|
| public void setTimeoutHandler(TimeoutHandler handler) Set/replace a time-out handler for the suspended asynchronous response. The time-out handler will be invoked when the suspend period of this asynchronous response times out. The job of the time-out handler is to resolve the time-out situation by either
Note that in case the response is suspended
| |