Java Reference
In-Depth Information
@Override
public ManagedTaskListener getManagedTaskListener() {
return new CustomManagedTaskListener();
}
}
One or more such task classes can be implemented, and then they can be processed via the builder task using
the
ManagedExecutorService
resource that has been registered with the application server container. The following
servlet makes use of a
ManagedExecutorService
to coordinate the invocation of two task classes. In this case the task
class names are
EmployeeTask
and
EmployeeTaskTwo
.
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.enterprise.concurrent.ManagedExecutorService;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "BuilderServlet", urlPatterns = {"/builderServlet"})
public class BuilderServlet extends HttpServlet implements Servlet {
// Retrieve our executor instance.
@Resource(name = "concurrent/BuilderExecutor")
ManagedExecutorService mes;
EmployeeInfo employeeInfo;
protected void processRequest(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
try {
PrintWriter out = resp.getWriter();
// Create the task instances
Future<EmployeeInfo> empFuture = mes.submit(new EmployeeTask(new BigDecimal(1)));
Future<EmployeeInfo> empFuture2 = mes.submit(new EmployeeTask(new BigDecimal(2)));
// Wait for results
EmployeeInfo empInfo = empFuture.get();
EmployeeInfo empInfo2 = empFuture2.get();
// Process Results