@End from "join" ends all conversations - unexpected action
bernix Dec 20, 2007 3:59 AMI have two beans in conversation scope, beanA and beanB. beanA is backing pageA individually,and beanB is backing pageB individually.
beanA will begin the long-running conversation in pageA at first, then we jump to pageB, pageB will begin(join=true) beanB.
but when we end the joined conversation in beanB.done , the beanA is destroyed as well.....
beanA
@Stateful @Scope(CONVERSATION) @Name("beanA") public class BeanA implements IBeanA { public BeanA() { System.out.println(">>>>>> BeanA is constructed."); } @Begin public void init() { System.out.println(">>>>>> BeanA is initialized."); } @End public void done() { System.out.println(">>>>>> BeanA is done."); } @Remove public void destroy() { System.out.println(">>>>>> BeanA is destroyed."); } }
beanB
@Stateful @Name("beanB") @Scope (CONVERSATION) public class BeanB implements IBeanB { public BeanB() { System.out.println(">>>>>> BeanB is constructed."); } @Begin(join=true) public void init() { System.out.println(">>>>>> BeanB is initialized."); } @End(beforeRedirect=true) public void done() { System.out.println(">>>>>> BeanB is done."); } @Remove public void destroy() { System.out.println(">>>>>> BeanB is destroyed."); } }
home.xhtml
<s:link view="/pageA.xhtml" action="#{beanA.init()}" value="Go to beanA">
pageA
<s:link view="/pageB.xhtml" action="#{beanB.init()}" value="Go to beanB"/>
pageB
<h:form> <h:commandButton action="#{beanB.done}" value="Done beanB"/> </h:form>
pageB.page.xml
<navigation from-action="#{beanB.done}"> <redirect view-id="/pageA.xhtml"/> </navigation>
we do the following steps:
1. enter home page
2. link to pageA
3. link to pageB
4. click "Done beanB" in pageB
then we got the exception.....the log is:
16:31:46,333 INFO [STDOUT] >>>>>> BeanA is constructed. 16:31:46,458 INFO [STDOUT] >>>>>> BeanA is initialized. 16:31:49,458 INFO [STDOUT] >>>>>> BeanB is constructed. 16:31:49,489 INFO [STDOUT] >>>>>> BeanB is initialized. 16:31:56,129 INFO [STDOUT] >>>>>> BeanB is done. 16:31:56,145 INFO [STDOUT] >>>>>> BeanB is destroyed. 16:31:56,161 INFO [STDOUT] >>>>>> BeanA is destroyed. 16:31:56,254 INFO [STDOUT] >>>>>> BeanA is constructed.
Why the @End in beanB.done() cause the beanA to be destroyed?
We would hope that resume to beanA when beanB is done.
I know we can use nested conversation in beanB,yes,nested conversation works OK.
I just wondering,if I join a conversation,how can I end it then resume to the previous long-running conversation?