Asynchronous Actions
This feature is work-in-progress, and available in 1.7.0-SNAPSHOT. Requires a Servlet3+ container.
Description
Async Actions allows handler methods to behave in an asynchronous (Servlet3) fashion. This is mostly used for performance reasons, when a Stripes Action has to can connect to external services (e.g. a web service) in a non-blocking fashion.
Usage
Async event handlers must return void
, and accept a single argument of type AsyncResponse
:
signature
public void doSomething(AsyncResponse asyncResponse);
When handling such events, Stripes will start the asynchronous cycle, and let you complete by invoking one of the asyncResponse.complete()
variants.
Examples
SimpleAsync
public class SimpleAsync implements ActionBean { public void simpleEvent(AsyncResponse asyncResponse) { // simple without really anything async... asyncResponse.complete(new ForwardResolution("/WEB-INF/stuff.jsp")); } }
ReallyAsync
public class ReallyAsync implements ActionBean { public void asyncEvent(final AsyncResponse asyncResponse) { // submit to executor service ExecutorService executor = ... ; executorService.submit(new Runnable() { @Override public void run() { // do anything in a separate thread and complete with a forward asyncResponse.complete(new ForwardResolution("/WEB-INF/stuff.jsp")); } }); } }
ReallyAsyncWithLambdas
public class ReallyAsyncWithLambdas implements ActionBean { public void asyncEventWithLambda(final AsyncResponse asyncResponse) { // submit to executor service ExecutorService executor = ... ; executorService.submit(() -> { // do anything in a separate thread and complete with a forward asyncResponse.complete(new ForwardResolution("/WEB-INF/stuff.jsp")); }); } }
NonBlockingClient
public class WithNonBlockingClient implements ActionBean { public void nonBlocking(final AsyncResponse asyncResponse) { // call non blocking http client httpClient.get('/foo/bar', httpResponse -> { // client completed : use http response httpResponse.xyz(); // and complete... asyncResponse.complete(new ForwardResolution("/WEB-INF/stuff.jsp")); }); } }