From fd69ee541e288687f04adb6446ac1b41a9bf415b Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 2 Oct 2014 14:33:21 +0200 Subject: [PATCH] DataSourceTransactionManager resets ConnectionHolder on doBegin failure Issue: SPR-12280 --- .../jdbc/datasource/DataSourceTransactionManager.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java index 10f4e36875..421ecb787e 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java @@ -179,7 +179,7 @@ public class DataSourceTransactionManager extends AbstractPlatformTransactionMan DataSourceTransactionObject txObject = new DataSourceTransactionObject(); txObject.setSavepointAllowed(isNestedTransactionAllowed()); ConnectionHolder conHolder = - (ConnectionHolder) TransactionSynchronizationManager.getResource(this.dataSource); + (ConnectionHolder) TransactionSynchronizationManager.getResource(this.dataSource); txObject.setConnectionHolder(conHolder, false); return txObject; } @@ -238,7 +238,10 @@ public class DataSourceTransactionManager extends AbstractPlatformTransactionMan } catch (Throwable ex) { - DataSourceUtils.releaseConnection(con, this.dataSource); + if (txObject.isNewConnectionHolder()) { + DataSourceUtils.releaseConnection(con, this.dataSource); + txObject.setConnectionHolder(null, false); + } throw new CannotCreateTransactionException("Could not open JDBC Connection for transaction", ex); } }