@Override protected void activate(RequestContext context, RequestContext oldContext) { super.activate(context, oldContext); if (oldContext != null) { CdiRequestContext oldRequestContext = (CdiRequestContext) oldContext; requestContextController.deactivate(); requestContextController.dissociate(oldRequestContext.getStore()); } CdiRequestContext cdiRequestContext = (CdiRequestContext) context; requestContextController.associate(cdiRequestContext.getStore()); requestContextController.activate(); }
@Override public void close() { try { final Map<String, Object> contextMap = actualMap.get(); if (contextMap != null) { context.invalidate(); context.deactivate(); context.dissociate(contextMap); } else { context.deactivate(); } } finally { actualMap.remove(); actualInjectorManager.remove(); } } }
@Override protected void suspend(RequestContext context) { if (context != null) { CdiRequestContext cdiRequestContext = (CdiRequestContext) context; requestContextController.deactivate(); requestContextController.dissociate(cdiRequestContext.getStore()); } } }
@Override public ExternalRequestContext<Map<String, Object>> open(InjectionManager injectionManager) { final Map<String, Object> newMap = new ConcurrentHashMap<>(); actualMap.set(newMap); context.associate(newMap); context.activate(); actualInjectorManager.set(injectionManager); return new ExternalRequestContext<>(newMap); }
void stopRequestScope() { if (requestContext.isActive()) { requestContext.invalidate(); requestContext.deactivate(); requestContext.dissociate(requestMap); requestMap = new HashMap<>(); } } }
@Override public void activateContext() { if (!requestContext.isActive()) { final SyncBeanStore syncBeanStore = new SyncBeanStore(); CURRENT_BEAN_STORE.set(syncBeanStore); if (requestContext.associate(syncBeanStore)) { requestContext.activate(); } else { LOGGER.error("could not associate request context"); } } }
@Override public void invalidateContext() { requestContext.invalidate(); deactivateContext(); }
void stopRequestScope() { RequestContextHolder rcHolder = requestContexts.get(); if (rcHolder != null && rcHolder.getBoundRequestContext().isActive()) { rcHolder.getBoundRequestContext().invalidate(); rcHolder.getBoundRequestContext().deactivate(); rcHolder.getBoundRequestContext().dissociate(rcHolder.getRequestMap()); requestContexts.set(null); requestContexts.remove(); } }
@Override public void suspend(final ExternalRequestContext<Map<String, Object>> ctx, InjectionManager injectionManager) { try { final Map<String, Object> contextMap = actualMap.get(); if (contextMap != null) { context.deactivate(); context.dissociate(contextMap); } } finally { actualMap.remove(); actualInjectorManager.remove(); } }
@Override public void service(ChannelHandlerContext ctx, HttpRequest request, HttpResponse response, boolean handleNotFound) throws IOException { BoundRequestContext context = this.instance.select(BoundRequestContext.class).get(); Map<String,Object> contextMap = new HashMap<String,Object>(); context.associate(contextMap); context.activate(); try { super.service(ctx, request,response,handleNotFound); } finally { context.invalidate(); context.deactivate(); context.dissociate(contextMap); } } }
@Override protected void release(RequestContext context) { super.release(context); CdiRequestContext cdiRequestContext = (CdiRequestContext) context; requestContextController.invalidate(); requestContextController.deactivate(); requestContextController.dissociate(cdiRequestContext.getStore()); }
void stopRequestScope() { RequestContextHolder rcHolder = requestContexts.get(); if (rcHolder != null && rcHolder.getBoundRequestContext().isActive()) { rcHolder.getBoundRequestContext().invalidate(); rcHolder.getBoundRequestContext().deactivate(); rcHolder.getBoundRequestContext().dissociate(rcHolder.getRequestMap()); requestContexts.set(null); requestContexts.remove(); } }
@Override public void suspend(final ExternalRequestContext<Map<String, Object>> ctx, InjectionManager injectionManager) { try { final Map<String, Object> contextMap = actualMap.get(); if (contextMap != null) { context.deactivate(); context.dissociate(contextMap); } } finally { actualMap.remove(); actualInjectorManager.remove(); } }
/* Inject the BoundRequestContext. */ /* Alternatively, you could look this up from the BeanManager */ @Inject BoundRequestContext requestContext; ... /* Start the request, providing a data store which will last the lifetime of the request */ public void startRequest(Map<String, Object> requestDataStore) { // Associate the store with the context and activate the context requestContext.associate(requestDataStore); requestContext.activate(); } /* End the request, providing the same data store as was used to start the request */ public void endRequest(Map<String, Object> requestDataStore) { try { /* Invalidate the request (all bean instances will be scheduled for destruction) */ requestContext.invalidate(); /* Deactivate the request, causing all bean instances to be destroyed (as the context is invalid) */ requestContext.deactivate(); } finally { /* Ensure that whatever happens we dissociate to prevent any memory leaks */ requestContext.dissociate(requestDataStore); } }
final BoundRequestContext requestContext = (BoundRequestContext) manager.getReference(requestContextBean, BoundRequestContext.class, ctx); requestContext.invalidate(); requestContext.deactivate(); requestContext.dissociate(requestContexts.get());
@Override public void deactivateContext() { requestContext.deactivate(); requestContext.dissociate(getCurrentBeanStore()); CURRENT_BEAN_STORE.remove(); }
@Override public void aroundRequest(HttpRequest req, RunnableWithException<IOException> continuation) throws IOException { BoundRequestContext cdiContext = CDI.current().select(BoundRequestContext.class).get(); Map<String,Object> contextMap = new HashMap<String,Object>(); cdiContext.associate(contextMap); cdiContext.activate(); try { // FIXME: associate CDI thread context on thread change, like Resteasy context? continuation.run(); }finally { if(req.getAsyncContext().isSuspended()) { req.getAsyncContext().getAsyncResponse().register((CompletionCallback)(t) -> { cdiContext.invalidate(); cdiContext.deactivate(); cdiContext.dissociate(contextMap); }); }else { cdiContext.invalidate(); cdiContext.deactivate(); cdiContext.dissociate(contextMap); } } } }