[ https://issues.apache.org/jira/browse/TUSCANY-3770?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Simon Laws updated TUSCANY-3770: -------------------------------- Attachment: ThreadMessageContext.java.patch A patch for the 2.x code base. Want to do this fix separately so I can be sure I'm not messing anything up. > Tomcat 7 reports a memory leak when stopping a Tuscany webapp > ------------------------------------------------------------- > > Key: TUSCANY-3770 > URL: https://issues.apache.org/jira/browse/TUSCANY-3770 > Project: Tuscany > Issue Type: Bug > Components: Java SCA Web App Integration > Affects Versions: Java-SCA-1.6 > Reporter: Simon Nash > Assignee: Simon Nash > Fix For: Java-SCA-1.6.1 > > Attachments: ThreadMessageContext.java.patch > > > On Tomcat 7, when a Tuscany webapp is stopped, the following message is > displayed: > SEVERE: The web application [/sample-calculator-webapp] created a > ThreadLocal with key of type [null] (value > [org.apache.tuscany.sca.core.invocation.ThreadMessageContext$1@1b071c0]) > and a value of type > [org.apache.tuscany.sca.core.invocation.MessageImpl] (value > [org.apache.tuscany.sca.core.invocation.MessageImpl@fbf51d]) > but failed to remove it when the web application was stopped. This is very > likely to create a memory leak. > This happens because Tuscany adds a thread-local ThreadMessageContext object > to every invocation thread when starting a request invocation and doesn't > remove this object when the request is complete. > There is code in WebAppServletHost.destroy() that attempts to remove this > context information when the webapp is stopped. This usually doesn't succeed > in removing the context information because the ThreadLocal.remove() method > only removes context information from the current thread and not from other > threads. There's no Java API for removing this information from other > threads. > The only way to remove this information is to track the completion of each > request invocation and remove the context information from the current thread > when the request has been completed. The context information will be > recreated for the next request on the thread. This is very easy to implement > by adding a few lines of code to the ThreadMessageContext class. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira