You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by da...@apache.org on 2012/09/10 19:00:25 UTC
svn commit: r1382983 -
/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/DefaultDatabaseLocker.java
Author: davsclaus
Date: Mon Sep 10 17:00:25 2012
New Revision: 1382983
URL: http://svn.apache.org/viewvc?rev=1382983&view=rev
Log:
AMQ-3994: Fixed JDBC connection leak if link failure. Thanks to Philip Bridger for the patch.
Modified:
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/DefaultDatabaseLocker.java
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/DefaultDatabaseLocker.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/DefaultDatabaseLocker.java?rev=1382983&r1=1382982&r2=1382983&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/DefaultDatabaseLocker.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/DefaultDatabaseLocker.java Mon Sep 10 17:00:25 2012
@@ -44,10 +44,10 @@ public class DefaultDatabaseLocker exten
protected DataSource dataSource;
protected Statements statements;
- protected PreparedStatement lockCreateStatement;
- protected PreparedStatement lockUpdateStatement;
- protected Connection connection;
- protected boolean stopping;
+ protected volatile PreparedStatement lockCreateStatement;
+ protected volatile PreparedStatement lockUpdateStatement;
+ protected volatile Connection connection;
+ protected volatile boolean stopping;
protected Handler<Exception> exceptionHandler;
protected int queryTimeout = 10;
@@ -148,23 +148,25 @@ public class DefaultDatabaseLocker exten
} catch (SQLFeatureNotSupportedException e) {
LOG.warn("Failed to cancel locking query on dataSource" + dataSource, e);
}
- try {
- if (connection != null && !connection.isClosed()) {
+
+ // when the connection is closed from an outside source (lost TCP
+ // connection, db server, etc) and this connection is managed by a pool
+ // it is important to close the connection so that we don't leak
+ // connections
+
+ if (connection != null) {
+ try {
+ connection.rollback();
+ } catch (SQLException sqle) {
+ LOG.warn("Exception while rollbacking the connection on shutdown. This exception is ignored.", sqle);
+ } finally {
try {
- connection.rollback();
- } catch (SQLException sqle) {
- LOG.warn("Exception while rollbacking the connection on shutdown", sqle);
- } finally {
- try {
- connection.close();
- } catch (SQLException ignored) {
- LOG.debug("Exception while closing connection on shutdown", ignored);
- }
- lockCreateStatement = null;
+ connection.close();
+ } catch (SQLException ignored) {
+ LOG.debug("Exception while closing connection on shutdown. This exception is ignored.", ignored);
}
+ lockCreateStatement = null;
}
- } catch (SQLException sqle) {
- LOG.warn("Exception while checking close status of connection on shutdown", sqle);
}
}