org.springframework.webflow.conversation.impl
Class SessionBindingConversationManager

java.lang.Object
  extended by org.springframework.webflow.conversation.impl.SessionBindingConversationManager
All Implemented Interfaces:
ConversationManager

public class SessionBindingConversationManager
extends java.lang.Object
implements ConversationManager

Simple implementation of a conversation manager that stores conversations in the session attribute map.

Using the maxConversations property, you can limit the number of concurrently active conversations allowed in a single session. If the maximum is exceeded, the conversation manager will automatically end the oldest conversation. The default is 5, which should be fine for most situations. Set it to -1 for no limit. Setting maxConversations to 1 allows easy resource cleanup in situations where there should only be one active conversation per session.

Author:
Erwin Vervaet

Constructor Summary
SessionBindingConversationManager()
           
 
Method Summary
 Conversation beginConversation(ConversationParameters conversationParameters)
          Begin a new conversation.
 Conversation getConversation(ConversationId id)
          Get the conversation with the provided id.
 UidGenerator getConversationIdGenerator()
          Returns the used generator for conversation ids.
 int getMaxConversations()
          Returns the maximum number of allowed concurrent conversations.
 java.lang.String getSessionKey()
          Returns the key this conversation manager uses to store conversation data in the session.
 ConversationId parseConversationId(java.lang.String encodedId)
          Parse the string-encoded conversationId into its object form.
 void setConversationIdGenerator(UidGenerator uidGenerator)
          Sets the configured generator for conversation ids.
 void setMaxConversations(int maxConversations)
          Set the maximum number of allowed concurrent conversations.
 void setSessionKey(java.lang.String sessionKey)
          Sets the key this conversation manager uses to store conversation data in the session.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SessionBindingConversationManager

public SessionBindingConversationManager()
Method Detail

getConversationIdGenerator

public UidGenerator getConversationIdGenerator()
Returns the used generator for conversation ids. Defaults to RandomGuidUidGenerator.


setConversationIdGenerator

public void setConversationIdGenerator(UidGenerator uidGenerator)
Sets the configured generator for conversation ids.


getMaxConversations

public int getMaxConversations()
Returns the maximum number of allowed concurrent conversations. The default is 5.


setMaxConversations

public void setMaxConversations(int maxConversations)
Set the maximum number of allowed concurrent conversations. Set to -1 for no limit. The default is 5.


getSessionKey

public java.lang.String getSessionKey()
Returns the key this conversation manager uses to store conversation data in the session.

Returns:
the session key

setSessionKey

public void setSessionKey(java.lang.String sessionKey)
Sets the key this conversation manager uses to store conversation data in the session. If multiple session binding conversation managers are used in the same web application to back independent flow executors, this value should be unique among them.

Parameters:
sessionKey - the session key

beginConversation

public Conversation beginConversation(ConversationParameters conversationParameters)
                               throws ConversationException
Description copied from interface: ConversationManager
Begin a new conversation.

Specified by:
beginConversation in interface ConversationManager
Parameters:
conversationParameters - descriptive conversation parameters
Returns:
a service interface allowing access to the conversation context
Throws:
ConversationException - an exception occured

getConversation

public Conversation getConversation(ConversationId id)
                             throws ConversationException
Description copied from interface: ConversationManager
Get the conversation with the provided id.

Implementors should take care to manage conversation identity correctly. Although it is not strictly required to return the same (==) Conversation object every time this method is called with a particular conversation id in a single execution thread, callers will expect to recieve an object that allows them to manipulate the identified conversation. In other words, the following is legal ConversationManager client code:

        ConversationManager manager = ...;
        ConversationId id = ...;
        Conversation conv = manager.getConversation(id);
  conv.lock();
  try {
        Conversation localReference = manager.getConversation(id);
        // no need to lock since conversation 'id' is already locked
        // even though possibly conv != localReference
        localReference.putAttribute("foo", "bar");
        Object foo = conv.getAttribute("foo");
        }
        finally {
                conv.unlock();
        }
 

Specified by:
getConversation in interface ConversationManager
Parameters:
id - the conversation id
Returns:
the conversation
Throws:
NoSuchConversationException - the id provided was invalid
ConversationException

parseConversationId

public ConversationId parseConversationId(java.lang.String encodedId)
                                   throws ConversationException
Description copied from interface: ConversationManager
Parse the string-encoded conversationId into its object form. Essentially, the reverse of ConversationId.toString().

Specified by:
parseConversationId in interface ConversationManager
Parameters:
encodedId - the encoded id
Returns:
the parsed conversation id
Throws:
ConversationException - an exception occured parsing the id


Copyright © 2004-2007. All Rights Reserved.