[weld-dev] A ConversationManager API

Henri Chen henrichen at zkoss.org
Mon Feb 1 06:26:39 EST 2010


I think these APIs are good enough for me.

One thing needs clarification though. The ConversationManager itself is 
SessionScoped, right? So the getConversations() method returns all long 
running conversion in this Session?

Henri Chen
The ZK Team
http://www.zkoss.org

Nicklas Karlsson wrote:
> Let's try it the other way around. I toss you the minimal JSF-centric 
> API and the *framework reps of ZK, GraniteDS, SE and Remoting can 
> speak up on what they need more control of along with their usecase* 
> then Pete can comment and I just act as a secretary ;-) That way we 
> don't end up with too many "nice to haves" in the API that could be 
> worked around more or less easy.
>
> public interface ConversationManager
> {
>   /**
>    * Checks the state of the conversation context
>    *
>    * @return true if the conversation context is active, false otherwise
>    */
>   public abstract boolean isContextActive();  
> // usecase: the conversation checks for active context before running 
> methods
>  
>   /**
>    * Activates the conversation context
>    *
>    * @return The conversation manager
>    *
>    * @throws IllegalStateException if the context is already active
>    */  
>   public abstract ConversationManager activateContext();
> // usecase: any non-JSF framework will want to run this themselves
>  
>   /**
>    * Deactivates the conversation context
>    *
>    * @return The conversation manager
>    *
>    * @throws IllegalStateException if the context is already deactive
>    */  
>   public abstract ConversationManager deactivateContext();
> // usecase: any non-JSF framework will want to run this themselves
>
>   /**
>    * Resumes a long running conversation. If the cid is null, nothing 
> is done and the current
>    * transient conversation is resumed
>    *
>    *
>    * @param cid The conversation id to restore
>    * @return The conversation manager
>    * @throws NonexistentConversationException If the non-transient 
> conversation is not known
>    * @throws BusyConversationException If the conversation is locked 
> and not released while waiting
>    * @throws IllegalStateException if the conversation context is not 
> active
>    */
>   public abstract ConversationManager 
> beginOrRestoreConversation(String cid);
> // usecase: start of the conversation lifecycle.
>  
>   /**
>    * Destroys the current conversation if it's transient. Stores it 
> for conversation
>    * propagation if it's non-transient
>    *
>    * @return
>    * @throws IllegalStateException if the conversation context is not 
> active
>    */
>   public abstract ConversationManager cleanupConversation();
> // usecase: end of the conversation lifecycle.
>  
>   /**
>    * Gets the current non-transient conversations
>    *
>    * @return The conversations mapped by id
>    * @throws IllegalStateException if the conversation context is not 
> active
>    */
>   public abstract Map<String, Conversation> getConversations();
> // usecase: Conversation checks if begin(String) was called with a 
> known cid (no need for a isCidInUse, actually)
>
>   /**
>    * Returns a new, session-unique conversation ID
>    *
>    * @return The conversation id
>    * @throws IllegalStateException if the conversation context is not 
> active
>    */  
>   public abstract String generateConversationId();
> // usecase: Conversation gets a cid for begin()  
>
> Notice that the begin and end of lifecycle are big chunks. Speak up 
> where you need more granularity. Also speak up if you want fancy 
> switching stuff etc ;-) *Re-submit any wishes/suggestions you've done 
> in the past* in this thread (method signature + usecase) so we can 
> keep stuff together.
>
> ---
> Nik
>



More information about the weld-dev mailing list