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.

Reply via email to