use of javax.enterprise.context.Conversation in project core by weld.
the class NaiveClusterTest method testConversationReplication.
@Test(description = "A simple test to check conversation replication")
public void testConversationReplication() throws Exception {
TestContainer container1 = bootstrapContainer(1, Collections.singletonList(Baz.class));
BeanManagerImpl beanManager1 = getBeanManager(container1);
TestContainer container2 = bootstrapContainer(2, Collections.singletonList(Baz.class));
BeanManagerImpl beanManager2 = getBeanManager(container2);
use(1);
// Set up the conversation context
BoundRequest request1 = new BoundRequestImpl(container1.getSessionStore());
BoundConversationContext conversationContext1 = Utils.getReference(beanManager1, BoundConversationContext.class);
conversationContext1.associate(request1);
conversationContext1.activate();
// Set a value into Baz1
Baz baz1 = Utils.getReference(beanManager1, Baz.class);
baz1.setName("pete");
// Begin the conversation
Conversation conversation1 = Utils.getReference(beanManager1, Conversation.class);
conversation1.begin();
// refetch the test bean and check it has the right value
baz1 = Utils.getReference(beanManager1, Baz.class);
assert baz1.getName().equals("pete");
// Simulate ending the request (from the POV of the conversation only!)
assert !conversation1.isTransient();
String cid = conversation1.getId();
conversationContext1.invalidate();
conversationContext1.deactivate();
conversationContext1.dissociate(request1);
// and start another, propagating the conversation
request1 = new BoundRequestImpl(container1.getSessionStore());
conversationContext1.associate(request1);
conversationContext1.activate(cid);
// refetch the test bean and check it has the right value
baz1 = Utils.getReference(beanManager1, Baz.class);
assert baz1.getName().equals("pete");
assert !conversation1.isTransient();
replicateSession(1, container1, 2, container2);
use(2);
// Set up the conversation context
BoundRequest request2 = new BoundRequestImpl(container2.getSessionStore());
BoundConversationContext conversationContext2 = Utils.getReference(beanManager2, BoundConversationContext.class);
conversationContext2.associate(request2);
conversationContext2.activate(cid);
Baz baz2 = Utils.getReference(beanManager2, Baz.class);
assert baz2.getName().equals("pete");
Conversation conversation2 = Utils.getReference(beanManager2, Conversation.class);
assert !conversation2.isTransient();
use(2);
container2.stopContainer();
use(1);
container1.stopContainer();
}
use of javax.enterprise.context.Conversation in project wicket by apache.
the class ConversationPropagator method onRequestHandlerResolved.
@Override
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);
}
Conversation current = getConversation(cycle);
if (current != null && !Objects.isEqual(current.getId(), cid)) {
logger.info("Conversation {} has expired for {}", cid, page);
throw new ConversationExpiredException(null, cid, page, handler);
}
activateConversationIfNeeded(cycle, handler, cid);
}
use of javax.enterprise.context.Conversation in project wicket by apache.
the class ConversationPropagator method activateConversationIfNeeded.
private void activateConversationIfNeeded(RequestCycle cycle, IRequestHandler handler, String cid) {
Conversation current = getConversation(cycle);
if (current != null || !activateForHandler(handler)) {
return;
}
logger.debug("Activating conversation {}", cid);
try {
container.activateConversationalContext(cycle, cid);
fireOnAfterConversationStarted(cycle);
} catch (NonexistentConversationException e) {
logger.info("Unable to restore conversation with id {}", cid, e.getMessage());
logger.debug("Unable to restore conversation", e);
fireOnAfterConversationStarted(cycle);
throw new ConversationExpiredException(e, cid, getPage(handler), handler);
}
cycle.setMetaData(CONVERSATION_STARTED_KEY, true);
}
use of javax.enterprise.context.Conversation in project wicket by apache.
the class ConversationPropagator method onRequestHandlerExecuted.
@Override
public void onRequestHandlerExecuted(RequestCycle cycle, IRequestHandler handler) {
Conversation conversation = getConversation(cycle);
if (conversation == null) {
return;
}
Page page = getPage(handler);
if (page == null) {
return;
}
// apply auto semantics
autoEndIfNecessary(page, handler, conversation);
autoBeginIfNecessary(page, handler, conversation);
if (propagation.propagatesViaPage(page, handler)) {
// propagate a conversation across non-bookmarkable page instances
setConversationOnPage(conversation, page);
}
}
Aggregations