SPRNET-795 - Change TransactionStatus Rollback setter property to Rollback() method so the contract of setting it to true is more explicit
This commit is contained in:
@@ -50,25 +50,27 @@ namespace Spring.Transaction
|
||||
/// </summary>
|
||||
bool IsNewTransaction { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets / sets if the transaction is rollback-only.
|
||||
/// <summary>
|
||||
/// Return whether the transaction has been marked as rollback-only,
|
||||
/// (either by the application or by the transaction infrastructure).
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <p>
|
||||
/// This instructs the transaction manager that the only possible outcome of
|
||||
/// the transaction may be a rollback, proceeding with the normal application
|
||||
/// workflow though (i.e. no exception).
|
||||
/// </p>
|
||||
/// <p>
|
||||
/// For transactions managed by a
|
||||
/// <see cref="Spring.Transaction.Support.TransactionTemplate"/> or
|
||||
/// <see cref="Spring.Transaction.Interceptor.TransactionInterceptor"/>.
|
||||
/// An alternative way to trigger a rollback is throwing an transaction exception.
|
||||
/// </p>
|
||||
/// </remarks>
|
||||
bool RollbackOnly { get; set; }
|
||||
bool RollbackOnly { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Set the transaction rollback-only. This instructs the transaction manager that the only possible outcome of
|
||||
/// the transaction may be a rollback, proceeding with the normal application
|
||||
/// workflow though (i.e. no exception).
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <p>
|
||||
/// For transactions managed by a <see cref="Spring.Transaction.Support.TransactionTemplate"/> or
|
||||
/// <see cref="Spring.Transaction.Interceptor.TransactionInterceptor"/>.
|
||||
/// An alternative way to trigger a rollback is throwing an transaction exception.
|
||||
/// </p>
|
||||
/// </remarks>
|
||||
void SetRollbackOnly();
|
||||
|
||||
/// <summary>
|
||||
/// <summary>
|
||||
/// Gets the current transaction object.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
|
||||
@@ -216,11 +216,27 @@ namespace Spring.Transaction.Support
|
||||
{
|
||||
get {
|
||||
return ( LocalRollbackOnly || GlobalRollbackOnly);
|
||||
}
|
||||
|
||||
set { if (value) {_rollbackOnly = value;} }
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set the transaction rollback-only. This instructs the transaction manager that the only possible outcome of
|
||||
/// the transaction may be a rollback, proceeding with the normal application
|
||||
/// workflow though (i.e. no exception).
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <p>
|
||||
/// For transactions managed by a <see cref="Spring.Transaction.Support.TransactionTemplate"/> or
|
||||
/// <see cref="Spring.Transaction.Interceptor.TransactionInterceptor"/>.
|
||||
/// An alternative way to trigger a rollback is throwing an transaction exception.
|
||||
/// </p>
|
||||
/// </remarks>
|
||||
public void SetRollbackOnly()
|
||||
{
|
||||
_rollbackOnly = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -121,7 +121,7 @@ namespace Spring.Messaging.Listener
|
||||
|
||||
#endregion
|
||||
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return false; // no more peeking unless this is the last listener thread
|
||||
}
|
||||
else
|
||||
@@ -147,7 +147,7 @@ namespace Spring.Messaging.Listener
|
||||
|
||||
#endregion
|
||||
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return false; // no more peeking unless this is the last listener thread
|
||||
}
|
||||
|
||||
|
||||
@@ -303,7 +303,7 @@ namespace Spring.Messaging.Listener
|
||||
{
|
||||
LOG.Trace("IOTimeout: Message to receive was already processed by another thread.");
|
||||
}
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return false; // no more peeking unless this is the last listener thread
|
||||
}
|
||||
else
|
||||
@@ -342,7 +342,7 @@ namespace Spring.Messaging.Listener
|
||||
|
||||
#endregion
|
||||
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return false; // no more peeking unless this is the last listener thread
|
||||
}
|
||||
|
||||
@@ -388,7 +388,7 @@ namespace Spring.Messaging.Listener
|
||||
|
||||
#endregion
|
||||
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return false; // no more peeking unless this is the last listener thread
|
||||
}
|
||||
else
|
||||
@@ -461,7 +461,7 @@ namespace Spring.Messaging.Listener
|
||||
|
||||
#endregion
|
||||
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return false; // no more peeking unless this is the last listener thread
|
||||
}
|
||||
else
|
||||
@@ -500,7 +500,7 @@ namespace Spring.Messaging.Listener
|
||||
|
||||
#endregion
|
||||
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return false; // no more peeking unless this is the last listener thread
|
||||
}
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ namespace Spring.Data
|
||||
Console.WriteLine("tx 2 'IsNewTransaction' = " + status2.IsNewTransaction);
|
||||
adoTemplate.ExecuteNonQuery(CommandType.Text, "insert into dbo.Debits (DebitAmount) VALUES (@amount)", "amount", DbType.Decimal, 0,555);
|
||||
//throw new ArithmeticException("can't do the math.");
|
||||
status2.RollbackOnly = true;
|
||||
status2.SetRollbackOnly();
|
||||
return null;
|
||||
});
|
||||
|
||||
@@ -143,7 +143,7 @@ namespace Spring.Data
|
||||
{
|
||||
TransactionOptions transactionoptions = new TransactionOptions();
|
||||
transactionoptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
|
||||
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, transactionoptions))
|
||||
using (TransactionScope ts = new TransactionScope())
|
||||
{
|
||||
InnerMethod();
|
||||
InnerMethod();
|
||||
|
||||
@@ -689,7 +689,7 @@ namespace Spring.Data.NHibernate
|
||||
HibernateTemplate ht = new HibernateTemplate(sf);
|
||||
ht.TemplateFlushMode = TemplateFlushMode.Eager;
|
||||
ht.Execute(new HibernateDelegate(Del));
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -775,7 +775,7 @@ namespace Spring.Data.NHibernate
|
||||
Assert.IsTrue(TransactionSynchronizationManager.HasResource(sf), "Has thread session");
|
||||
HibernateTemplate ht = new HibernateTemplate(sf);
|
||||
object returnValue = ht.Execute(new HibernateDelegate(Del));
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -768,7 +768,7 @@ namespace Spring.Data
|
||||
|
||||
private object TransactionWithExceptionOnRollbackMethod(ITransactionStatus status)
|
||||
{
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -961,7 +961,7 @@ namespace Spring.Data
|
||||
private object TransactionWithPropagationNestedAndRollbackMethod(ITransactionStatus status)
|
||||
{
|
||||
Assert.IsTrue(status.IsNewTransaction, "Is new transaction");
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1222,7 +1222,7 @@ namespace Spring.Data
|
||||
Assert.IsTrue(!status.IsNewTransaction, "Isn't new transaction");
|
||||
Assert.IsFalse(TransactionSynchronizationManager.CurrentTransactionReadOnly);
|
||||
Assert.IsFalse(TransactionSynchronizationManager.ActualTransactionActive);
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1256,7 +1256,7 @@ namespace Spring.Data
|
||||
{
|
||||
public object DoInTransaction(ITransactionStatus status)
|
||||
{
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1308,7 +1308,7 @@ namespace Spring.Data
|
||||
Assert.IsTrue(status.IsNewTransaction, "Is new transaction");
|
||||
Assert.IsFalse(TransactionSynchronizationManager.CurrentTransactionReadOnly);
|
||||
Assert.IsTrue(TransactionSynchronizationManager.ActualTransactionActive);
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1402,7 +1402,7 @@ namespace Spring.Data
|
||||
Assert.IsTrue(TransactionSynchronizationManager.HasResource(dbProvider), "Has thread connection");
|
||||
Assert.IsTrue(TransactionSynchronizationManager.SynchronizationActive, "Synchronization active");
|
||||
Assert.IsTrue(!status.IsNewTransaction, "Is existing transaction");
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,7 +260,7 @@ namespace Spring.Data.Core
|
||||
Assert.IsTrue(status.IsNewTransaction, "Is new transaction");
|
||||
Assert.IsFalse(TransactionSynchronizationManager.CurrentTransactionReadOnly);
|
||||
Assert.IsTrue(TransactionSynchronizationManager.ActualTransactionActive);
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,7 +134,7 @@ namespace Spring.Data.Core
|
||||
TransactionSynchronizationManager.RegisterSynchronization(sync);
|
||||
Assert.AreEqual("txName", TransactionSynchronizationManager.CurrentTransactionName);
|
||||
Assert.IsFalse(TransactionSynchronizationManager.CurrentTransactionReadOnly);
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return null;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -171,7 +171,7 @@ namespace Spring.Data.Core
|
||||
Assert.IsTrue(status2.IsNewTransaction, "Is new transaction");
|
||||
Assert.IsFalse(TransactionSynchronizationManager.CurrentTransactionReadOnly);
|
||||
Assert.IsTrue(TransactionSynchronizationManager.ActualTransactionActive);
|
||||
status2.RollbackOnly = true;
|
||||
status2.SetRollbackOnly();
|
||||
return null;
|
||||
});
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@ namespace Spring.Transaction.Interceptor
|
||||
public override string GetDescription()
|
||||
{
|
||||
ITransactionStatus txStatus = TransactionInterceptor.CurrentTransactionStatus;
|
||||
txStatus.RollbackOnly = true;
|
||||
txStatus.SetRollbackOnly();
|
||||
return "test description";
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace Spring.Transaction.Support
|
||||
Assert.IsNotNull( stat.SuspendedResources );
|
||||
Assert.IsTrue( stat.IsNewTransaction );
|
||||
Assert.IsTrue( ! stat.RollbackOnly );
|
||||
stat.RollbackOnly = true;
|
||||
stat.SetRollbackOnly();
|
||||
Assert.IsTrue( stat.RollbackOnly );
|
||||
txn.Verify();
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ namespace Spring.Messaging.Nms.Connections
|
||||
tt.Execute(delegate(ITransactionStatus status)
|
||||
{
|
||||
nt.Execute(new AssertSessionCallback(session));
|
||||
status.RollbackOnly = true;
|
||||
status.SetRollbackOnly();
|
||||
return null;
|
||||
});
|
||||
try
|
||||
|
||||
Reference in New Issue
Block a user