Hi all,

reading comments to JBSEAM-976 (http://jira.jboss.com/jira/browse/JBSEAM-976) I 
read this:

anonymous wrote : 
  | Gavin King [20/Mar/07 08:27 PM]
  | 
  | Anyway, now that we have the now < conversation > stuff in pages.xml, we 
should deprecate @Begin(id=....).
  | 

I had a look both at the current documentation and software provided 
(1.2.0PATCH1) and the roadmap to SEAM 1.3.0BETA1 and I did not find any (but if 
I'm wrong please tell me how) other thing which makes available such feature 
(<conversation-begin> seems not to support the id parameter and I did not find 
other stuff related to the pages.xml to handle it).

anonymous wrote : 
  | Gavin King [20/Mar/07 08:27 PM]
  | 
  | Right, its not a bug. You should not expect @Begin(join=true, id="#{..}") 
to do anything if there is an existing long-running conversation. That would be 
totally evil. You would be switching from one LRC to another.
  | 

What can I say.. Yes, I would be (and I can with the current Seam code) 
switching from one LRC to another, and I do not understand why this is evil, 
indeed, the conversation management of Seam actually detects for me if the user 
asks for a service he asked for before and automatically resumes the correct 
conversation and it's data. I cannot base my app on pageflow or navigation 
rules because I'm trying to provide a set of services to the end user collected 
in the same *workspace*. 

The workspace loads the modules at compile time through a configuration file 
and some rules, e.g. interfaces, the modules have to adhere to be plugged in 
the workspace, each module lives in its conversation; the navigation rules are 
trivial: when a user asks for a service.. do it (display the page -> open a 
tab.. the workspace looks like a desktop app (everything *se(a)ems* :) to be in 
the same page) with a list of the services available on the left and a working 
area on the right, arranged as a tabbed view to allow a fast switch between a 
service and another).

A service can have more than one instance (same service in more than a tab), 
this means that I have the same outcome, the same view-id but not the same 
conversation id.

Each service *needs* a top level long running conversation and cannot work with 
nested ones because the user can close a tab (end a conversation) and I need a 
way to remove a conversation without removing all the other conversations 
nested in it (because if a user asks for the remotion of one service he does 
not.. and all the others I opened after it).

Is this that evil? And if, why?

Now I would like to say something about the JBSEAM-976 rejection.

anonymous wrote : 
  | Shane Bryzak [20/Mar/07 08:14 PM]
  | 
  | The submitted test case does not start a new conversation. Besides, this 
feature is going to become deprecated in favour of the new natural conversation 
ids feature. 
  | 

If you say from the second call to the @Begin method.. yes, it's true, but it's 
not the reason of the submitted issue, indeed, from doc's 6.6:

anonymous wrote : Clearly, these example result in the same conversation id 
every time a particular hotel, blog or task is selected.
  | So what happens if a conversation with the same conversation id already 
exists when the new conversation begins?
  | Well, Seam detects the existing conversation and redirects to that 
conversation without running the
  | @Begin method again. This feature helps control the number of workspaces 
that are created when using workspace
  | management.

then I expect that the @Begin method will no more called after the first time 
(for the same conversation id), but since the 1.1.1GA it does.
I made some tests on it modifying a little the test case: I added another 
action and a "catchall" action in the pages.xml


  | <pages>
  |     <page view-id="/*" action="#{sessionHandler.checkConversation}"></page>
  | </pages>
  | 

the checkConversation is trivial.. prints on the server the conversation status

  |     public String checkConversation() {
  |             String result = null;
  | 
  |             Logger.getLogger(this.getClass()).info("<CHECK CONVERSATION> IS 
THERE A LONG RUNNING CONVERSATION: " + (Conversation.instance().isLongRunning() 
? "YES" : "NO"));
  |             Logger.getLogger(this.getClass()).info("<CHECK CONVERSATION> IS 
THERE A NESTED CONVERSATION: " + (Conversation.instance().isNested() ? "YES" : 
"NO"));
  |             Logger.getLogger(this.getClass()).info("<CHECK CONVERSATION> 
LONG RUNNING CONVERSATION ID IS: " + Conversation.instance().getId());
  |             Logger.getLogger(this.getClass()).info("<CHECK CONVERSATION> 
LONG RUNNING CONVERSATION VIEW ID IS: " + Conversation.instance().getViewId());
  |             Logger.getLogger(this.getClass()).info("<CHECK CONVERSATION> 
LONG RUNNING CONVERSATION DESCRIPTION IS: " + 
Conversation.instance().getDescription());
  |             
  |             return result;
  |     }
  | 

and I checked the behaviour, these are the results:

when the app starts the catchall method prints out this:

  | 2007-03-27 10:56:13,868 INFO  [org.jboss.seam.contexts.Lifecycle] starting 
up: org.jboss.seam.security.identity
  | 2007-03-27 10:56:13,918 INFO  [org.jboss.seam.core.Pages] reading pages.xml
  | 2007-03-27 10:56:14,376 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: NO
  | 2007-03-27 10:56:14,376 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 2007-03-27 10:56:14,376 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: 1
  | 2007-03-27 10:56:14,378 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: null
  | 2007-03-27 10:56:14,379 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 
as expected a temporary conversation is created with id 1 and will not be 
promoted because there's no conversation to begin.

Case 1 - @Begin(id=#{param.conversationId})
This should cover the case described in the documentation:
anonymous wrote : Clearly, these example result in the same conversation id 
every time a particular hotel, blog or task is selected.
  | So what happens if a conversation with the same conversation id already 
exists when the new conversation begins?
  | Well, Seam detects the existing conversation and redirects to that 
conversation without running the
  | @Begin method again. This feature helps control the number of workspaces 
that are created when using workspace
  | management.
I read, but maybe I'm wrong, when the @Begin method is called more than once on 
the same id, Seam catches this situation, switches to the long running and does 
not execute the @Begin method again (but we know that the last is not true), 
anyway, what happens:

a) I call the @Begin method of the actionone and the catchall (plus the 
actionone prints) say:

  | 2007-03-27 10:57:14,509 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: NO
  | 2007-03-27 10:57:14,509 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 2007-03-27 10:57:14,509 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: 2
  | 2007-03-27 10:57:14,509 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: null
  | 2007-03-27 10:57:14,509 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 2007-03-27 10:57:14,558 INFO  [it.seam.testcase.ActionOne] <ACTIONONE> 
START CONVERSATION METHOD CALLED
  | 2007-03-27 10:57:14,558 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: NO
  | 2007-03-27 10:57:14,558 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 2007-03-27 10:57:14,558 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: actionone
  | 2007-03-27 10:57:14,558 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: null
  | 2007-03-27 10:57:14,558 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 
Creating the temporary conversation with id actionone which will be promoted to 
a long running because we are starting a conversation

b) I call the @Begin method of the actionone again and the catchall says:

  | 2007-03-27 10:57:39,699 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: YES
  | 2007-03-27 10:57:39,699 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 2007-03-27 10:57:39,699 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: actionone
  | 2007-03-27 10:57:39,699 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: /actionone.xhtml
  | 2007-03-27 10:57:39,699 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 

great found and handled but...


  | 2007-03-27 10:45:45,441 DEBUG [org.jboss.seam.Component] done initializing: 
org.jboss.seam.core.events
  | 2007-03-27 10:45:45,441 DEBUG [org.jboss.seam.core.Events] Processing 
event:org.jboss.seam.postSetVariable.actionOne
  | 2007-03-27 10:45:45,442 ERROR [org.jboss.seam.jsf.SeamPhaseListener] 
uncaught exception
  | javax.faces.el.EvaluationException: Exception while invoking expression 
#{actionOne.startConversation}
  |         at 
org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:153)
  |         at 
org.jboss.seam.actionparam.ActionParamBindingHelper.invokeTheExpression(ActionParamBindingHelper.java:58)
  |         at 
org.jboss.seam.actionparam.ActionParamMethodBinding.invoke(ActionParamMethodBinding.java:75)
  |         at org.jboss.seam.core.Expressions$2.invoke(Expressions.java:106)
  |         at org.jboss.seam.core.Pages.callAction(Pages.java:466)
  |         at org.jboss.seam.core.Pages.enterPage(Pages.java:275)
  |         
  |         
  |         ....
  |         
  | Caused by: java.lang.IllegalStateException: begin method invoked from a 
long running conversation, try using @Begin(join=true) on method: start
  | Conversation
  |         at 
org.jboss.seam.interceptors.ConversationInterceptor.aroundInvoke(ConversationInterceptor.java:45)
  |         at 
org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
  |         at 
org.jboss.seam.interceptors.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:27)
  |         at 
org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
  | 

The programmer did not specify to join them and they did not join.. debug 
window, then, either I did not understand what's written in 6.6 or the doc is 
not complete because it does not work without a join.


Case 2 - @Begin(join=true, id=#{param.conversationId})

a) I call the @Begin method of the actionone and the catchall (plus the 
actionone prints) say:


  | 007-03-27 10:49:08,939 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: NO
  | 007-03-27 10:49:08,939 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 007-03-27 10:49:08,939 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: 2
  | 007-03-27 10:49:08,939 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: null
  | 007-03-27 10:49:08,939 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 007-03-27 10:49:08,991 INFO  [it.seam.testcase.ActionOne] <ACTIONONE> START 
CONVERSATION METHOD CALLED
  | 007-03-27 10:49:08,992 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: NO
  | 007-03-27 10:49:08,992 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 007-03-27 10:49:08,992 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: actionone
  | 007-03-27 10:49:08,992 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: null
  | 007-03-27 10:49:08,992 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 

Creating the temporary conversation with id actionone which will be promoted to 
a long running because we are starting a conversation.

b) I call the @Begin method of the actiontwo and the catchall (plus the 
actiontwo prints) say:


  | 007-03-27 10:49:19,257 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: NO
  | 007-03-27 10:49:19,257 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 007-03-27 10:49:19,257 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: 3
  | n007-03-27 10:49:19,257 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: null
  | 007-03-27 10:49:19,257 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 007-03-27 10:49:19,279 INFO  [it.seam.testcase.ActionTwo] <ACTIONTWO> START 
CONVERSATION METHOD CALLED
  | 007-03-27 10:49:19,279 INFO  [it.seam.testcase.ActionTwo] <START 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: NO
  | 007-03-27 10:49:19,279 INFO  [it.seam.testcase.ActionTwo] <START 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 007-03-27 10:49:19,279 INFO  [it.seam.testcase.ActionTwo] <START 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: actiontwo
  | 007-03-27 10:49:19,279 INFO  [it.seam.testcase.ActionTwo] <START 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: null
  | 007-03-27 10:49:19,279 INFO  [it.seam.testcase.ActionTwo] <START 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 

Creating the temporary conversation with id actiontwo which will be promoted to 
a long running because we are starting a conversation.

c) I call the @Begin method of the actionone again and the catchall (plus the 
actionone prints) say:


  | 007-03-27 10:49:27,811 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: YES
  | 007-03-27 10:49:27,811 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 007-03-27 10:49:27,811 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: actionone
  | 007-03-27 10:49:27,811 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: /actionone.xhtml
  | 007-03-27 10:49:27,811 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 007-03-27 10:49:27,812 INFO  [it.seam.testcase.ActionOne] <ACTIONONE> START 
CONVERSATION METHOD CALLED
  | 007-03-27 10:49:27,812 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: YES
  | 007-03-27 10:49:27,812 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 007-03-27 10:49:27,812 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: actionone
  | 007-03-27 10:49:27,812 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: /actionone.xhtml
  | 007-03-27 10:49:27,812 INFO  [it.seam.testcase.ActionOne] <START 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 

Found actionone conversation and switched to (everything handled).

d) I call the @Begin method of the actiontwo again and the catchall (plus the 
actiontwo prints) say:


  | 007-03-27 10:49:38,523 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: YES
  | 007-03-27 10:49:38,523 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 007-03-27 10:49:38,523 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: actiontwo
  | 007-03-27 10:49:38,523 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: /actiontwo.xhtml
  | 007-03-27 10:49:38,523 INFO  [it.seam.testcase.SessionHandler] <CHECK 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 007-03-27 10:49:38,523 INFO  [it.seam.testcase.ActionTwo] <ACTIONTWO> START 
CONVERSATION METHOD CALLED
  | 007-03-27 10:49:38,523 INFO  [it.seam.testcase.ActionTwo] <START 
CONVERSATION> IS THERE A LONG RUNNING CONVERSATION: YES
  | 007-03-27 10:49:38,523 INFO  [it.seam.testcase.ActionTwo] <START 
CONVERSATION> IS THERE A NESTED CONVERSATION: NO
  | 007-03-27 10:49:38,523 INFO  [it.seam.testcase.ActionTwo] <START 
CONVERSATION> LONG RUNNING CONVERSATION ID IS: actiontwo
  | 007-03-27 10:49:38,523 INFO  [it.seam.testcase.ActionTwo] <START 
CONVERSATION> LONG RUNNING CONVERSATION VIEW ID IS: /actiontwo.xhtml
  | 007-03-27 10:49:38,523 INFO  [it.seam.testcase.ActionTwo] <START 
CONVERSATION> LONG RUNNING CONVERSATION DESCRIPTION IS: null
  | 

Found actiontwo conversation and switched to (everything handled).

Everything seems to work properly except the reason of the issue JBSEAM-976, 
indeed the @Begin method is called more than once.

I tried also without ids in the @Begin, this causes the creation of a brand new 
conversation for every call to the @Begin method, but this is not enough for 
the app I'm building.


I don't know if you plan to remove the join=true related to a @Begin(id=...)  
but please don't remove the explicit id facility, we wrote a lot of code based 
on this and the remotion causes the loss of a huge amount of time.


Regards,
Raffaele Camanzo



View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4032002#4032002

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4032002
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to