Otherwise comments in line.
On 29 Jan 2010, at 07:56, Nicklas Karlsson wrote:
Hi,
There has been many requests for a standard ConversationManager
API that could be used by other frameworks (SE, GraniteDS, Seam
Remoting etc) so there was a short brainstorming session and we came
up with the following proposal on which I now request your feedback.
public interface ConversationManager
{
/**
* Activates the conversation context
*
* @return The conversation manager
* @throws IllegalStateException if the context is already active
*/
public abstract ConversationManager activateContext();
/**
* Deactivates the conversation context
*
* @return The conversation manager
* @throws IllegalStateException if the context is already deactivated
*/
public abstract ConversationManager deactivateContext();
/**
* Checks the state of the conversation context
*
* @return true if the conversation context is active, false otherwise
*/
public abstract boolean isContextActive();
/**
* Starts a new, transient conversation
*
* @return The conversation manager
* @throws IllegalStateException if there is already an active
conversation or if the conversation context is not active
*/
public abstract ConversationManager createTransientConversation();
/**
* Ends the current transient conversation
*
* @return The conversation manager
* @throws IllegalStateException if the current transaction is not
transient or if the conversation context is not active
*/
public abstract ConversationManager endTransientConversation();
I wonder if this should be destroy, not end to preserve the semantics of end as demoting a
conversation
/**
* Restores a long-running conversation.
*
* @param cid The id of the conversation to restore
* @return The conversation manager
* @throws NonexistentConversationException if the conversation id
is null or not a known long-running conversation
* @throws IllegalStateException if there already an active
conversation or if the conversation context is not active
*/
public abstract ConversationManager restoreConversation(String cid);
/**
* Marks a long-running conversation transient
*
* @param cid The id of the conversation to make transient
* @return The conversation manager
* @throws NonexistentConversationException if the conversation id
is null or not a known long-running conversation
* @throws IllegalStateException if the conversation context is not active
*/
public abstract ConversationManager endConversation(String cid);
I wonder if this is needed, as you can achieve it by restoring the conversation and then
calling Conversation.end()... Do you see this as a particularly common use case?
/**
* Marks all long-running conversations as transient and destroys them
*
* @return The conversation manager
* @throws IllegalStateException if the conversation context is not active
*/
public abstract ConversationManager endAllConversations();
Whats the use case for this?
/**
* Returns the long-running conversation IDs
*
* @return The long-running conversations IDs
* @throws IllegalStateException if the conversation context is not active
*/
public abstract Set<String> getConversations();
This in the current session right? If so the javadoc should say that :-)
/**
* Returns a new, unused conversation ID
*
* @return A new, unused conversation ID
* @throws IllegalStateException if the conversation context is not active
*/
public abstract String getNewConversationId();
What is the use case for this?
/**
* Checks if a conversation ID is in use for any other conversation
than the current one
*
* @return True if the conversation ID is in use, false otherwise
* @throws IllegalStateException if the conversation context is not active
*/
public abstract boolean isConversationIdInUse(String id);
IMO this should just check if the conversation id is in use regardless of the current
conversation. This is a much simpler contract to understand.