Async Plugin
Description
The Async plugin allows to implement actions as using an Asynchronous Processing available as from Servlet API 3. It’s a thin layer over the Servlet async layer.
Simple usage
The example code below shows how to implement and use async actions. Please check an async action example in our Showcase app.
Action
public class AsyncAction {
public Callable<String> execute() throws InterruptedException {
return new Callable<String>() {
@Override
public String call() throws Exception {
waitForEvent();
return "success";
}
};
}
private void waitForEvent() throws InterruptedException {
Thread.sleep(40000);
}
}
struts.xml
<action name="async" class="com.company.struts.AsyncAction">
<result name="success" type="json"/>
</action>
web.xml
You must define the Struts Servlet to allow support Async actions.
<servlet>
<servlet-name>strutsServlet</servlet-name>
<servlet-class>org.apache.struts2.dispatcher.servlet.StrutsServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>strutsServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Customize timeout
Action
public class AsyncAction {
public Callable<String> execute() throws InterruptedException {
return new AsyncAction(60000/*timeout*/, new Callable<String>() {
@Override
public String call() throws Exception {
waitForEvent();
return "success";
}
});
}
private void waitForEvent() throws InterruptedException {
Thread.sleep(40000);
}
}
Serializing multiple async tasks
Action
public class AsyncAction {
public Callable<String> execute() throws InterruptedException {
return new Callable<String>() {
@Override
public String call() throws Exception {
waitForEvent1();
return new Callable<String>() {
@Override
public String call() throws Exception {
waitForEvent2();
return "success";
}
};
}
};
}
private void waitForEvent1() throws InterruptedException {
Thread.sleep(40000);
}
private void waitForEvent2() throws InterruptedException {
Thread.sleep(40000);
}
}