@ -107,6 +106,10 @@ public abstract class JdbcTransactionObjectSupport implements SavepointManager,
@@ -107,6 +106,10 @@ public abstract class JdbcTransactionObjectSupport implements SavepointManager,
thrownewNestedTransactionNotSupportedException(
"Cannot create a nested transaction because savepoints are not supported by your JDBC driver");
}
if(conHolder.isRollbackOnly()){
thrownewCannotCreateTransactionException(
"Cannot create savepoint for transaction which is already marked as rollback-only");
}
returnconHolder.createSavepoint();
}
catch(SQLExceptionex){
@ -123,6 +126,7 @@ public abstract class JdbcTransactionObjectSupport implements SavepointManager,
@@ -123,6 +126,7 @@ public abstract class JdbcTransactionObjectSupport implements SavepointManager,
thrownewTransactionSystemException("Could not roll back to JDBC savepoint",ex);
@ -151,7 +155,7 @@ public abstract class JdbcTransactionObjectSupport implements SavepointManager,
@@ -151,7 +155,7 @@ public abstract class JdbcTransactionObjectSupport implements SavepointManager,
}
if(!hasConnectionHolder()){
thrownewTransactionUsageException(
"Cannot create nested transaction if not exposing a JDBC transaction");
"Cannot create nested transaction when not exposing a JDBC transaction");
@ -677,12 +677,17 @@ public class JpaTransactionManager extends AbstractPlatformTransactionManager
@@ -677,12 +677,17 @@ public class JpaTransactionManager extends AbstractPlatformTransactionManager
@ -693,20 +693,15 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran
@@ -693,20 +693,15 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran
if(defStatus.isDebug()){
logger.debug("Transactional code has requested rollback");
"Transaction rolled back because it has been marked as rollback-only");
}
processRollback(defStatus,true);
return;
}
@ -722,30 +717,35 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran
@@ -722,30 +717,35 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran
// Throw UnexpectedRollbackException if we have a global rollback-only
// marker but still didn't get a corresponding exception from commit.
if(globalRollbackOnly){
if(unexpectedRollback){
thrownewUnexpectedRollbackException(
"Transaction silently rolled back because it has been marked as rollback-only");
}
@ -803,7 +803,7 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran
@@ -803,7 +803,7 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran
@ -812,10 +812,13 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran
@@ -812,10 +812,13 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran
logger.debug("Rolling back transaction to savepoint");
@ -828,28 +831,42 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran
@@ -828,28 +831,42 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran