package org.jboss.weld.tests.contexts.conversation.weld1418; import java.io.IOException; import java.io.PrintWriter; import java.util.logging.Logger; import javax.enterprise.context.Conversation; import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * */ @SuppressWarnings("serial") @WebServlet(value = "/servlet/*") public class Servlet extends HttpServlet { private static final Logger log = Logger.getLogger(Servlet.class.getName()); @Inject private Conversation conversation; @Inject private SomeBean someBean; @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { logInfo("Request started: " + req.getPathInfo()); try { PrintWriter out = resp.getWriter(); HttpSession session = req.getSession(true); logInfo("session.getId() = " + session.getId()); if (req.getPathInfo().startsWith("/startConversation")) { conversation.begin(); logInfo("conversation.getId() = " + conversation.getId()); someBean.setValue(req.getParameter("value")); out.println(conversation.getId()); logInfo("sending cid to client: cid=" + conversation.getId()); out.flush(); sleep(req.getParameter("sleep") == null ? 3000 : Integer.parseInt(req.getParameter("sleep"))); // keep request open, so another request can be made while this one is still open } else if (req.getPathInfo().startsWith("/getValue")) { logInfo("conversation.getId() = " + conversation.getId()); out.println((Object)someBean.getValue()); } else { out.println(""); } } finally { logInfo("Request finished: " + req.getPathInfo()); } } private void logInfo(String msg) { synchronized (log) { log.info(msg); } } private void sleep(int millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { throw new RuntimeException(e); } } }