Explicitly release rolled-back database savepoints during (long-running) transaction

Issue: SPR-12228
This commit is contained in:
Juergen Hoeller
2014-09-19 00:11:44 +02:00
parent bf93f0c5e9
commit 9c8f7d9246
2 changed files with 22 additions and 4 deletions

View File

@@ -120,12 +120,19 @@ public abstract class JdbcTransactionObjectSupport implements SavepointManager,
*/
@Override
public void rollbackToSavepoint(Object savepoint) throws TransactionException {
ConnectionHolder conHolder = getConnectionHolderForSavepoint();
try {
getConnectionHolderForSavepoint().getConnection().rollback((Savepoint) savepoint);
conHolder.getConnection().rollback((Savepoint) savepoint);
}
catch (Throwable ex) {
throw new TransactionSystemException("Could not roll back to JDBC savepoint", ex);
}
try {
conHolder.getConnection().releaseSavepoint((Savepoint) savepoint);
}
catch (Throwable ex) {
logger.debug("Could not explicitly release JDBC savepoint after rollback", ex);
}
}
/**
@@ -134,8 +141,9 @@ public abstract class JdbcTransactionObjectSupport implements SavepointManager,
*/
@Override
public void releaseSavepoint(Object savepoint) throws TransactionException {
ConnectionHolder conHolder = getConnectionHolderForSavepoint();
try {
getConnectionHolderForSavepoint().getConnection().releaseSavepoint((Savepoint) savepoint);
conHolder.getConnection().releaseSavepoint((Savepoint) savepoint);
}
catch (Throwable ex) {
logger.debug("Could not explicitly release JDBC savepoint", ex);