Classloader memory leak because of ThreadLocal in ResultObjectFactoryUtil
-------------------------------------------------------------------------

                 Key: IBATIS-540
                 URL: https://issues.apache.org/jira/browse/IBATIS-540
             Project: iBatis for Java
          Issue Type: Bug
          Components: SQL Maps
    Affects Versions: 2.3.3, 2.3.4
            Reporter: Sylvain Laurent
         Attachments: ibatis patch for classloader memleak.txt

I'm using iBatis in a webapp with Spring and facing memory leaks upon 
redeployment oft he webapp.
I tracked the leaks to ibatis, where the class ResultObjectFactoryUtil has a 
static ThreadLocal factorySettings

The problem is that the value bound to a Thread through this ThreadLocal is 
never nullified, and since the "factorySettings" is a static variable, the 
ThreadLocal instance is reachable as long as the ClassLoader of the webapp is 
reachable. But since the FactorySettings instance is bound to the Thread 
through a strong reference (see the JDK implementation of ThreadLocal in 
ThreadLocalMap$Entry), the classloader is finally never collected...

The solution is to always cleanup the ThreadLocal after usage (in SqlExecurtor)
I attach a patch for iBatis 2.3.4 to this issue

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