From 26a0f8214c0e5fd290f5ff45d7376d1eae2448fb Mon Sep 17 00:00:00 2001 From: Pascal Schumacher Date: Tue, 11 Feb 2020 21:11:25 +0100 Subject: [PATCH] AMQ-7403: Potential PreparedStatement/ResultSet leak in LeaseDatabaseLocker#determineTimeDifference --- .../store/jdbc/LeaseDatabaseLocker.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/activemq-jdbc-store/src/main/java/org/apache/activemq/store/jdbc/LeaseDatabaseLocker.java b/activemq-jdbc-store/src/main/java/org/apache/activemq/store/jdbc/LeaseDatabaseLocker.java index f6e7f2a5ed..547ee7efbf 100644 --- a/activemq-jdbc-store/src/main/java/org/apache/activemq/store/jdbc/LeaseDatabaseLocker.java +++ b/activemq-jdbc-store/src/main/java/org/apache/activemq/store/jdbc/LeaseDatabaseLocker.java @@ -133,19 +133,20 @@ public class LeaseDatabaseLocker extends AbstractJDBCLocker { } protected long determineTimeDifference(Connection connection) throws SQLException { - PreparedStatement statement = connection.prepareStatement(getStatements().getCurrentDateTime()); - ResultSet resultSet = statement.executeQuery(); - long result = 0l; - if (resultSet.next()) { - Timestamp timestamp = resultSet.getTimestamp(1); - long diff = System.currentTimeMillis() - timestamp.getTime(); - if (Math.abs(diff) > maxAllowableDiffFromDBTime) { - // off by more than maxAllowableDiffFromDBTime so lets adjust - result = (-diff); + try (PreparedStatement statement = connection.prepareStatement(getStatements().getCurrentDateTime()); + ResultSet resultSet = statement.executeQuery()) { + long result = 0l; + if (resultSet.next()) { + Timestamp timestamp = resultSet.getTimestamp(1); + long diff = System.currentTimeMillis() - timestamp.getTime(); + if (Math.abs(diff) > maxAllowableDiffFromDBTime) { + // off by more than maxAllowableDiffFromDBTime so lets adjust + result = (-diff); + } + LOG.info(getLeaseHolderId() + " diff adjust from db: " + result + ", db time: " + timestamp); } - LOG.info(getLeaseHolderId() + " diff adjust from db: " + result + ", db time: " + timestamp); + return result; } - return result; } public void doStop(ServiceStopper stopper) throws Exception {