diff --git a/src/Spring/Spring.Data/Transaction/ITransactionStatus.cs b/src/Spring/Spring.Data/Transaction/ITransactionStatus.cs index dda46ae9..ea163f05 100644 --- a/src/Spring/Spring.Data/Transaction/ITransactionStatus.cs +++ b/src/Spring/Spring.Data/Transaction/ITransactionStatus.cs @@ -50,25 +50,27 @@ namespace Spring.Transaction /// bool IsNewTransaction { get; } - /// - /// Gets / sets if the transaction is rollback-only. + /// + /// Return whether the transaction has been marked as rollback-only, + /// (either by the application or by the transaction infrastructure). /// - /// - ///

- /// 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). - ///

- ///

- /// For transactions managed by a - /// or - /// . - /// An alternative way to trigger a rollback is throwing an transaction exception. - ///

- ///
- bool RollbackOnly { get; set; } + bool RollbackOnly { get; } + + /// + /// 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). + /// + /// + ///

+ /// For transactions managed by a or + /// . + /// An alternative way to trigger a rollback is throwing an transaction exception. + ///

+ ///
+ void SetRollbackOnly(); - /// + /// /// Gets the current transaction object. /// /// diff --git a/src/Spring/Spring.Data/Transaction/Support/DefaultTransactionStatus.cs b/src/Spring/Spring.Data/Transaction/Support/DefaultTransactionStatus.cs index da8b2fb1..35fdef97 100644 --- a/src/Spring/Spring.Data/Transaction/Support/DefaultTransactionStatus.cs +++ b/src/Spring/Spring.Data/Transaction/Support/DefaultTransactionStatus.cs @@ -216,11 +216,27 @@ namespace Spring.Transaction.Support { get { return ( LocalRollbackOnly || GlobalRollbackOnly); - } - - set { if (value) {_rollbackOnly = value;} } - } - #endregion + } + } + + /// + /// 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). + /// + /// + ///

+ /// For transactions managed by a or + /// . + /// An alternative way to trigger a rollback is throwing an transaction exception. + ///

+ ///
+ public void SetRollbackOnly() + { + _rollbackOnly = true; + } + + #endregion /// diff --git a/src/Spring/Spring.Messaging/Messaging/Listener/DistributedTxMessageListenerContainer.cs b/src/Spring/Spring.Messaging/Messaging/Listener/DistributedTxMessageListenerContainer.cs index 099b832a..fc492970 100644 --- a/src/Spring/Spring.Messaging/Messaging/Listener/DistributedTxMessageListenerContainer.cs +++ b/src/Spring/Spring.Messaging/Messaging/Listener/DistributedTxMessageListenerContainer.cs @@ -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 } diff --git a/src/Spring/Spring.Messaging/Messaging/Listener/TransactionalMessageListenerContainer.cs b/src/Spring/Spring.Messaging/Messaging/Listener/TransactionalMessageListenerContainer.cs index d4b95327..10beda56 100644 --- a/src/Spring/Spring.Messaging/Messaging/Listener/TransactionalMessageListenerContainer.cs +++ b/src/Spring/Spring.Messaging/Messaging/Listener/TransactionalMessageListenerContainer.cs @@ -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 } diff --git a/test/Spring/Spring.Data.Integration.Tests/Data/NestedTxScopeTests.cs b/test/Spring/Spring.Data.Integration.Tests/Data/NestedTxScopeTests.cs index 1c049ca7..5a583f0b 100644 --- a/test/Spring/Spring.Data.Integration.Tests/Data/NestedTxScopeTests.cs +++ b/test/Spring/Spring.Data.Integration.Tests/Data/NestedTxScopeTests.cs @@ -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(); diff --git a/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/HibernateTransactionManagerTests.cs b/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/HibernateTransactionManagerTests.cs index a44a882a..c206042e 100644 --- a/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/HibernateTransactionManagerTests.cs +++ b/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/HibernateTransactionManagerTests.cs @@ -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; } diff --git a/test/Spring/Spring.Data.Tests/Data/AdoPlatformTransactionManagerTests.cs b/test/Spring/Spring.Data.Tests/Data/AdoPlatformTransactionManagerTests.cs index 632be796..4d86aa95 100644 --- a/test/Spring/Spring.Data.Tests/Data/AdoPlatformTransactionManagerTests.cs +++ b/test/Spring/Spring.Data.Tests/Data/AdoPlatformTransactionManagerTests.cs @@ -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; } } diff --git a/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs b/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs index 70d32551..9b8a9ceb 100644 --- a/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs +++ b/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs @@ -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; } } diff --git a/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerIntegrationTests.cs b/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerIntegrationTests.cs index fee1993e..ac899c0c 100644 --- a/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerIntegrationTests.cs +++ b/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerIntegrationTests.cs @@ -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; } ); diff --git a/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerTests.cs b/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerTests.cs index a223a50f..05e06732 100644 --- a/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerTests.cs +++ b/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerTests.cs @@ -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; }); diff --git a/test/Spring/Spring.Data.Tests/Transaction/Interceptor/AbstractTransactionAspectTests.cs b/test/Spring/Spring.Data.Tests/Transaction/Interceptor/AbstractTransactionAspectTests.cs index 3695cf6f..d1970cfd 100644 --- a/test/Spring/Spring.Data.Tests/Transaction/Interceptor/AbstractTransactionAspectTests.cs +++ b/test/Spring/Spring.Data.Tests/Transaction/Interceptor/AbstractTransactionAspectTests.cs @@ -229,7 +229,7 @@ namespace Spring.Transaction.Interceptor public override string GetDescription() { ITransactionStatus txStatus = TransactionInterceptor.CurrentTransactionStatus; - txStatus.RollbackOnly = true; + txStatus.SetRollbackOnly(); return "test description"; } diff --git a/test/Spring/Spring.Data.Tests/Transaction/Support/DefaultTransactionStatusTests.cs b/test/Spring/Spring.Data.Tests/Transaction/Support/DefaultTransactionStatusTests.cs index 37b40211..de37d6ec 100644 --- a/test/Spring/Spring.Data.Tests/Transaction/Support/DefaultTransactionStatusTests.cs +++ b/test/Spring/Spring.Data.Tests/Transaction/Support/DefaultTransactionStatusTests.cs @@ -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(); } diff --git a/test/Spring/Spring.Messaging.Nms.Tests/Messaging/Nms/Connections/MessageTransactionManagerTests.cs b/test/Spring/Spring.Messaging.Nms.Tests/Messaging/Nms/Connections/MessageTransactionManagerTests.cs index 5dd745db..1dccbbc5 100644 --- a/test/Spring/Spring.Messaging.Nms.Tests/Messaging/Nms/Connections/MessageTransactionManagerTests.cs +++ b/test/Spring/Spring.Messaging.Nms.Tests/Messaging/Nms/Connections/MessageTransactionManagerTests.cs @@ -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