diff --git a/core/src/main/java/com/zaxxer/hikari/HikariPool.java b/core/src/main/java/com/zaxxer/hikari/HikariPool.java index 7aec534e..6e4f5bbc 100644 --- a/core/src/main/java/com/zaxxer/hikari/HikariPool.java +++ b/core/src/main/java/com/zaxxer/hikari/HikariPool.java @@ -55,6 +55,7 @@ public final class HikariPool implements HikariPoolMBean private final DataSource dataSource; private final long leakDetectionThreshold; private final boolean jdbc4ConnectionTest; + private final boolean isAutoCommit; private final boolean delegationProxies; private final Timer houseKeepingTimer; @@ -76,6 +77,7 @@ public final class HikariPool implements HikariPoolMBean this.jdbc4ConnectionTest = configuration.isJdbc4ConnectionTest(); this.leakDetectionThreshold = configuration.getLeakDetectionThreshold(); + this.isAutoCommit = configuration.isAutoCommit(); String dsClassName = configuration.getDataSourceClassName(); try @@ -158,7 +160,7 @@ public final class HikariPool implements HikariPoolMBean connectionProxy._captureStack(leakDetectionThreshold, houseKeepingTimer); } - connection.setAutoCommit(configuration.isAutoCommit()); + connection.setAutoCommit(isAutoCommit); connection.clearWarnings(); return connection; @@ -187,6 +189,8 @@ public final class HikariPool implements HikariPoolMBean */ public void releaseConnection(IHikariConnectionProxy connectionProxy) { + rollbackConnection(connectionProxy); + if (!connectionProxy._isBrokenConnection()) { connectionProxy._markLastAccess(); @@ -437,6 +441,26 @@ public final class HikariPool implements HikariPoolMBean } } + /** + * Permanently close a connection. + * + * @param connectionProxy the connection to actually close + */ + private void rollbackConnection(IHikariConnectionProxy connectionProxy) + { + try + { + if (!connectionProxy.getAutoCommit()) + { + connectionProxy.rollback(); + } + } + catch (SQLException e) + { + return; + } + } + /** * The house keeping task to retire idle and maxAge connections. */ diff --git a/core/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java b/core/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java index 9ef3b411..f9decdbf 100644 --- a/core/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java +++ b/core/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java @@ -52,7 +52,7 @@ import com.zaxxer.hikari.javassist.HikariOverride; * * @author Brett Wooldridge */ -public abstract class ConnectionProxy implements IHikariConnectionProxy, Connection +public abstract class ConnectionProxy implements IHikariConnectionProxy { private static ProxyFactory PROXY_FACTORY; diff --git a/core/src/main/java/com/zaxxer/hikari/proxy/IHikariConnectionProxy.java b/core/src/main/java/com/zaxxer/hikari/proxy/IHikariConnectionProxy.java index 8886e0c8..909ff34d 100644 --- a/core/src/main/java/com/zaxxer/hikari/proxy/IHikariConnectionProxy.java +++ b/core/src/main/java/com/zaxxer/hikari/proxy/IHikariConnectionProxy.java @@ -26,7 +26,7 @@ import com.zaxxer.hikari.HikariPool; * * @author Brett Wooldridge */ -public interface IHikariConnectionProxy +public interface IHikariConnectionProxy extends Connection { void _unclose();