Yes, the spec says they can't cross session boundaries but it could be added to the javadocs

On Mon, Feb 1, 2010 at 1:26 PM, Henri Chen <henrichen@zkoss.org> wrote:
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





--
---
Nik