[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-686) Conversation cleanup does not work for a request that invaldiates the session

Chris Rudd (JIRA) jira-events at jboss.com
Tue Jan 23 16:56:59 EST 2007


    [ http://jira.jboss.com/jira/browse/JBSEAM-686?page=comments#action_12351478 ] 
            
Chris Rudd commented on JBSEAM-686:
-----------------------------------

>From Lifecylce.endSession 

...

      Set<String> conversationIds = Manager.instance().getSessionConversationIds();
      log.debug("destroying conversation contexts: " + conversationIds);
      for (String conversationId: conversationIds)
      {
         Contexts.destroy( new ServerConversationContext(session, conversationId) );
      }
...

This creates a NEW ServerConversationContext, so the additions/removals members are emtpy. They only existed in the ServerConversationContext that was never flushed.



> Conversation cleanup does not work for a request that invaldiates the session
> -----------------------------------------------------------------------------
>
>                 Key: JBSEAM-686
>                 URL: http://jira.jboss.com/jira/browse/JBSEAM-686
>             Project: JBoss Seam
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 1.1.1.GA, 1.1.0.GA, 1.1.0.CR2, 1.1.0.CR1, 1.1.0.BETA2, 1.1.0.BETA1, 1.0.1, 1.0, 1.0 beta 2, 1.0 beta 1
>            Reporter: Chris Rudd
>         Assigned To: Gavin King
>            Priority: Critical
>             Fix For: 1.1.5.GA
>
>
> If beans are added to a long running conversation in the same request that Seam.invalidateSession() is called, they will not be destroyed correctly.
> This is because the conversation is never flushed to the Session object, and therefore ServerConversationContext.getNamesFromSession() cannot see them. 
> <LifeCycle: 308>
>    if ( Contexts.isConversationContextActive() )
>       {
>          if ( !Manager.instance().isLongRunningConversation() )
>          {
>             log.debug("destroying conversation context");
>             Contexts.destroy( Contexts.getConversationContext() );
>          }
>          if ( !Seam.isSessionInvalid() && !Init.instance().isClientSideConversations() )
>          {
>             log.debug("flushing server-side conversation context");
>             Contexts.getConversationContext().flush();
>          }
>       }
> This will also happen when a Temporary Conversation is changed to a long running because of a redirect (which is where i found the problem initially) and Seam.InvalidateSession() has been called.
> It seems that the !Seam.isSessionInvalid() check should be removed. The SeamListener when it sees the sessionDestroyed event will properly clean up the context.
> NOTE: If the bean was already in the conversation from a previous request (long running conversation only) then the issue does not occur as the object id already part of the sessions attributes from a previous request.

-- 
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