PropertyUtils.clearDescriptors() call in ActionServlet.destroy() method is
causing appliction classloader memory leak on Weblogic Portal
----------------------------------------------------------------------------------------------------------------------------------------
Key: STR-3110
URL: https://issues.apache.org/struts/browse/STR-3110
Project: Struts 1
Issue Type: Bug
Components: Core
Affects Versions: 1.2.7
Environment: Weblogic Portal on windows
Reporter: Roopang Chauhan
PropertyUtils.clearDescriptors() is being called from ActionServlet.destroy()
when undeploying an appliction. This call is made after LogFactory.release().
LogFactory.release() removes the application classloader instance from the
LogFactory class. However PropertyUtils.clearDescriptors() causes
LogFactory.getFactory() to be invoked again:
getFactory():218, org.apache.commons.logging.LogFactory
getLog():351, org.apache.commons.logging.LogFactory
<init>():130, org.apache.commons.beanutils.ConvertUtilsBean
<init>():110, org.apache.commons.beanutils.BeanUtilsBean
initialValue():68, org.apache.commons.beanutils.BeanUtilsBean$1
get():80, org.apache.commons.beanutils.ContextClassLoaderLocal
getInstance():78, org.apache.commons.beanutils.BeanUtilsBean
getInstance():101, org.apache.commons.beanutils.PropertyUtilsBean
clearDescriptors():121, org.apache.commons.beanutils.PropertyUtils
destroy():308, org.apache.struts.action.ActionServlet
This puts the application classloader instance back in the factories hashmap in
LogFactory after which it is never removed. This causes a leak.
I think that the PropertyUtils.clearDescriptors() call should be made before
LogFactory.release() and that should fix this problem. I just tried using an
earlier version of struts without the PropertyUtils.clearDescriptors() call and
that solved the application classloader memory leak.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.