/** * Configures the specified application * * @param application * @return */ public CdiContainer configure(Application application) { if (beanManager == null) { throw new IllegalStateException( "Configuration does not have a BeanManager instance configured"); } CdiContainer container = new CdiContainer(beanManager, nonContextualManager); container.bind(application); RequestCycleListenerCollection listeners = new RequestCycleListenerCollection(); application.getRequestCycleListeners().add(listeners); // enable conversation propagation if (getPropagation() != ConversationPropagation.NONE) { listeners.add(new ConversationPropagator(application, container, getPropagation())); application .getComponentPreOnBeforeRenderListeners() .add(new ConversationExpiryChecker(container)); SeamConversationContextFactory.setDisableNoopInstance(true); } // enable detach event listeners.add(new DetachEventEmitter(container)); // inject application instance if (isInjectApplication()) { container.getNonContextualManager().postConstruct(application); } // enable injection of various framework components if (isInjectSession()) { application.getSessionListeners().add(new SessionInjector(container)); } if (isInjectComponents()) { application.getComponentInstantiationListeners().add(new ComponentInjector(container)); } if (isInjectBehaviors()) { application.getBehaviorInstantiationListeners().add(new BehaviorInjector(container)); } // enable cleanup application .getApplicationListeners() .add(new CdiShutdownCleaner(beanManager, isInjectApplication())); return container; }
private static String getContainerDetails() { StringBuilder result = new StringBuilder(); Class containerClass; for (CdiContainer cdiContainer : ServiceLoader.load(CdiContainer.class)) { containerClass = cdiContainer.getClass(); result.append( containerClass.getProtectionDomain().getCodeSource().getLocation().toExternalForm()); result.append(containerClass.getName()); result.append(System.getProperty("line.separator")); } return result.toString(); }
public void onRequestHandlerResolved(RequestCycle cycle, IRequestHandler handler) { String cid = cycle.getRequest().getRequestParameters().getParameterValue("cid").toString(); Page page = getPage(handler); if (cid == null && page != null) { cid = page.getMetaData(CID_KEY); } container.activateConversationalContext(cycle, cid); }
@Override public void onUrlMapped(RequestCycle cycle, IRequestHandler handler, Url url) { Conversation conversation = container.getCurrentConversation(cycle); if (conversation == null || conversation.isTransient()) { return; } if (propagation == ConversationPropagation.ALL) { // propagate cid to bookmarkable pages via urls url.setQueryParameter(CID, conversation.getId()); } }
@Override public void onRequestHandlerExecuted(RequestCycle cycle, IRequestHandler handler) { Conversation conversation = container.getCurrentConversation(cycle); if (conversation == null) { return; } // propagate a conversation across non-bookmarkable page instances Page page = getPage(handler); if (!conversation.isTransient() && page != null) { page.setMetaData(CID_KEY, conversation.getId()); } }
public void onRequestHandlerScheduled(RequestCycle cycle, IRequestHandler handler) { Conversation conversation = container.getCurrentConversation(cycle); if (conversation == null || conversation.isTransient()) { return; } // propagate a converastion across non-bookmarkable page instances Page page = getPage(handler); if (page != null && !conversation.isTransient()) { page.setMetaData(CID_KEY, conversation.getId()); } if (propagation == ConversationPropagation.ALL) { // propagate cid to a scheduled bookmarkable page PageParameters parameters = getPageParameters(handler); if (parameters != null) { parameters.add(CID, conversation.getId()); } } }
@Override public void onEndRequest(RequestCycle cycle) { container.deactivateConversationalContext(cycle); }