cbegin
Wed, 23 Dec 2009 07:43:55 -0800
Author: cbegin Date: Wed Dec 23 15:43:25 2009 New Revision: 893550 URL: http://svn.apache.org/viewvc?rev=893550&view=rev Log: ibatis-721 PermGen leak on undeploy in Tomcat 6.x (ThreadLocal in ErrorContext) Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/ErrorContext.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSessionFactoryBuilder.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSessionFactory.java Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/ErrorContext.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/ErrorContext.java?rev=893550&r1=893549&r2=893550&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/ErrorContext.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/ErrorContext.java Wed Dec 23 15:43:25 2009 @@ -84,6 +84,7 @@ message = null; sql = null; cause = null; + LOCAL.remove(); return this; } Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSessionFactoryBuilder.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSessionFactoryBuilder.java?rev=893550&r1=893549&r2=893550&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSessionFactoryBuilder.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSessionFactoryBuilder.java Wed Dec 23 15:43:25 2009 @@ -3,6 +3,7 @@ import org.apache.ibatis.builder.xml.XMLConfigBuilder; import org.apache.ibatis.exceptions.ExceptionFactory; import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory; +import org.apache.ibatis.executor.ErrorContext; import java.io.IOException; import java.io.Reader; @@ -30,6 +31,7 @@ } catch (Exception e) { throw ExceptionFactory.wrapException("Error building SqlSession.", e); } finally { + ErrorContext.instance().reset(); try { reader.close(); } catch (IOException e) { Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java?rev=893550&r1=893549&r2=893550&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java Wed Dec 23 15:43:25 2009 @@ -3,6 +3,7 @@ import org.apache.ibatis.exceptions.ExceptionFactory; import org.apache.ibatis.exceptions.TooManyResultsException; import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.executor.ErrorContext; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.ResultHandler; @@ -58,6 +59,8 @@ return executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER); } catch (Exception e) { throw ExceptionFactory.wrapException("Error querying database. Cause: " + e, e); + } finally { + ErrorContext.instance().reset(); } } @@ -71,6 +74,8 @@ executor.query(ms, wrapCollection(parameter), rowBounds, handler); } catch (Exception e) { throw ExceptionFactory.wrapException("Error querying database. Cause: " + e, e); + } finally { + ErrorContext.instance().reset(); } } @@ -93,6 +98,8 @@ return executor.update(ms, wrapCollection(parameter)); } catch (Exception e) { throw ExceptionFactory.wrapException("Error updating database. Cause: " + e, e); + } finally { + ErrorContext.instance().reset(); } } @@ -114,6 +121,8 @@ dirty = false; } catch (Exception e) { throw ExceptionFactory.wrapException("Error committing transaction. Cause: " + e, e); + } finally { + ErrorContext.instance().reset(); } } @@ -127,6 +136,8 @@ dirty = false; } catch (Exception e) { throw ExceptionFactory.wrapException("Error rolling back transaction. Cause: " + e, e); + } finally { + ErrorContext.instance().reset(); } } @@ -139,6 +150,8 @@ } } catch (Exception e) { throw ExceptionFactory.wrapException("Error closing transaction. Cause: " + e, e); + } finally { + ErrorContext.instance().reset(); } } Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSessionFactory.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSessionFactory.java?rev=893550&r1=893549&r2=893550&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSessionFactory.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSessionFactory.java Wed Dec 23 15:43:25 2009 @@ -2,6 +2,7 @@ import org.apache.ibatis.exceptions.ExceptionFactory; import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.executor.ErrorContext; import org.apache.ibatis.logging.Log; import org.apache.ibatis.logging.LogFactory; import org.apache.ibatis.logging.jdbc.ConnectionLogger; @@ -51,6 +52,8 @@ return new DefaultSqlSession(configuration, executor, autoCommit); } catch (SQLException e) { throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e); + } finally { + ErrorContext.instance().reset(); } } @@ -90,6 +93,8 @@ return new DefaultSqlSession(configuration, executor, autoCommit); } catch (Exception e) { throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e); + } finally { + ErrorContext.instance().reset(); } }