Author: grobmeier
Date: Fri Jan 13 23:16:48 2012
New Revision: 1231387

URL: http://svn.apache.org/viewvc?rev=1231387&view=rev
Log:
51597 JDBCAppender not closed due to SQL Exception while executing an SQL 
(thanks to Anurag Agarwal)

Modified:
    logging/log4j/trunk/src/changes/changes.xml
    logging/log4j/trunk/src/main/java/org/apache/log4j/jdbc/JDBCAppender.java

Modified: logging/log4j/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/changes/changes.xml?rev=1231387&r1=1231386&r2=1231387&view=diff
==============================================================================
--- logging/log4j/trunk/src/changes/changes.xml (original)
+++ logging/log4j/trunk/src/changes/changes.xml Fri Jan 13 23:16:48 2012
@@ -22,6 +22,7 @@
   <body>
     <release version="1.2.17" date="2010-06-99" description="Maintenance 
release">
        <action issue="49470">log4j 1.2.17 release preparation</action>
+       <action issue="51597" action="fix">JDBCAppender not closed due to SQL 
Exception while executing an SQL (thanks to Anurag Agarwal)</action>
        <action issue="50486" action="fix">Memoryleak - 
org.apache.log4j.helpers.ThreadLocalMap</action>
        <action issue="43282" action="fix">Eliminate duplicates in OSGi 
Import-Package directive.</action>
        <action issue="48588" action="fix">DOMConfigurator does not close input 
stream when configured based on URL.</action>

Modified: 
logging/log4j/trunk/src/main/java/org/apache/log4j/jdbc/JDBCAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/jdbc/JDBCAppender.java?rev=1231387&r1=1231386&r2=1231387&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/jdbc/JDBCAppender.java 
(original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/jdbc/JDBCAppender.java 
Fri Jan 13 23:16:48 2012
@@ -216,13 +216,12 @@ public class JDBCAppender extends org.ap
 
         stmt = con.createStatement();
         stmt.executeUpdate(sql);
-    } catch (SQLException e) {
-       if (stmt != null)
-            stmt.close();
-       throw e;
+    } finally {
+        if(stmt != null) {
+            stmt.close();
+        }
+        closeConnection(con);
     }
-    stmt.close();
-    closeConnection(con);
 
     //System.out.println("Execute: " + sql);
   }
@@ -284,15 +283,16 @@ public class JDBCAppender extends org.ap
     //Do the actual logging
     removes.ensureCapacity(buffer.size());
     for (Iterator i = buffer.iterator(); i.hasNext();) {
+      LoggingEvent logEvent = (LoggingEvent)i.next();
       try {
-        LoggingEvent logEvent = (LoggingEvent)i.next();
            String sql = getLogStatement(logEvent);
            execute(sql);
-        removes.add(logEvent);
       }
       catch (SQLException e) {
            errorHandler.error("Failed to excute sql", e,
                           ErrorCode.FLUSH_FAILURE);
+      } finally {
+        removes.add(logEvent);
       }
     }
     


Reply via email to