[ 
https://issues.jboss.org/browse/RF-11992?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12716232#comment-12716232
 ] 

Ivan Ravin commented on RF-11992:
---------------------------------

I'm not sure whether its possible to set right Pragma header in AS.
Lets look what happenes when client calls RF resource from server.
This is schematic stack of calls:
AS layer -> Portal layer -> portlet bridge -> richfaces

1. In secured context AS layer (or maybe Portal layer) put default non-cache 
headers in real resonse. It include Pragma no-cache;
2. Bridge recognises RF request and transfers it to richfaces. It doesnt 
translate real response headers, but create own temporal headers map and put it 
in call stack;
3. RF recognises cacheable resourse and put cache headers (Expires, 
Cache-Control) in provided map 
(https://github.com/richfaces/core/blob/develop/impl/src/main/java/org/richfaces/resource/AbstractCacheableResource.java#L174).
After this stack pops back;
4. Bridge copies headers from temporal map keys/values to real response. For 
cacheble resource Pragma entry is absent in RF response, so it remains 
unchanged (no-cache) in real response. Here is problem.

Is it possible to set right header in AS/portal layer? I think not. Only RF 
knows about cacheability or resource. But RF doesnt have access to real 
response, so it cant clear wrong header. Thats why I suggested to add empty 
string value to RF response - its only way to overwrite Pragma header in real 
response.
Pehaps, its possible to clear Pragma header in bridge layer, but I think my 
solution is more trivial.
One more solution - overwrite AS code and put headers to real response after 
all interceptors, but I think it will not be so trivial too.
 
                
> cache bug in portlet
> --------------------
>
>                 Key: RF-11992
>                 URL: https://issues.jboss.org/browse/RF-11992
>             Project: RichFaces
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: core
>    Affects Versions: 3.3.3.Final, 4.2.0.CR1
>         Environment: jboss portal 2.7.2; Gatein portal
>            Reporter: Ivan Ravin
>            Priority: Minor
>              Labels: waiting_on_user
>
> On Jboss and Gatein portal richfaces cant be cached when user is logged in.
> Bug is found for richfaces 3.3.3 but i think can be reproduced for 4.x 
> because org.richfaces.resource.AbstractCacheableResource has similar code.
> The steps for reproduce bug are:
>     download portlet bridge 2.2 archive
>     deploy richFacesPortlet.war from portlet bridge archive (i used jboss 
> portal 2.7.2 bundle and GateIn-3.1.0-FINAL-jbossas)
>     look at network activity (i did with firefox + firebug, the same result 
> on any other browser). Just open page with richfaces portlet.
> When user is not logged in, all richfaces resources are caching well, and 
> this is headers returned by server:
> |Cache-Control        |max-age=86400|
> |Content-Type |text/javascript|
> |Date |Thu, 26 Jan 2012 17:57:39 GMT|
> |Expires      |27 Jan 2012 17:57:39 GMT|
> |Last-Modified        |26 Jan 2012 17:42:17 GMT|
> |Server       |Apache-Coyote/1.1|
> |X-Powered-By |Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA 
> date=200807181417)/JBossWeb-2.0|
> But when user is logged in all richfaces stuff come from network every time 
> (more than 1.3 mb).
> This is headers returned by portal 2.7.2 when user logged in:
> |Cache-Control        |{color:red}no-cache,{color} max-age=86400|
> |Content-Type |text/javascript|
> |Date |Thu, 26 Jan 2012 18:26:49 GMT|
> |Expires      |{color:red}Thu, 01 Jan 1970 03:00:00 MSK,{color} 27 Jan 2012 
> 18:26:49 GMT|
> |Last-Modified        |26 Jan 2012 18:05:56 GMT|
> |{color:red}Pragma{color}     |{color:red}No-cache{color}|
> |Server       |Apache-Coyote/1.1|
> |Transfer-Encoding    |chunked|
> |X-Powered-By |Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA 
> date=200807181417)/JBossWeb-2.0|
> The same problem with GateIn-3.1.0-FINAL-jbossas bundle, but now only one 
> wrong header:
> |Cache-Control        |max-age=86400|
> |Content-Type |text/javascript;charset=UTF-8|
> |Date |Sat, 28 Jan 2012 08:54:14 GMT|
> |Expires      |29 Jan 2012 08:54:14 GMT|
> |Last-Modified        |28 Jan 2012 08:51:11 GMT|
> |{color:red}Pragma{color}     |{color:red}No-cache{color}|
> |Server       |Apache-Coyote/1.1|
> |Transfer-Encoding    |chunked|
> |X-Powered-By |Servlet 2.5; JBoss-5.0/JBossWeb-2.1|
> This header (Pragma) appears only when user is logged in, and again, all 
> richfaces resources come through network.
> I did some debug and found that richfaces create good headers, but there is 
> some code in portal which put wrong values into real response before 
> richfaces. I cant find this code in portal sources, so maybe it is JBoss AS 
> problem, or third party component.
> In Gatein portal problem was partially resolved: it overwrites 2 wrong 
> headers with values provided by richfaces, but "pragma" header is absent in 
> richfaces response, and this way in secured portlets richfaces generate too 
> much unnesessary traffic.
> To solve problem for GateIn there is enough to provide empty Pragma header; 
> To solve problem for JBoss Portal its required to fix resource headers 
> processing in portal code, like it done in gatein.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
_______________________________________________
richfaces-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/richfaces-issues

Reply via email to