[jbossseam-issues] [JBoss JIRA] Created: (JBSEAM-2124) Natural conversation ids are broken

Shane Bryzak (JIRA) jira-events at lists.jboss.org
Thu Oct 18 00:13:03 EDT 2007


Natural conversation ids are broken
-----------------------------------

                 Key: JBSEAM-2124
                 URL: http://jira.jboss.com/jira/browse/JBSEAM-2124
             Project: JBoss Seam
          Issue Type: Bug
          Components: Core
    Affects Versions: 2.0.0.CR2
            Reporter: Shane Bryzak
         Assigned To: Shane Bryzak
            Priority: Blocker
             Fix For: 2.0.0.GA


When re-entering an existing conversation that uses a natural conversation id, we currently get a "Conversation id is already in use" exception like the following:

Caused by: java.lang.IllegalStateException: Conversation id is already in use: PlaceBid:62748261
        at org.jboss.seam.core.Manager.updateCurrentConversationId(Manager.java:90)
        at org.jboss.seam.faces.FacesManager.beforeRedirect(FacesManager.java:73)
        at org.jboss.seam.faces.FacesManager.redirect(FacesManager.java:164)
        at org.jboss.seam.faces.Navigator.redirect(Navigator.java:91)
        at org.jboss.seam.navigation.RedirectNavigationHandler.navigate(RedirectNavigationHandler.java:53)
        at org.jboss.seam.navigation.Rule.execute(Rule.java:100)
        at org.jboss.seam.navigation.Navigation.navigate(Navigation.java:123)
        at org.jboss.seam.navigation.Pages.navigate(Pages.java:134)
        at org.jboss.seam.jsf.SeamNavigationHandler.handleNavigation(SeamNavigationHandler.java:83)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:119)
        at javax.faces.component.UICommand.broadcast(UICommand.java:383)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)

The workaround for this is to specify the named conversation within the @Begin annotation for the action being called, like so:

@Begin(join = true, conversation = "PlaceBid")
public void placeBid() { 

This way, ConversationInterceptor can redirect to the existing named conversation the same way it does a ce.redirect() for standard conversations.  However this is less than ideal, as we don't want to introduce yet another annotation attribute here if we can avoid it.  The preferred way of configuring this would be in a navigation rule in pages.xml:

    <page view-id="/auction.xhtml">
        <param name="id" value="#{auctionDetail.selectedAuctionId}"/>
        
        <navigation from-action="#{bidAction.placeBid}">
          <begin-conversation join="true" conversation="PlaceBid"/>
          <redirect view-id="/bid.xhtml"/>
        </navigation>
    </page>

The problem with this though is that it happens too late - conversation propagation defined in navigation rules like this get processed in ConversationControl.beginOrEndConversation(), after the action method has already been invoked thereby producing the same "Conversation id already in use" exception.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list