Emond, Also it is very possible I misinterpreted how cdi-1.0 worked. I personally believe that the auto conversation that is started should only end if the propagation rule fails, that is navigate to a new page that is a bookmarkable when propagation is set to NonBookmarkable, I read through the cdi-1.0 code and it is basically cut and paste to the rewrite and placed at the level so that the conversation is active without needing to use weld internals to activate it :) :) After reading it I may have mistakenly assumed that cdi-1.0 behaved like I described, I have not tested that. If that is the case should we bring up a discussing to formally define what semantic controls propagation. That is if you choose to have wicket-cdi manage the conversation then every page needs to implement ConversationalComponent otherwise the conversation will be ended even if it passes the propagation criteria. If you choose to manually begin and end conversations, then only the propagation criteria dictates conversation propagation.
Also we discussed removing the ConversationalComponent and making that an Annotation. Is that still on the table? I am very impressed that you were able to remove the required dependency of the cdi implementation. Glad you took the lead and made that happen. Thanks John On Fri, Jan 10, 2014 at 8:59 AM, John Sarman <[email protected]> wrote: > Should the Conversation be ended immediately? So if someone uses the > ConversationalComponent to automate the conversation.begin(), does that > override the propagation if the next page that is navigated to does not > implement ConversationalComponent? I am just trying to understand the new > way of managing the Conversation as it differs from the Wicket Cdi-1.0 > pattern. In the 1.0 if a conversation was active and you navigated to a > non bookmarkable page (assuming CdiConfiguration is configured with the > default nonbookmarkable) then the Conversation would propagate regardless > if the conversation was automatically managed or manually began. In 1.0 if > the conversation was managed by the wicket-cdi and you navigated to a > bookmarkable page then wicket-cdi would not propagate the Conversation and > call conversation.end(). > > Thanks, > John > > > > On Fri, Jan 10, 2014 at 8:49 AM, Emond Papegaaij < > [email protected]> wrote: > >> The conversation is propagated, but also ended immediately. The >> TestNonConversationalPage is rendered with count = 3, but this count is >> lost on the next increment (rendering of the page is a different request >> as >> clicking the increment link). >> >> On Friday 10 January 2014 08:38:24 John Sarman wrote: >> > Emond, >> > I understand that. However whether the Conversation is began >> manually or >> > automatically should not dictate how the Conversation is propagated. In >> > the TestConversationalPage starts the conversation via the >> > ConversationalComponent interface then increments the counter. The >> counter >> > increment does not call setResponsePage(). When the next Link is >> clicked, >> > setResponsePage(new TestNonConversationalPage()); is fired. This is a >> > non-bookmarkable page, but the Conversation is not propagated. This >> means >> > that the ConversationPropagation is not working. >> > >> > Thanks, >> > John >> > >> > >> > >> > On Fri, Jan 10, 2014 at 3:02 AM, Emond Papegaaij >> <[email protected] >> > > wrote: >> > > >> > > Hi John, >> > > >> > > You are mixing two concepts here: conversation propagation and >> auto- >> > > conversations. These two operate separately. Auto-conversations are >> > > started _and_ ended automatically. You can use this, for example, on a >> > > page where a conversational component is added and later removed >> > > again. The conversation will stay active for as long as the component >> is >> > > on >> > > the page. If you wish to take control of an auto-conversation, you >> need to >> > > inject AutoConversation and call setAutomatic(false). >> > > >> > > Best regards, >> > > Emond >> > > >> > > On Thursday 09 January 2014 15:34:30 John Sarman wrote: >> > > > Emond, >> > > > I finally had some time to go over the cdi rewrite and I on the >> first >> > > >> > > test >> > > >> > > > I was reviewing I do not think the Conversation propagation is >> working >> > > > correctly. In the test Class ConversationPropagatorTest, the first >> > > > test testAutoConversationNonBookmarkable uses the Wicket >> > > > page TestConversationalPage which extends >> ConversationalComponent >> > > >> > > to notify >> > > >> > > > the framework the conversations should be managed automatically. >> The >> > > > initial for loop iterates through the increment clicks to verify >> > > > the TestConversationBean counter is incremented properly. This >> works >> > > >> > > fine. >> > > >> > > > Then the test clicks the next link, which goes to a non >> bookmarkable >> > > >> > > page >> > > >> > > > that also injects the TestConversationBean. At this point >> > > > the TestConversationBean current count should be equal to the last >> > > > increment from the first page, but it is 0. The increment link is >> > > > clicked >> > > > on that page and the count is incremented to 1, and every call after >> > > >> > > that >> > > >> > > > the TestConversationBean is reinjected but not part of the >> conversation >> > > >> > > so >> > > >> > > > the count is 0 then 1 and the test asserts (1) not the continuous >> > > > incremented count. I realize that the test passes, but I think the >> test >> > > >> > > on >> > > >> > > > the second for loop should read >> > > > >> > > > tester.clickLink("increment"); >> > > > >> > > > tester.assertCount(i); // The value of i continues to increment >> from >> > > > the >> > > > first for loop. >> > > > I have not went through the code yet, but it seems that as soon as >> next >> > > > page that does not implement the ConversationalComponent >> interface, >> > > > although it is a nonbookmarkable page, the conversation is not >> > > >> > > propagated. >> > > >> > > > My understanding of how Igor built 1.0 was that the >> > > > >> > > > ConversationalComponent could be used to automate the code to >> > > >> > > begin a >> > > >> > > > Conversation if one was not already active and the propagation was >> a >> > > >> > > method >> > > >> > > > to continue the conversation based on the way a page was created. >> > > >> > > That is >> > > >> > > > if a conversation was active and the next page in the pipeline was a >> > > > nonbookmarkable page then the conversation was propagated >> > > >> > > regardless if it >> > > >> > > > implemented ConversationalComponent (assuming CDIConfiguration >> > > >> > > propagation >> > > >> > > > was set to NONBOOKMARKABLE) . I will continue to debug through >> the >> > >
