Hello,

(first of all excuse my bad English).

when a conversationId is restored from the PageContext (this happens when a 
Faces request is received), the validateLongRunningConversation property of 
org.jboss.seam.core.ConversationPropagation is set to 
page.isConversationLongRunning().

Consequently, in the case of a long-running conversation, 
org.jboss.seam.core.Manager.restoreConversation() returns true or false, 
depending on whether or not the conversation was successfully restored.


In contrast,  when a non-faces request is received,  the conversationId  is 
retrieved from the request parameters and the validateLongRunningConversation 
of org.jboss.seam.core.ConversationPropagation remains false.

Consequently, in the case of a long-running conversation, 
org.jboss.seam.core.Manager.restoreConversation() always returns true, even 
when it was not possible anymore to restore the long-running conversation and a 
fresh temporary conversation was  therefore created instead.    (see the last 
line of org.jboss.seam.core.Manager.restoreConversation() ).
 // last line of org.jboss.seam.core.Manager.restoreConversation() 
  | 
  | public boolean restoreConversation() 
  | { ConversationPropagation cp = ConversationPropagation.instance();
  | ...
  | 
  |   return restoreAndLockConversation(ce) || 
!cp.isValidateLongRunningConversation();
  | }
  | 

It follows that for non-faces requests we don't have a validation of 
long-running conversations.  


  | class org.jboss.seam.jsf.SeamPhaseListener  {
  | ...
  | 
  |  /**
  |     * Restore the page and conversation contexts during a JSF request
  |     */
  |    protected void afterRestoreView(FacesContext facesContext)
  |    {
  |       FacesLifecycle.resumePage();
  |       Map parameters = 
facesContext.getExternalContext().getRequestParameterMap();
  |             
ConversationPropagation.instance().restoreConversationId(parameters);
  |       boolean conversationFound = Manager.instance().restoreConversation();
  |       FacesLifecycle.resumeConversation( facesContext.getExternalContext() 
);
  | 
  |       // see my notes above:  For non-faces requests conversationFound is 
  | // always true, even if the conversation was actually not found  and a 
  | // temporary conversation was created
  |       if (!conversationFound)
  |       {
  |          Pages.instance().redirectToNoConversationView();
  |       }
  |  


I thought about what could be Gavin's intention that there is no validation of 
long-running conversations when a non-faces request is received. 
Perhaps the reason is that URLs are bookmarkable and the user could bookmark a 
URL that contains a conversationID of a long-running conversation.    If the 
user then makes a request with this bookmarked URL, he would not be able to 
access the corresponding page if the conversationID contained in the URL was 
validated.

But we pay a big price if we simply give up the validation of long-running 
conversations.        I think it would be much better if the last line of
org.jboss.seam.core.Manager.restoreConversation()  was simply as follows:



  |  // last line of org.jboss.seam.core.Manager.restoreConversation() 
  | 
  | public boolean restoreConversation() 
  | { ConversationPropagation cp = ConversationPropagation.instance();
  | ...
  | 
  |   return restoreAndLockConversation(ce);
  | }
  | 


In order to support bookmarkable URLs where a contained conversation ID should 
not be validated, we could simply add another request parameter to indicate 
that restoreConversation should return true even if the long-running 
conversation couldn't be successfully restored.

 
Please give us the same validation behavior for non-faces requests as we have 
for faces requests!


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

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

Reply via email to