Fixed a bug which prevented zombie connections to be reinitialized.
authorMarco Zanon <info@marcozanon.com>
Wed, 17 Jan 2018 11:15:24 +0000 (11:15 +0000)
committerMarco Zanon <info@marcozanon.com>
Wed, 17 Jan 2018 11:15:24 +0000 (11:15 +0000)
6.x/src/java/com/marcozanon/macaco/database/MDatabaseConnection.java

index 0e189a42dab981847a5151b4ce197b6e6e81c158..b84ad8a3f33d512a5412fea2420b9744f5ed20b0 100644 (file)
@@ -94,16 +94,12 @@ public class MDatabaseConnection extends MObject {
         }
     }
 
-    protected void check() {
+    protected void check() throws MDatabaseConnectionFailureException {
         try {
             this.getConnection().prepareStatement("/* ping */ SELECT 1", PreparedStatement.RETURN_GENERATED_KEYS);
         }
         catch (SQLException exception) {
-            try {
-                this.initialize();
-            }
-            catch (MDatabaseConnectionFailureException exception2) { // should not happen
-            }
+            this.initialize();
         }
     }
 
@@ -197,6 +193,9 @@ public class MDatabaseConnection extends MObject {
             this.setTransactionStatus(MDatabaseConnection.TransactionStatus.SUCCESSFUL);
             this.logStatement("### BEGIN TRANSACTION ###");
         }
+        catch (MDatabaseConnectionFailureException exception) {
+            throw new MSqlTransactionException("Could not start transaction.", exception);
+        }
         catch (SQLException exception) {
             throw new MSqlTransactionException("Could not start transaction.", exception);
         }
@@ -283,6 +282,12 @@ public class MDatabaseConnection extends MObject {
             results = new MSqlStatementResults(preparedStatement, localTypesMode);
             this.logStatement(preparedStatement.toString());
         }
+        catch (MDatabaseConnectionFailureException exception) {
+            if (MDatabaseConnection.TransactionStatus.SUCCESSFUL == this.getTransactionStatus()) {
+                this.setTransactionStatus(MDatabaseConnection.TransactionStatus.FAILED);
+            }
+            throw new MSqlStatementException(String.format("Could not execute prepared statement: %s.", preparedStatement), exception);
+        }
         catch (SQLException exception) {
             if (MDatabaseConnection.TransactionStatus.SUCCESSFUL == this.getTransactionStatus()) {
                 this.setTransactionStatus(MDatabaseConnection.TransactionStatus.FAILED);