From 446c9c4e5f7be8599d2b74185a4f1a0f9ea072df Mon Sep 17 00:00:00 2001 From: Marco Zanon Date: Wed, 17 Jan 2018 11:15:24 +0000 Subject: [PATCH] Fixed a bug which prevented zombie connections to be reinitialized. --- .../macaco/database/MDatabaseConnection.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/java/com/marcozanon/macaco/database/MDatabaseConnection.java b/src/java/com/marcozanon/macaco/database/MDatabaseConnection.java index 0e189a4..b84ad8a 100644 --- a/src/java/com/marcozanon/macaco/database/MDatabaseConnection.java +++ b/src/java/com/marcozanon/macaco/database/MDatabaseConnection.java @@ -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); -- 2.30.2