In a servlet, context is the context of the application, because of which you lose the conversation area. Here is a small utility class that you can use as an anonymous class and wrap the request if you want support for the talk area in servlets ...
import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import org.jboss.weld.Container; import org.jboss.weld.context.ContextLifecycle; import org.jboss.weld.context.ConversationContext; import org.jboss.weld.servlet.ConversationBeanStore; public abstract class ConversationalHttpRequest { protected HttpServletRequest request; public ConversationalHttpRequest(HttpServletRequest request) { this.request = request; } public abstract void process() throws Exception; public void run() throws ServletException { try { initConversationContext(); process(); } catch (Exception e) { throw new ServletException("Error processing conversational request", e); } finally { cleanupConversationContext(); } } private void initConversationContext() { ConversationContext conversationContext = Container.instance().deploymentServices().get(ContextLifecycle.class).getConversationContext(); conversationContext.setBeanStore(new ConversationBeanStore(request.getSession(), request.getParameter("cid"))); conversationContext.setActive(true); } private void cleanupConversationContext() { ConversationContext conversationContext = Container.instance().deploymentServices().get(ContextLifecycle.class).getConversationContext(); conversationContext.setBeanStore(null); conversationContext.setActive(false); } }
source share