[ 
https://issues.apache.org/jira/browse/TRINIDAD-1193?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Matthias Weßendorf updated TRINIDAD-1193:
-----------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.0.10-core
                   1.2.10-core
         Assignee: Matthias Weßendorf
           Status: Resolved  (was: Patch Available)

Thanks to Blake Sullivan for his patch.

> Trinidad StateManagerImpl doesn't clean up UIViewRoot instances when 
> navigating from a page using a GET
> -------------------------------------------------------------------------------------------------------
>
>                 Key: TRINIDAD-1193
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-1193
>             Project: MyFaces Trinidad
>          Issue Type: Bug
>    Affects Versions: 1.0.9-core, 1.2.9-core
>         Environment: Affects all environments
>            Reporter: Blake Sullivan
>            Assignee: Matthias Weßendorf
>             Fix For: 1.2.10-core, 1.0.10-core
>
>         Attachments: trinidad-1193.patch
>
>
> The Trinidad StateManagerImpl optimizes state management by caching 
> UiViewRoot instances in the StateManagerImpl$PageState objects.  When 
> restoring a view with a cached UIViewRoot instance, the StateManagerImpl 
> clones the UIViewRoot instance and then moves the child component references 
> from the old UIViewRoot instance to the new UIViewRoot instance and then 
> nulls out the cached UIViewRoot.  When teh request completes, a new PageState 
> instance with the state of the response UiViewRoot is created.  As long as 
> POSTs are used (so that popView() is called and the old UIViewRoot instance 
> is nulled out, this scheme works well and allows mutiple windows to have 
> their own cached UIViewRoot instances (as long as they are viewing different 
> view ids).  However, if the user leaves the current page using any scheme 
> other than a POST, the UIViewRoot instance is never nulled out and the token 
> cache becomes populated with non-active PageStates that are still holding 
> onto their UIViewRoot instances, causing the Session storage to bloat.
> The fix guarantees that only the most recently used PageState has its 
> UIViewRoot by aggressively clearing the UIViewRoots of the last used 
> PageState when saving the new PageState.  The downside is that when multiple 
> windows are used by a user, only the most recently used window has the state 
> saving optimization, but the performance penalty is small and only occurs 
> when users switch windows.

-- 
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