From 829d04f786dfe2c82208d895143a2d233d1a56f3 Mon Sep 17 00:00:00 2001 From: Steve Bohlen Date: Sat, 21 Mar 2015 14:52:05 -0400 Subject: [PATCH] SPRNET-1444 - revert commits on this issue to return DefaultIsolationLevel for tx advice from Unspecified back to ReadCommitted --- BreakingChanges.txt | 9 ++--- doc/reference/src/transaction.xml | 4 +-- .../Support/DefaultTransactionDefinition.cs | 2 +- .../Ems/Connections/EmsTransactionManager.cs | 2 +- .../Nms/Connections/NmsTransactionManager.cs | 2 +- .../AdoPlatformTransactionManagerTests.cs | 36 +++++++++---------- .../ServiceDomainTransactionManagerTests.cs | 4 +-- .../Core/TxScopeTransactionManagerTests.cs | 6 ++-- .../DefaultTransactionAttributeTests.cs | 2 +- .../TransactionAttributeEditorTests.cs | 2 +- .../TransactionAttributeSourceEditorTests.cs | 2 +- .../DefaultTransactionDefinitionTests.cs | 4 +-- 12 files changed, 36 insertions(+), 39 deletions(-) diff --git a/BreakingChanges.txt b/BreakingChanges.txt index 0d66a73f..3414d36c 100644 --- a/BreakingChanges.txt +++ b/BreakingChanges.txt @@ -1,14 +1,11 @@ Changes (1.3.2 to 2.0) ======================== -1. Default transaction isolation level is now IsolationLevel.Unspecified instead of old IsolationLevel.ReadUncommitted - - You need to update your configuration to set the isolation level where old ReadUncommitted was expected, see Spring documentation's Transaction Management chapter - -2. Protected fields were changed to private. Access is now allowed via public/protected property member. +1. Protected fields were changed to private. Access is now allowed via public/protected property member. -3. Most of members marked as Obsolete before 2.0 release were removed. +2. Most of members marked as Obsolete before 2.0 release were removed. -4. DbProvider automatically sets BindByName to true for Oracle's ODP.NET OracleCommand instances when created +3. DbProvider automatically sets BindByName to true for Oracle's ODP.NET OracleCommand instances when created Changes (1.3.1 to 1.3.2) ======================== diff --git a/doc/reference/src/transaction.xml b/doc/reference/src/transaction.xml index 108f8bbf..b00e55ed 100644 --- a/doc/reference/src/transaction.xml +++ b/doc/reference/src/transaction.xml @@ -1068,7 +1068,7 @@ mgr.DeleteTwoTestObjects("Jack", "Jill"); No - Unspecified + ReadCommitted The transaction isolation level @@ -1162,7 +1162,7 @@ mgr.DeleteTwoTestObjects("Jack", "Jill"); The isolation level is - IsolationLevel.Unspecified + IsolationLevel.ReadCommitted diff --git a/src/Spring/Spring.Data/Transaction/Support/DefaultTransactionDefinition.cs b/src/Spring/Spring.Data/Transaction/Support/DefaultTransactionDefinition.cs index 186cba68..972c4017 100644 --- a/src/Spring/Spring.Data/Transaction/Support/DefaultTransactionDefinition.cs +++ b/src/Spring/Spring.Data/Transaction/Support/DefaultTransactionDefinition.cs @@ -68,7 +68,7 @@ namespace Spring.Transaction.Support //TODO Refactoring to sync with Spring 2.0 for nt/enums for various default values. private TransactionPropagation _transactionPropagation = TransactionPropagation.Required; - private IsolationLevel _transactionIsolationLevel = IsolationLevel.Unspecified; + private IsolationLevel _transactionIsolationLevel = IsolationLevel.ReadCommitted; private int _timeout = DefaultTransactionDefinition.TIMEOUT_DEFAULT; private bool _readOnly = false; private string _name = null; diff --git a/src/Spring/Spring.Messaging.Ems/Messaging/Ems/Connections/EmsTransactionManager.cs b/src/Spring/Spring.Messaging.Ems/Messaging/Ems/Connections/EmsTransactionManager.cs index 48452f56..efa3ea9f 100644 --- a/src/Spring/Spring.Messaging.Ems/Messaging/Ems/Connections/EmsTransactionManager.cs +++ b/src/Spring/Spring.Messaging.Ems/Messaging/Ems/Connections/EmsTransactionManager.cs @@ -169,7 +169,7 @@ namespace Spring.Messaging.Ems.Connections protected override void DoBegin(object transaction, ITransactionDefinition definition) { //This is the default value defined in DefaultTransactionDefinition - if (definition.TransactionIsolationLevel != IsolationLevel.Unspecified) + if (definition.TransactionIsolationLevel != IsolationLevel.ReadCommitted) { throw new InvalidIsolationLevelException("EMS does not support an isoliation level concept"); } diff --git a/src/Spring/Spring.Messaging.Nms/Messaging/Nms/Connections/NmsTransactionManager.cs b/src/Spring/Spring.Messaging.Nms/Messaging/Nms/Connections/NmsTransactionManager.cs index cb4afc48..fd6542fe 100644 --- a/src/Spring/Spring.Messaging.Nms/Messaging/Nms/Connections/NmsTransactionManager.cs +++ b/src/Spring/Spring.Messaging.Nms/Messaging/Nms/Connections/NmsTransactionManager.cs @@ -186,7 +186,7 @@ namespace Spring.Messaging.Nms.Connections protected override void DoBegin(object transaction, ITransactionDefinition definition) { //This is the default value defined in DefaultTransactionDefinition - if (definition.TransactionIsolationLevel != IsolationLevel.Unspecified) + if (definition.TransactionIsolationLevel != IsolationLevel.ReadCommitted) { throw new InvalidIsolationLevelException("NMS does not support an isoliation level concept"); } diff --git a/test/Spring/Spring.Data.Tests/Data/AdoPlatformTransactionManagerTests.cs b/test/Spring/Spring.Data.Tests/Data/AdoPlatformTransactionManagerTests.cs index 3fd24f13..15748226 100644 --- a/test/Spring/Spring.Data.Tests/Data/AdoPlatformTransactionManagerTests.cs +++ b/test/Spring/Spring.Data.Tests/Data/AdoPlatformTransactionManagerTests.cs @@ -45,7 +45,7 @@ namespace Spring.Data public class AdoPlatformTransactionManagerTests { private MockRepository mocks; - private IsolationLevel _defaultIsolationLevel = IsolationLevel.Unspecified; + private const IsolationLevel DefaultIsolationLevel = IsolationLevel.ReadCommitted; [SetUp] public void Setup() @@ -75,7 +75,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); //standard tx timeout. transaction.Commit(); LastCall.On(transaction).Repeat.Once(); @@ -116,7 +116,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); //standard tx timeout. transaction.Rollback(); LastCall.On(transaction).Repeat.Once(); @@ -166,7 +166,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); //standard tx timeout. transaction.Rollback(); LastCall.On(transaction).Repeat.Once(); @@ -238,7 +238,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection).Repeat.Twice(); connection.Open(); LastCall.On(connection).Repeat.Twice(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction).Repeat.Twice(); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction).Repeat.Twice(); //standard tx timeout. transaction.Rollback(); LastCall.On(transaction).Repeat.Once(); @@ -280,7 +280,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); transaction.Commit(); LastCall.On(transaction).Repeat.Once(); connection.Dispose(); @@ -292,7 +292,7 @@ namespace Spring.Data Expect.Call(dbProvider2.CreateConnection()).Return(connection2); connection2.Open(); LastCall.On(connection2).Repeat.Once(); - Expect.Call(connection2.BeginTransaction(_defaultIsolationLevel)).Return(transaction2); + Expect.Call(connection2.BeginTransaction(DefaultIsolationLevel)).Return(transaction2); transaction2.Rollback(); LastCall.On(transaction2).Repeat.Once(); connection2.Dispose(); @@ -335,7 +335,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); transaction.Rollback(); LastCall.On(transaction).Repeat.Once(); connection.Dispose(); @@ -395,7 +395,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); //standard tx timeout. transaction.Commit(); LastCall.On(transaction).Repeat.Once(); @@ -431,7 +431,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); //standard tx timeout. transaction.Rollback(); LastCall.On(transaction).Repeat.Once(); @@ -482,7 +482,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection2); connection2.Open(); LastCall.On(connection2).Repeat.Once(); - Expect.Call(connection2.BeginTransaction(_defaultIsolationLevel)).Return(transaction2); + Expect.Call(connection2.BeginTransaction(DefaultIsolationLevel)).Return(transaction2); transaction2.Commit(); LastCall.On(transaction2).Repeat.Once(); connection2.Dispose(); @@ -573,7 +573,7 @@ namespace Spring.Data connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); Expect.Call(connection.CreateCommand()).Return(command); command.CommandText = "some SQL statement"; LastCall.On(command).Repeat.Once(); @@ -674,7 +674,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); //standard tx timeout. transaction.Commit(); LastCall.On(transaction).Throw(new TestSqlException("Cannot commit", "314")); @@ -717,7 +717,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); transaction.Commit(); LastCall.On(transaction).Throw(new TestSqlException("Cannot commit", "314")); @@ -763,7 +763,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); //standard tx timeout. transaction.Rollback(); LastCall.On(transaction).Throw(new TestSqlException("Cannot commit", "314")); @@ -877,7 +877,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); transaction.Rollback(); LastCall.On(transaction).Repeat.Once(); @@ -923,7 +923,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); //standard tx timeout. transaction.Commit(); LastCall.On(transaction).Repeat.Once(); @@ -971,7 +971,7 @@ namespace Spring.Data Expect.Call(dbProvider.CreateConnection()).Return(connection); connection.Open(); LastCall.On(connection).Repeat.Once(); - Expect.Call(connection.BeginTransaction(_defaultIsolationLevel)).Return(transaction); + Expect.Call(connection.BeginTransaction(DefaultIsolationLevel)).Return(transaction); transaction.Rollback(); LastCall.On(transaction).Repeat.Once(); connection.Dispose(); diff --git a/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs b/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs index 18e7b12f..6b436ecf 100644 --- a/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs +++ b/test/Spring/Spring.Data.Tests/Data/Core/ServiceDomainTransactionManagerTests.cs @@ -159,7 +159,7 @@ namespace Spring.Data.Core // inner tx ConfigureServiceConfig(serviceConfig, false); serviceConfig.TransactionOption = TransactionOption.RequiresNew; - serviceConfig.IsolationLevel = TransactionIsolationLevel.Any; + serviceConfig.IsolationLevel = TransactionIsolationLevel.ReadCommitted; txAdapter.Enter(serviceConfig); Expect.Call(txAdapter.IsInTransaction).Return(true); txAdapter.SetAbort(); @@ -204,7 +204,7 @@ namespace Spring.Data.Core if (standardIsolationAndProp) { serviceConfig.TransactionOption = TransactionOption.Required; - serviceConfig.IsolationLevel = TransactionIsolationLevel.Any; + serviceConfig.IsolationLevel = TransactionIsolationLevel.ReadCommitted; } return serviceConfig; diff --git a/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerTests.cs b/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerTests.cs index c7fae522..c1151c9d 100644 --- a/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerTests.cs +++ b/test/Spring/Spring.Data.Tests/Data/Core/TxScopeTransactionManagerTests.cs @@ -57,7 +57,7 @@ namespace Spring.Data.Core { Expect.Call(txAdapter.IsExistingTransaction).Return(false); TransactionOptions txOptions = new TransactionOptions(); - txOptions.IsolationLevel = IsolationLevel.Unspecified; + txOptions.IsolationLevel = IsolationLevel.ReadCommitted; txAdapter.CreateTransactionScope(TransactionScopeOption.Required, txOptions, EnterpriseServicesInteropOption.None); Expect.Call(txAdapter.RollbackOnly).Return(false); @@ -94,7 +94,7 @@ namespace Spring.Data.Core { Expect.Call(txAdapter.IsExistingTransaction).Return(false); TransactionOptions txOptions = new TransactionOptions(); - txOptions.IsolationLevel = IsolationLevel.Unspecified; + txOptions.IsolationLevel = IsolationLevel.ReadCommitted; txAdapter.CreateTransactionScope(TransactionScopeOption.Required, txOptions, EnterpriseServicesInteropOption.None); txAdapter.Dispose(); } @@ -141,7 +141,7 @@ namespace Spring.Data.Core { Expect.Call(txAdapter.IsExistingTransaction).Return(false); TransactionOptions txOptions = new TransactionOptions(); - txOptions.IsolationLevel = IsolationLevel.Unspecified; + txOptions.IsolationLevel = IsolationLevel.ReadCommitted; txAdapter.CreateTransactionScope(TransactionScopeOption.RequiresNew, txOptions, EnterpriseServicesInteropOption.None); //inner tx actions diff --git a/test/Spring/Spring.Data.Tests/Transaction/Interceptor/DefaultTransactionAttributeTests.cs b/test/Spring/Spring.Data.Tests/Transaction/Interceptor/DefaultTransactionAttributeTests.cs index 6a154af5..e43e933d 100644 --- a/test/Spring/Spring.Data.Tests/Transaction/Interceptor/DefaultTransactionAttributeTests.cs +++ b/test/Spring/Spring.Data.Tests/Transaction/Interceptor/DefaultTransactionAttributeTests.cs @@ -18,7 +18,7 @@ namespace Spring.Transaction.Interceptor public void ToStringTests() { DefaultTransactionAttribute dta = new DefaultTransactionAttribute(); - Assert.AreEqual( "PROPAGATION_Required,ISOLATION_Unspecified,-System.Exception", dta.ToString()); + Assert.AreEqual( "PROPAGATION_Required,ISOLATION_ReadCommitted,-System.Exception", dta.ToString()); } } } diff --git a/test/Spring/Spring.Data.Tests/Transaction/Interceptor/TransactionAttributeEditorTests.cs b/test/Spring/Spring.Data.Tests/Transaction/Interceptor/TransactionAttributeEditorTests.cs index 441c0132..c5e87b5a 100644 --- a/test/Spring/Spring.Data.Tests/Transaction/Interceptor/TransactionAttributeEditorTests.cs +++ b/test/Spring/Spring.Data.Tests/Transaction/Interceptor/TransactionAttributeEditorTests.cs @@ -34,7 +34,7 @@ namespace Spring.Transaction.Interceptor ITransactionAttribute ta = editor.Value; Assert.IsTrue( ta != null ); Assert.IsTrue( ta.PropagationBehavior == TransactionPropagation.Required ); - Assert.IsTrue( ta.TransactionIsolationLevel == IsolationLevel.Unspecified ); + Assert.IsTrue( ta.TransactionIsolationLevel == IsolationLevel.ReadCommitted ); Assert.IsFalse( ta.ReadOnly ); } diff --git a/test/Spring/Spring.Data.Tests/Transaction/Interceptor/TransactionAttributeSourceEditorTests.cs b/test/Spring/Spring.Data.Tests/Transaction/Interceptor/TransactionAttributeSourceEditorTests.cs index 9717d75b..8da00917 100644 --- a/test/Spring/Spring.Data.Tests/Transaction/Interceptor/TransactionAttributeSourceEditorTests.cs +++ b/test/Spring/Spring.Data.Tests/Transaction/Interceptor/TransactionAttributeSourceEditorTests.cs @@ -59,7 +59,7 @@ namespace Spring.Transaction.Interceptor { ITransactionAttribute ta = tas.ReturnTransactionAttribute( method, null ); Assert.IsTrue( ta != null ); - Assert.IsTrue( ta.TransactionIsolationLevel == IsolationLevel.Unspecified ); + Assert.IsTrue( ta.TransactionIsolationLevel == IsolationLevel.ReadCommitted ); Assert.IsTrue( ta.PropagationBehavior == transactionPropagation); } } diff --git a/test/Spring/Spring.Data.Tests/Transaction/Support/DefaultTransactionDefinitionTests.cs b/test/Spring/Spring.Data.Tests/Transaction/Support/DefaultTransactionDefinitionTests.cs index 92624b4e..86c3ceb1 100644 --- a/test/Spring/Spring.Data.Tests/Transaction/Support/DefaultTransactionDefinitionTests.cs +++ b/test/Spring/Spring.Data.Tests/Transaction/Support/DefaultTransactionDefinitionTests.cs @@ -20,7 +20,7 @@ namespace Spring.Transaction.Support Assert.IsTrue( 1000 == def.TransactionTimeout ); Assert.IsTrue( false == def.ReadOnly ); def.ReadOnly = true; - Assert.IsTrue( true == def.ReadOnly ); + Assert.IsTrue( def.ReadOnly ); } [Test] public void PropogationBehaviorDefault() @@ -32,7 +32,7 @@ namespace Spring.Transaction.Support public void IsolationLevelDefault() { DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - Assert.IsTrue(def.TransactionIsolationLevel == IsolationLevel.Unspecified); + Assert.IsTrue(def.TransactionIsolationLevel == IsolationLevel.ReadCommitted); } [Test] [ExpectedException(typeof(ArgumentException))]