[weld-dev] A ConversationManager API

Nicklas Karlsson nickarls at gmail.com
Mon Feb 1 06:36:08 EST 2010


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 at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/weld-dev/attachments/20100201/3ef1d471/attachment-0001.html 


More information about the weld-dev mailing list