/** * Called when exiting portlet handling for this thread. The bean holders are deregistered from the thread but are * saved rather than destroyed. */ @Override public void deregisterContext(boolean isListener) { if (!complete && (!isListener || doDeregister)) { this.sessbh = PortletSessionBeanHolder.deregister(); this.statebh = PortletStateScopedBeanHolder.deregister(); this.reqbh = PortletRequestScopedBeanHolder.deregister(); PortletArtifactProducer.remove(); } if (isTrace) { StringBuilder txt = new StringBuilder(); txt.append("Deregistered context."); txt.append(" complete: ").append(complete); txt.append(", isListener: ").append(isListener); txt.append(", doRegister: ").append(doDeregister); LOG.trace(txt.toString()); } }
/** * Producer method to make this into a managed bean, so that CDI can use the other * producer methods. * @return */ @Produces public static PortletArtifactProducer getPAP() { PortletArtifactProducer pap = producers.get(); if (pap == null) { pap = new PortletArtifactProducer(); producers.set(pap); if (isTrace) { StringBuilder txt = new StringBuilder(80); txt.append("Created new empty PortletArtifactProducer"); txt.append(", ThreadId=").append(Thread.currentThread().getId()); LOG.trace(txt.toString()); } } return producers.get(); }
/** * Creates a new producer for this thread and stores it in the thread local. * @param req The portlet request * @param resp The portlet response * @param config The portlet config */ public static void setPrecursors(PortletRequest req, PortletResponse resp, PortletConfig config) { PortletArtifactProducer pap = getPAP(); pap.req = req; pap.resp = resp; pap.config = config; if (isTrace) { StringBuilder txt = new StringBuilder(80); txt.append("Set precursors."); txt.append(" ThreadId=").append(Thread.currentThread().getId()); txt.append(", Portlet name: ").append(config == null ? "null" : config.getPortletName()); LOG.trace(txt.toString()); } }
/** * Called when a new thread begins running in order to set up contextual support */ @Override public void registerContext(boolean isListener) { // if the context is already active, then ignore register / deregister calls. if (complete || (isListener && PortletRequestScopedBeanHolder.getBeanHolder() != null)) { doDeregister = false; } else { doDeregister = true; PortletSessionBeanHolder.register(sessbh); PortletStateScopedBeanHolder.register(statebh); PortletRequestScopedBeanHolder.register(reqbh); PortletArtifactProducer.setPrecursors(resreq, prctx.getResponse(), prctx.getPortletConfig()); } if (isTrace) { StringBuilder txt = new StringBuilder(); txt.append("Registered context."); txt.append(" complete: ").append(complete); txt.append(", isListener: ").append(isListener); txt.append(", doRegister: ").append(doDeregister); LOG.trace(txt.toString()); } }
/** * To be called before bean method invocation begins */ private void beforeInvoke(PortletRequest req, PortletResponse resp, PortletConfig config) { if (acb != null) { // Set the portlet session bean holder for the thread & session PortletRequestScopedBeanHolder.setBeanHolder(); // Set the portlet session bean holder for the thread & session PortletSessionBeanHolder.setBeanHolder(req, acb.getSessionScopedConfig()); // Set the render state scoped bean holder PortletStateScopedBeanHolder.setBeanHolder(req, acb.getStateScopedConfig()); // Set up the artifact producer with request, response, and portlet config PortletArtifactProducer.setPrecursors(req, resp, config); if (LOG.isTraceEnabled()) { LOG.trace("CDI context is now set up."); } } else { if (LOG.isTraceEnabled()) { LOG.trace("CDI contextual support not available"); } } }
/** * Called when exiting portlet handling for this thread. The bean holders are deregistered from the thread and any * beans contained are destroyed. */ @Override public void removeContext() { PortletSessionBeanHolder.removeBeanHolder(); PortletStateScopedBeanHolder.removeBeanHolder(null); PortletRequestScopedBeanHolder.removeBeanHolder(); PortletArtifactProducer.remove(); }
PortletArtifactProducer.remove();