atom feed8 messages in org.apache.myfaces.devRe: [core] Enhancements to State Savi...
FromSent OnAttachments
Leonardo UribeMay 10, 2011 7:48 pm 
Gerhard PetracekMay 10, 2011 11:10 pm 
Werner PunzMay 11, 2011 9:05 am 
Gerhard PetracekMay 11, 2011 9:23 am 
Leonardo UribeMay 11, 2011 12:41 pm 
Gerhard PetracekMay 11, 2011 4:56 pm 
Leonardo UribeMay 13, 2011 6:26 pm 
Jakob KorherrMay 14, 2011 3:20 am 
Subject:Re: [core] Enhancements to State Saving Caching Algorithm
From:Jakob Korherr (jako@gmail.com)
Date:May 14, 2011 3:20:08 am
List:org.apache.myfaces.dev

Hi Leo,

Great job!

Regards, Jakob

2011/5/14 Leonardo Uribe <lu4@gmail.com>:

Hi

I finally committed a solution for this issue, and other cool optimizations in MYFACES-3117. I'll going to explain below which changes were done.

Now there exists a class called org.apache.myfaces.application.StateCache<K, V>, to delegate all logic related to state storing/retrieving in a cleaner way. Additionally a factory class org.apache.myfaces.application.StateCacheFactory is available, to provide alternate implementations in the future.

Two new params were added for server side stuff:

   /**     * Only applicable if state saving method is "server" (= default).     * Indicates the amount of views (default is not active) that should be stored in session between sequential     * POST or POST-REDIRECT-GET if org.apache.myfaces.USE_FLASH_SCOPE_PURGE_VIEWS_IN_SESSION is true.     * <p>For example, if this param has value = 2 and in your custom webapp there is a form that is clicked 3 times, only 2 views     * will be stored and the third one (the one stored the first time) will be removed from session, even if the view can     * store more sessions org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION. This feature becomes useful for multi-window applications.     * where without this feature a window can swallow all view slots so the other ones will throw ViewExpiredException.</p>     */    @JSFWebConfigParam(since="2.0.6")    private static final String NUMBER_OF_SEQUENTIAL_VIEWS_IN_SESSION_PARAM = "org.apache.myfaces.NUMBER_OF_SEQUENTIAL_VIEWS_IN_SESSION";

   /**     * Only applicable if state saving method is "server" (= default).     * Allow use flash scope to keep track of the views used in session and the previous ones,     * so server side state saving can delete old views even if POST-REDIRECT-GET pattern is used.     * The default value is false.     */    @JSFWebConfigParam(since="2.0.6", defaultValue="false", expectedValues="true, false")    private static final String USE_FLASH_SCOPE_PURGE_VIEWS_IN_SESSION = "org.apache.myfaces.USE_FLASH_SCOPE_PURGE_VIEWS_IN_SESSION";

Finally I founded a way to support POST-Redirect-GET pattern using flash scope.

By default, these two params are disabled.

Other optimizations that will reduce memory usage were done:

- Don't trigger session creation if state is not written on facelets. - Don't use a buffer to write the state token when server side state saving is used, because after all it is not necessary.

I think with these changes we can solve MYFACES-3117. With this code, we have a solid foundation to continue investigating how to solve the window-id problem.

Suggestions are welcome.

blog: http://www.jakobk.com twitter: http://twitter.com/jakobkorherr work: http://www.irian.at