[
https://issues.apache.org/jira/browse/ORCHESTRA-55?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12975265#action_12975265
]
Jose Luis Freire commented on ORCHESTRA-55:
-------------------------------------------
Ok... There's already a "ignoreViewIds" property, that combined with
ORCHESTRA-54 works around this issue.
I still believe that we can do it in a more elegant way. Maybe not using a JSF
PhaseListener to handle access scoped conversations, but working with
OrchestraServletFilter.
> Access Scoped Conversation is incompatible with RichFaces 3.3.3
> ---------------------------------------------------------------
>
> Key: ORCHESTRA-55
> URL: https://issues.apache.org/jira/browse/ORCHESTRA-55
> Project: MyFaces Orchestra
> Issue Type: Bug
> Components: Conversation
> Affects Versions: 1.4
> Environment: Orchestra 1.4
> JSF 1.2
> RichFaces 3.3.3
> Reporter: Jose Luis Freire
> Priority: Critical
>
> This one is pretty twisted...
> RichFaces Resource Filter handles resources by simulating a faces request
> (see
> http://anonsvn.jboss.org/repos/richfaces/tags/3.3.3.Final/framework/impl/src/main/java/org/ajax4jsf/resource/ResourceLifecycle.java).
> The Orchestra heuristics to evaluate the need to invalidate scoped
> conversations makes the following assumptions:
> 1) There is only one request per page, being the exception AJAX requests
> where the viewId doesn't change;
> 2) Rely on renderResponse to evaluate if we're processing a new page (one
> that isn't a postback),
> With technologies like RichFaces this isn't true.
> RichFaces prior to 3.3.3 had a bug that simulated all JSF phases, but now it
> only simulates phase 1 (RESTORE_VIEW) and phase 6 (RENDER_RESPONSE).
> They achieve this by calling FacesContext.renderResponse() that sets
> renderResponse to TRUE to bypass all intermediate phases (see line 137 of
> ResourceLifecycle.java)
> Before 3.3.3, the renderResponse flag was false when handling RichFaces
> resources, and the Access Scoped conversations weren't evaluated because the
> current view was always set as the old view in
> AccessScopePhaseListener.doAfterRestoreView, so in doAfterRenderResponse the
> (viewRoot != oldViewRoot) evaluation would never invalidate the conversations.
> Here is a log of the phases in a single request to page /security/login.xhtml:
> 2010-12-16 19:06:49,441 DEBUG [TP-Processor2] (c.v.w.PhaseListener:119) -
> before RESTORE_VIEW 1
> 2010-12-16 19:06:49,448 DEBUG [TP-Processor2] (c.v.w.PhaseListener:68) -
> after RESTORE_VIEW 1
> 2010-12-16 19:06:49,449 INFO [TP-Processor2] (c.v.w.PhaseListener:72) -
> ViewID: /security/login.xhtml
> 2010-12-16 19:06:49,449 DEBUG [TP-Processor2] (c.v.w.PhaseListener:119) -
> before APPLY_REQUEST_VALUES 2
> 2010-12-16 19:06:49,456 DEBUG [TP-Processor2] (c.v.w.PhaseListener:68) -
> after APPLY_REQUEST_VALUES 2
> 2010-12-16 19:06:49,457 DEBUG [TP-Processor2] (c.v.w.PhaseListener:119) -
> before PROCESS_VALIDATIONS 3
> 2010-12-16 19:06:49,465 DEBUG [TP-Processor2] (c.v.w.PhaseListener:68) -
> after PROCESS_VALIDATIONS 3
> 2010-12-16 19:06:49,466 DEBUG [TP-Processor2] (c.v.w.PhaseListener:119) -
> before UPDATE_MODEL_VALUES 4
> 2010-12-16 19:06:49,467 DEBUG [TP-Processor2] (c.v.w.PhaseListener:68) -
> after UPDATE_MODEL_VALUES 4
> 2010-12-16 19:06:49,467 DEBUG [TP-Processor2] (c.v.w.PhaseListener:119) -
> before INVOKE_APPLICATION 5
> 2010-12-16 19:06:52,414 DEBUG [TP-Processor2] (c.v.w.PhaseListener:68) -
> after INVOKE_APPLICATION 5
> 2010-12-16 19:06:52,415 DEBUG [TP-Processor2] (c.v.w.PhaseListener:119) -
> before RENDER_RESPONSE 6
> 2010-12-16 19:06:53,975 DEBUG [TP-Processor2] (c.v.w.PhaseListener:68) -
> after RENDER_RESPONSE 6
> 2010-12-16 19:06:54,067 DEBUG [TP-Processor2] (c.v.w.PhaseListener:119) -
> before RESTORE_VIEW 1
> 2010-12-16 19:06:54,068 DEBUG [TP-Processor2] (c.v.w.PhaseListener:68) -
> after RESTORE_VIEW 1
> 2010-12-16 19:06:54,068 INFO [TP-Processor2] (c.v.w.PhaseListener:72) -
> ViewID: /org/richfaces/renderkit/html/css/basic_classes.xcss
> 2010-12-16 19:06:54,069 DEBUG [TP-Processor2] (c.v.w.PhaseListener:119) -
> before RENDER_RESPONSE 6
> 2010-12-16 19:06:54,207 DEBUG [TP-Processor2] (c.v.w.PhaseListener:68) -
> after RENDER_RESPONSE 6
> 2010-12-16 19:06:54,212 DEBUG [TP-Processor3] (c.v.w.PhaseListener:119) -
> before RESTORE_VIEW 1
> 2010-12-16 19:06:54,212 DEBUG [TP-Processor3] (c.v.w.PhaseListener:68) -
> after RESTORE_VIEW 1
> 2010-12-16 19:06:54,212 INFO [TP-Processor3] (c.v.w.PhaseListener:72) -
> ViewID: /css/toolBar.xcss
> 2010-12-16 19:06:54,213 DEBUG [TP-Processor3] (c.v.w.PhaseListener:119) -
> before RENDER_RESPONSE 6
> 2010-12-16 19:06:54,218 DEBUG [TP-Processor3] (c.v.w.PhaseListener:68) -
> after RENDER_RESPONSE 6
> 2010-12-16 19:06:54,219 DEBUG [TP-Processor1] (c.v.w.PhaseListener:119) -
> before RESTORE_VIEW 1
> 2010-12-16 19:06:54,220 DEBUG [TP-Processor1] (c.v.w.PhaseListener:68) -
> after RESTORE_VIEW 1
> 2010-12-16 19:06:54,220 INFO [TP-Processor1] (c.v.w.PhaseListener:72) -
> ViewID: /org/richfaces/renderkit/html/css/extended_classes.xcss
> 2010-12-16 19:06:54,221 DEBUG [TP-Processor1] (c.v.w.PhaseListener:119) -
> before RENDER_RESPONSE 6
> 2010-12-16 19:06:54,283 DEBUG [TP-Processor1] (c.v.w.PhaseListener:68) -
> after RENDER_RESPONSE 6
> 2010-12-16 19:06:54,493 DEBUG [TP-Processor1] (c.v.w.PhaseListener:119) -
> before RESTORE_VIEW 1
> 2010-12-16 19:06:54,494 DEBUG [TP-Processor1] (c.v.w.PhaseListener:68) -
> after RESTORE_VIEW 1
> 2010-12-16 19:06:54,494 INFO [TP-Processor1] (c.v.w.PhaseListener:72) -
> ViewID: /org/richfaces/renderkit/html/css/modalPanel.xcss
> 2010-12-16 19:06:54,495 DEBUG [TP-Processor1] (c.v.w.PhaseListener:119) -
> before RENDER_RESPONSE 6
> 2010-12-16 19:06:54,505 DEBUG [TP-Processor1] (c.v.w.PhaseListener:68) -
> after RENDER_RESPONSE 6
> I don't know the best way to get around this, and my suggestion is an ugly
> hack for testing for specific signatures on the viewId to ignore, like if the
> viewId starts with "/org/richfaces", then we don't invalidate access scoped
> conversations.
> Maybe we could do it in some kind of configuration parameters (like a
> properties file), so that by default there's no exceptions, and we could add
> them case by case.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.