public void createRequest(@Observes Before event, WeldManager manager) { BoundRequestContext requestContext = manager.instance().select(BoundRequestContext.class).get(); CDIRequestMap map = new CDIRequestMap(); requestContext.associate(map); requestContext.activate(); requestMap.set(map); }
@Override public void requestInitialized(final ServletRequestEvent evt) { final BoundRequestContext ctx = CDI.current().select(BoundRequestContext.class).get(); final Map<String, Object> instanceMap = new HashMap<>(); final ServletRequest req = evt.getServletRequest(); req.setAttribute(CDI_CONTEXT, ctx); req.setAttribute(CDI_INSTANCE_MAP, instanceMap); ctx.associate(instanceMap); ctx.activate(); }
public void destroyRequest(@Observes After event, WeldManager manager) { BoundRequestContext requestContext = manager.instance().select(BoundRequestContext.class).get(); CDIRequestMap map = requestMap.get(); if (map != null) { try { requestContext.invalidate(); requestContext.deactivate(); } finally { requestContext.dissociate(map); map.clear(); } } }
@Override public void requestDestroyed(final ServletRequestEvent evt) { final ServletRequest req = evt.getServletRequest(); @SuppressWarnings("unchecked") final Map<String, Object> instanceMap = (Map<String, Object>) req.getAttribute(CDI_INSTANCE_MAP); final BoundRequestContext ctx = (BoundRequestContext) req.getAttribute(CDI_CONTEXT); ctx.invalidate(); ctx.deactivate(); ctx.dissociate(instanceMap); req.removeAttribute(CDI_CONTEXT); req.removeAttribute(CDI_INSTANCE_MAP); }
@SuppressWarnings("unchecked") public void setup(Map<String, Object> properties) { try { final BeanManager manager = (BeanManager) new InitialContext().lookup(STANDARD_BEAN_MANAGER_JNDI_NAME); if (manager != null && Container.available()) { final Bean<BoundSessionContext> sessionContextBean = (Bean<BoundSessionContext>) manager.resolve(manager.getBeans(BoundSessionContext.class, BoundLiteral.INSTANCE)); CreationalContext<?> ctx = manager.createCreationalContext(sessionContextBean); final BoundSessionContext sessionContext = (BoundSessionContext) manager.getReference(sessionContextBean, BoundSessionContext.class, ctx); sessionContext.associate(sessionContexts.get()); sessionContext.activate(); final Bean<BoundRequestContext> requestContextBean = (Bean<BoundRequestContext>) manager.resolve(manager.getBeans(BoundRequestContext.class, BoundLiteral.INSTANCE)); ctx = manager.createCreationalContext(requestContextBean); final BoundRequestContext requestContext = (BoundRequestContext) manager.getReference(requestContextBean, BoundRequestContext.class, ctx); requestContext.associate(requestContexts.get()); requestContext.activate(); final Bean<BoundConversationContext> conversationContextBean = (Bean<BoundConversationContext>) manager.resolve( manager.getBeans(BoundConversationContext.class, BoundLiteral.INSTANCE)); ctx = manager.createCreationalContext(conversationContextBean); final BoundConversationContext conversationContext = (BoundConversationContext) manager.getReference(conversationContextBean, BoundConversationContext.class, ctx); BoundRequest request = new MutableBoundRequest(requestContexts.get(), sessionContexts.get()); boundRequests.set(request); conversationContext.associate(request); conversationContext.activate(); } } catch (NamingException e) { log.error("Failed to setup Weld contexts", e); } }
@SuppressWarnings("unchecked") public void teardown(Map<String, Object> properties) { try { final BeanManager manager = (BeanManager) new InitialContext().lookup("java:comp/BeanManager"); if (manager != null && Container.available()) { final Bean<BoundSessionContext> sessionContextBean = (Bean<BoundSessionContext>) manager.resolve(manager.getBeans(BoundSessionContext.class, BoundLiteral.INSTANCE)); CreationalContext<?> ctx = manager.createCreationalContext(sessionContextBean); final BoundSessionContext sessionContext = (BoundSessionContext) manager.getReference(sessionContextBean, BoundSessionContext.class, ctx); sessionContext.deactivate(); sessionContext.dissociate(sessionContexts.get()); final Bean<BoundRequestContext> requestContextBean = (Bean<BoundRequestContext>) manager.resolve(manager.getBeans(BoundRequestContext.class, BoundLiteral.INSTANCE)); ctx = manager.createCreationalContext(requestContextBean); final BoundRequestContext requestContext = (BoundRequestContext) manager.getReference(requestContextBean, BoundRequestContext.class, ctx); requestContext.deactivate(); requestContext.dissociate(requestContexts.get()); final Bean<BoundConversationContext> conversationContextBean = (Bean<BoundConversationContext>) manager.resolve( manager.getBeans(BoundConversationContext.class, BoundLiteral.INSTANCE)); ctx = manager.createCreationalContext(conversationContextBean); final BoundConversationContext conversationContext = (BoundConversationContext) manager.getReference(conversationContextBean, BoundConversationContext.class, ctx); conversationContext.deactivate(); conversationContext.dissociate(boundRequests.get()); } } catch (NamingException e) { log.error("Failed to tear down Weld contexts", e); } finally { sessionContexts.remove(); requestContexts.remove(); boundRequests.remove(); } }