@Begin(join=true) is a no-op if a conversation already exists.
@Begin(join=false) throws an exception is a conversation already exists.
@Begin(nested=true) is way, way, way more subtle and complex. It essentially gives you a stack of continuable states at a particular point of execution, and a tree of continable states globally. Let me write that one up properly, it will take me some time. It is very powerful, but probably only for usage by geniuses.
In the booking example, the reason to have @Begin(join=true) is simply that I can press the search button multiple times. The conversation starts the *first* time i press it, and we stay in the same conversation no matter how many times we press.
So if I'm correct...
@Begin(join=true) uses the same conversation if one available, if not it creates one
@Begin(join=false) throws an exception if already started
as for the @Begin(nested=true) I can't wait to read about it...
There is an example app using nested conversations that I just checked into CVS. It is in examples/issues. This is still a bit of a work in progress, but it demonstrates the ideas, I suppose.