|Leonardo Uribe||May 10, 2011 7:48 pm|
|Gerhard Petracek||May 10, 2011 11:10 pm|
|Werner Punz||May 11, 2011 9:05 am|
|Gerhard Petracek||May 11, 2011 9:23 am|
|Leonardo Uribe||May 11, 2011 12:41 pm|
|Gerhard Petracek||May 11, 2011 4:56 pm|
|Leonardo Uribe||May 13, 2011 6:26 pm|
|Jakob Korherr||May 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|
2011/5/14 Leonardo Uribe <lu4...@gmail.com>:
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.
-- Jakob Korherr