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))]