Enforced closing of useless connections.
authorMarco Zanon <info@marcozanon.com>
Sat, 15 Jul 2017 11:00:24 +0000 (11:00 +0000)
committerMarco Zanon <info@marcozanon.com>
Sat, 15 Jul 2017 11:00:24 +0000 (11:00 +0000)
5.x/src/java/com/marcozanon/macaco/database/MDatabaseConnectionPool.java

index d9712988a789ebef1c3c50725b258ebe4d33ca8e..bbb032343038bf72fbf5b7df2d1886979f038905 100644 (file)
@@ -47,6 +47,23 @@ public class MDatabaseConnectionPool extends MObject {
         }
     }
 
+    protected void closeConnections() {
+        LinkedList<MDatabaseConnection> databaseConnections = this.getDatabaseConnections();
+        while (0 < databaseConnections.size()) {
+            MDatabaseConnection databaseConnection = databaseConnections.removeLast();
+            //
+            try {
+                databaseConnection.close();
+            }
+            catch (MDatabaseConnectionFailureException exception) {
+            }
+        }
+    }
+
+    protected void finalize() {
+        this.closeConnections();
+    }
+
     /* Database connection generator. */
 
     protected MDatabaseConnectionGenerator getDatabaseConnectionGenerator() {
@@ -86,16 +103,18 @@ public class MDatabaseConnectionPool extends MObject {
         if (null == databaseConnection) {
             throw new IllegalArgumentException("Invalid 'databaseConnection': null.");
         }
-        else if (!this.getDatabaseConnectionGenerator().isGeneratorFor(databaseConnection)) {
-            throw new IllegalArgumentException("Invalid 'databaseConnection': not compatible with this database connection pool.");
-        }
         else if (databaseConnection.isClosed()) {
             throw new IllegalArgumentException("Invalid 'databaseConnection': closed.");
         }
         //
-        LinkedList<MDatabaseConnection> databaseConnections = this.getDatabaseConnections();
-        if (this.getMaximumSize() >= databaseConnections.size()) {
-            databaseConnections.add(databaseConnection);
+        if (!this.getDatabaseConnectionGenerator().isGeneratorFor(databaseConnection)) {
+            databaseConnection.close();
+        }
+        else {
+            LinkedList<MDatabaseConnection> databaseConnections = this.getDatabaseConnections();
+            if (this.getMaximumSize() >= databaseConnections.size()) {
+                databaseConnections.add(databaseConnection);
+            }
         }
     }