Hi,

On Mon, 2008-03-31 at 22:36 +0200, a clem wrote:
> Hi,
> 
> I'm currently playing with this great framework Orchestra, trying to
> build some small examples and a few questions came to my mind:
> Is it possible to start a new conversation explicitly
> (programitically). I've looked to the API but there doesn't seem to be
> something like a begin or start method in it?

Well, there are two answers to this :-)

(1) 

If you configure a bean A in Spring to inject some other bean B that is
configured in a conversation scope, then what is actually injected is a
proxy. The bean B isn't actually created, and the conversation is not
created to hold it (though the conversation might already exist if there
are multiple beans in the same conversation).

Then if A invokes any method on B, that triggers the creation of an
actual instance of B plus the conversation to hold it (if the
conversation does not yet exist).

So I guess you could call that "programmatic" creation of a
conversation; whether B is in the conversation or not is controlled by
what A does.

(2)
But if you mean actually creating a Conversation object then placing
objects in it, then no I don't think that is currently possible (or at
least not easy).

In theory there is no reason why Orchestra couldn't support that, I just
think we didn't consider it useful. If there is a good use case then I'm
sure that could be added.

The principle is simple: create a Conversation object then get a
reference to the current ConversationContext and add it. But the problem
is that there are a bunch of settings that a conversation can have which
are defined by a ConversationFactory (which is a mandatory parameter to
the Conversation constructor at the moment). This factory is really
expected to be a Spring scope manager object or similar; I don't know if
it is possible to look this up nicely, or whether it is actually needed
for manually-created conversations. But the settings would need to be
defined somewhere.

Method ConversationManager.getConversation(name) will return
conversations by name, but returns null if the conversation does not
exist; I don't think there is a way of forcing it to exist.

Note that a bean which is *already* in a conversation can add extra
objects to its own conversation via Conversation.setAttribute.

> Can the same backing bean belong to more that one conversation type?
> In other world can I share a view between multiples conversations? It
> seem's that backing beans can only have one conversation name.

No, a bean is expected to be in only one conversation. I think things
would get quite confusing otherwise. For a start, if persistence is
being used with conversations, then a bean could have two persistence
contexts associated with it simultaneously which would be tricky :-)

A bean in one conversation can quite happily call a bean in another
conversation of course (orchestra conversations are not like WebFlow or
Seam conversations).

What would the use case be for this?

>  And
> finally, is it possible to have nested conversation contexts? Thank's
> for all your coming responses! :)

No, but that feature is definitely on the to-do list.

Orchestra does support multiple concurrent named conversations, as I'm
sure you're aware. That solves many of the use-cases for nested
conversations but not all of them.

Good questions - I should put these on the Orchestra wiki FAQ page.
Unless perhaps you would be willing to do that?

Regards,
Simon


Reply via email to