@Override public void init(FilterConfig filterConfig) throws ServletException { this.conversationContextActivator = new ConversationContextActivator(manager, false); filterConfig.getServletContext().setAttribute(CONVERSATION_FILTER_REGISTERED, Boolean.TRUE); contextActivationFilter = ServletUtils.getContextActivationFilter(manager, filterConfig.getServletContext()); }
protected void activateConversationContext(HttpServletRequest request) { HttpConversationContext conversationContext = httpConversationContext(); /* * Don't try to reactivate the ConversationContext if we have already activated it for this request WELD-877 */ if (!isContextActivatedInRequest(request)) { setContextActivatedInRequest(request); activate(conversationContext, request); } else { /* * We may have previously been associated with a ConversationContext, but the reference to that context may have been lost during a Servlet forward * WELD-877 */ conversationContext.dissociate(request); conversationContext.associate(request); activate(conversationContext, request); } }
public void startConversationContext(HttpServletRequest request) { associateConversationContext(request); activateConversationContext(request); }
protected void deactivateConversationContext(HttpServletRequest request) { try { ConversationContext conversationContext = httpConversationContext(); if (conversationContext.isActive()) { processDestructionQueue(request); return; conversationDestroyedEvent.fire(request); processDestructionQueue(request); ServletLogger.LOG.unableToDeactivateContext(httpConversationContext(), request); ServletLogger.LOG.catchingDebug(e);
conversationContextActivator.deactivateConversationContext(request); conversationContextActivator.disassociateConversationContext(request);
public void sessionCreated(HttpSession session) { HttpConversationContext httpConversationContext = httpConversationContext(); if (httpConversationContext instanceof AbstractConversationContext) { AbstractConversationContext<?, ?> abstractConversationContext = (AbstractConversationContext<?, ?>) httpConversationContext; abstractConversationContext.sessionCreated(); } }
@Override protected void checkContextInitialized() { if (!isInitialized()) { HttpServletRequest request = getRequest(); String cid = ConversationContextActivator.determineConversationId(request, getParameterName()); initialize(cid); if (cid == null) { // transient conversation Consumer<HttpServletRequest> callback = initializationCallback.get(); if (callback != null) { callback.accept(request); } } } } }
public void stopConversationContext(HttpServletRequest request) { deactivateConversationContext(request); }
/** * If needed, destroy the remaining conversation contexts after an HTTP session was invalidated within the current request. * * @param request */ private void processDestructionQueue(HttpServletRequest request) { Object contextsAttribute = request.getAttribute(DESTRUCTION_QUEUE_ATTRIBUTE_NAME); if (contextsAttribute instanceof Map) { Map<String, List<ContextualInstance<?>>> contexts = cast(contextsAttribute); synchronized (contexts) { FastEvent<String> destroyedEvent = FastEvent.of(String.class, beanManager, DestroyedLiteral.CONVERSATION); for (Iterator<Entry<String, List<ContextualInstance<?>>>> iterator = contexts.entrySet().iterator(); iterator.hasNext();) { Entry<String, List<ContextualInstance<?>>> entry = iterator.next(); for (ContextualInstance<?> contextualInstance : entry.getValue()) { destroyContextualInstance(contextualInstance); } // Note that for the attached/current conversation we fire the destroyed event twice because we can't reliably identify such a conversation destroyedEvent.fire(entry.getKey()); iterator.remove(); } } } }
protected void associateConversationContext(HttpServletRequest request) { httpConversationContext().associate(request); }
private void activate(HttpConversationContext conversationContext, final HttpServletRequest request) { if (lazy && conversationContext instanceof LazyHttpConversationContextImpl) { LazyHttpConversationContextImpl lazyConversationContext = (LazyHttpConversationContextImpl) conversationContext; // Activation API should be improved so that it's possible to pass a callback for later execution lazyConversationContext.activate(lazyInitializationCallback); } else { String cid = determineConversationId(request, conversationContext.getParameterName()); conversationContext.activate(cid); if (cid == null) { // transient conversation conversationInitializedEvent.fire(request); } } }
getSessionContext().associate(request); if (conversationActivationEnabled) { conversationContextActivator.associateConversationContext(request); conversationContextActivator.activateConversationContext(request);
protected void disassociateConversationContext(HttpServletRequest request) { try { httpConversationContext().dissociate(request); } catch (Exception e) { ServletLogger.LOG.unableToDissociateContext(httpConversationContext(), request); ServletLogger.LOG.catchingDebug(e); } }
public HttpContextLifecycle(BeanManagerImpl beanManager, HttpContextActivationFilter contextActivationFilter, boolean ignoreForwards, boolean ignoreIncludes, boolean lazyConversationContext, boolean nestedInvocationGuardEnabled) { this.beanManager = beanManager; this.conversationContextActivator = new ConversationContextActivator(beanManager, lazyConversationContext); this.conversationActivationEnabled = null; this.ignoreForwards = ignoreForwards; this.ignoreIncludes = ignoreIncludes; this.contextActivationFilter = contextActivationFilter; this.requestInitializedEvent = FastEvent.of(HttpServletRequest.class, beanManager, InitializedLiteral.REQUEST); this.requestDestroyedEvent = FastEvent.of(HttpServletRequest.class, beanManager, DestroyedLiteral.REQUEST); this.sessionInitializedEvent = FastEvent.of(HttpSession.class, beanManager, InitializedLiteral.SESSION); this.sessionDestroyedEvent = FastEvent.of(HttpSession.class, beanManager, DestroyedLiteral.SESSION); this.servletApi = beanManager.getServices().get(ServletApiAbstraction.class); this.servletContextService = beanManager.getServices().get(ServletContextService.class); this.nestedInvocationGuardEnabled = nestedInvocationGuardEnabled; this.container = Container.instance(beanManager); BeanDeploymentModules beanDeploymentModules = beanManager.getServices().get(BeanDeploymentModules.class); this.module = beanDeploymentModules != null ? beanDeploymentModules.getModule(beanManager) : null; }