[ https://issues.apache.org/jira/browse/MYFACES-3675?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13554303#comment-13554303 ]
Neil Griffin commented on MYFACES-3675: --------------------------------------- Here is a patched ManagedBeanDestroyer.isManagedBean(String) method: {code} public boolean isManagedBean(String name) { boolean managed = false; if (_runtimeConfig.getManagedBean(name) == null) { // Section PLT.18.3 of the Portlet 2.0 Specification titled // "Binding Attributes into a Session" requires that // PortletSession attribute names be namespaced/prefixed with // the "javax.portlet.p.<ID>?" pattern. In order to determine // if the specified name is a SessionScoped managed-bean, it // is necessary to first strip the pattern from it. if ((name != null) && name.startsWith("javax.portlet.p.")) { int pos = name.indexOf("?"); if (pos > 0) { String attributeName = name.substring(pos+1); managed = (_runtimeConfig.getManagedBean(attributeName) != null); } } } else { managed = true; } return managed; } {code} > Session scoped beans are not cleaned up when PortletSession expires or is > invalidated > ------------------------------------------------------------------------------------- > > Key: MYFACES-3675 > URL: https://issues.apache.org/jira/browse/MYFACES-3675 > Project: MyFaces Core > Issue Type: Bug > Components: General > Affects Versions: 2.1.10 > Environment: Portlets > Reporter: Neil Griffin > > When running in the context of a request, MyFaces calls > FacesContext.getCurrentInstance().getExternalContext.getSessionMap() in order > to get/set session attributes. This provides the portlet bridge with the > ability to get/set attributes using the PortletSession, which is a layer of > abstraction on top of the HttpSession. But when a session expires, the > org.apache.myfaces.config.ManagedBeanDestroyer.isManagedBean(String) method > does not check the attribute name for a portlet environment. This causes a > memory leak when running in a portlet environment, because the portlet bridge > is not consulted. Specifically, @SessionScoped managed-beans are not cleaned > up. > The good news is that Section PLT.18.3 of the Portlet 2.0 Specification > titled "Binding Attributes into a Session" requires that PortletSession > attribute names be namespaced/prefixed with the "javax.portlet.p.<ID>?" > pattern when they are stored in the underlying HttpSession. This would enable > MyFaces to find the session attributes, so that cleanup can take place > correctly during session expiration/invalidation. > Here is the parallel issue in Mojarra: > http://java.net/jira/browse/JAVASERVERFACES-2691 -- 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