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:
markpollack
2008-10-03 15:25:47 +00:00
parent e37ac5a43a
commit c1aa74632b
13 changed files with 63 additions and 45 deletions

View File

@@ -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>

View File

@@ -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>

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
);

View File

@@ -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;
});

View File

@@ -229,7 +229,7 @@ namespace Spring.Transaction.Interceptor
public override string GetDescription()
{
ITransactionStatus txStatus = TransactionInterceptor.CurrentTransactionStatus;
txStatus.RollbackOnly = true;
txStatus.SetRollbackOnly();
return "test description";
}

View File

@@ -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();
}

View File

@@ -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