You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by st...@apache.org on 2013/10/18 23:25:56 UTC

svn commit: r1533640 - /openjpa/branches/2.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java

Author: struberg
Date: Fri Oct 18 21:25:56 2013
New Revision: 1533640

URL: http://svn.apache.org/r1533640
Log:
OPENJPA-2440 close connection after not using it anymore

this prevents leaks like the one reported by rmannibucau.

Modified:
    openjpa/branches/2.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java

Modified: openjpa/branches/2.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java?rev=1533640&r1=1533639&r2=1533640&view=diff
==============================================================================
--- openjpa/branches/2.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java (original)
+++ openjpa/branches/2.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java Fri Oct 18 21:25:56 2013
@@ -438,11 +438,17 @@ public class SchemaTool {
             for (int j = 0; j < ts.length; j++)
                 tables.add(ts[j]);
         }
-        Table[] tableArray = (Table[]) tables.toArray(new Table[tables.size()]);
-        String[] sql = _conf.getDBDictionaryInstance()
-            .getDeleteTableContentsSQL(tableArray,_ds.getConnection());
-        if (!executeSQL(sql))
-            _log.warn(_loc.get("delete-table-contents"));
+        Table[] tableArray = tables.toArray(new Table[tables.size()]);
+        Connection conn = _ds.getConnection();
+        try {
+            String[] sql = _conf.getDBDictionaryInstance()
+                .getDeleteTableContentsSQL(tableArray, conn);
+            if (!executeSQL(sql)) {
+                _log.warn(_loc.get("delete-table-contents"));
+            }
+        } finally {
+            closeConnection(conn);
+        }
     }
 
     /**
@@ -1099,7 +1105,13 @@ public class SchemaTool {
      */
     public boolean dropForeignKey(ForeignKey fk)
         throws SQLException {
-        return executeSQL(_dict.getDropForeignKeySQL(fk,_ds.getConnection()));
+        Connection conn = _ds.getConnection();
+        try {
+            return executeSQL(_dict.getDropForeignKeySQL(fk,conn));
+        } finally {
+            closeConnection(conn);
+        }
+
     }
 
     /**
@@ -1240,11 +1252,14 @@ public class SchemaTool {
                 }
             }
             finally {
-                if (!wasAuto)
+                if (!wasAuto) {
                     conn.setAutoCommit(false);
+                }
+
                 try {
-                    conn.close();
+                    closeConnection(conn);
                 } catch (SQLException se) {
+                    //X TODO why catch silently?
                 }
             }
         } else {
@@ -1538,6 +1553,12 @@ public class SchemaTool {
         return true;
     }
 
+    private void closeConnection(Connection conn) throws SQLException {
+        if (conn != null && !conn.isClosed()) {
+            conn.close();
+        }
+    }
+
     /**
      * Run flags.
      */