Update of /cvsroot/springnet/Spring.Net/src/Spring/Spring.Data/Transaction/Support
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv1326
Modified Files:
AbstractPlatformTransactionManager.cs
Log Message:
SPRNET-716 Create new session if thread local storage SessionHolder is marked as SyncrhonizedWithTransaction.
SPRNET-717 Add default transaction timeout property on AbstractPlatformTransactionManager
Index: AbstractPlatformTransactionManager.cs
===================================================================
RCS file: /cvsroot/springnet/Spring.Net/src/Spring/Spring.Data/Transaction/Support/AbstractPlatformTransactionManager.cs,v
retrieving revision 1.22
retrieving revision 1.23
diff -C2 -d -r1.22 -r1.23
*** AbstractPlatformTransactionManager.cs 29 Aug 2007 03:42:20 -0000 1.22
--- AbstractPlatformTransactionManager.cs 30 Aug 2007 19:59:56 -0000 1.23
***************
*** 125,128 ****
--- 125,129 ----
private bool _nestedTransactionsAllowed;
private bool _rollbackOnCommitFailure;
+ private int _defaultTimeout = DefaultTransactionDefinition.TIMEOUT_DEFAULT;
#region Logging Definition
***************
*** 186,189 ****
--- 187,214 ----
}
+
+ /// <summary>
+ /// Gets or sets the default timeout that this transaction manager should apply if there
+ /// is no timeout specified at the transaction level, in seconds.
+ /// </summary>
+ /// <remarks>Returns DefaultTransactionDefinition.TIMEOUT_DEFAULT to indicate the
+ /// underlying transaction infrastructure's default timeout.</remarks>
+ /// <value>The default timeout.</value>
+ public int DefaultTimeout
+ {
+ get
+ {
+ return _defaultTimeout;
+ }
+ set
+ {
+ if (_defaultTimeout < DefaultTransactionDefinition.TIMEOUT_DEFAULT)
+ {
+ throw new InvalidTimeoutException("Invalid default timeout", _defaultTimeout);
+ }
+ _defaultTimeout = value;
+ }
+ }
+
#endregion
***************
*** 474,478 ****
definition.PropagationBehavior == TransactionPropagation.Nested)
{
! object suspendedResources = suspend(null);
if (debugEnabled)
{
--- 499,503 ----
definition.PropagationBehavior == TransactionPropagation.Nested)
{
! object suspendedResources = Suspend(null);
if (debugEnabled)
{
***************
*** 481,485 ****
DoBegin(transaction, definition);
newSynchronization = (_transactionSyncState != TransactionSynchronizationState.Never);
! return newTransactionStatus(definition, transaction, true, newSynchronization, debugEnabled,
suspendedResources);
}
--- 506,510 ----
DoBegin(transaction, definition);
newSynchronization = (_transactionSyncState != TransactionSynchronizationState.Never);
! return NewTransactionStatus(definition, transaction, true, newSynchronization, debugEnabled,
suspendedResources);
}
***************
*** 488,492 ****
// Create "empty" transaction: no actual transaction, but potentially synchronization.
newSynchronization = (_transactionSyncState == TransactionSynchronizationState.Always);
! return newTransactionStatus(definition, null, false, newSynchronization, debugEnabled, null);
}
--- 513,517 ----
// Create "empty" transaction: no actual transaction, but potentially synchronization.
newSynchronization = (_transactionSyncState == TransactionSynchronizationState.Always);
! return NewTransactionStatus(definition, null, false, newSynchronization, debugEnabled, null);
}
***************
*** 508,515 ****
log.Debug("Suspending current transaction");
}
! object suspendedResources = suspend(transaction);
bool newSynchronization = (_transactionSyncState == TransactionSynchronizationState.Always);
return
! newTransactionStatus(definition, null, false, newSynchronization, debugEnabled,
suspendedResources);
}
--- 533,540 ----
log.Debug("Suspending current transaction");
}
! object suspendedResources = Suspend(transaction);
bool newSynchronization = (_transactionSyncState == TransactionSynchronizationState.Always);
return
! NewTransactionStatus(definition, null, false, newSynchronization, debugEnabled,
suspendedResources);
}
***************
*** 522,526 ****
definition.Name + "]");
}
! object suspendedResources = suspend(transaction);
try
{
--- 547,551 ----
definition.Name + "]");
}
! object suspendedResources = Suspend(transaction);
try
{
***************
*** 531,535 ****
try
{
! resume(transaction, suspendedResources);
}
catch (TransactionException resumeEx)
--- 556,560 ----
try
{
! Resume(transaction, suspendedResources);
}
catch (TransactionException resumeEx)
***************
*** 544,548 ****
bool newSynchronization = (_transactionSyncState != TransactionSynchronizationState.Never);
return
! newTransactionStatus(definition, transaction, true, newSynchronization, debugEnabled, suspendedResources);
}
if (definition.PropagationBehavior == TransactionPropagation.Nested)
--- 569,573 ----
bool newSynchronization = (_transactionSyncState != TransactionSynchronizationState.Never);
return
! NewTransactionStatus(definition, transaction, true, newSynchronization, debugEnabled, suspendedResources);
}
if (definition.PropagationBehavior == TransactionPropagation.Nested)
***************
*** 562,566 ****
{
DefaultTransactionStatus status =
! newTransactionStatus(definition, transaction, false, false, debugEnabled, null);
status.CreateAndHoldSavepoint(DateTime.Now.ToLongTimeString());
return status;
--- 587,591 ----
{
DefaultTransactionStatus status =
! NewTransactionStatus(definition, transaction, false, false, debugEnabled, null);
status.CreateAndHoldSavepoint(DateTime.Now.ToLongTimeString());
return status;
***************
*** 570,574 ****
DoBegin(transaction, definition);
bool newSynchronization = (_transactionSyncState != TransactionSynchronizationState.Never);
! return newTransactionStatus(definition, transaction, true, newSynchronization, debugEnabled, null);
}
--- 595,599 ----
DoBegin(transaction, definition);
bool newSynchronization = (_transactionSyncState != TransactionSynchronizationState.Never);
! return NewTransactionStatus(definition, transaction, true, newSynchronization, debugEnabled, null);
}
***************
*** 579,583 ****
}
bool newSynch = (_transactionSyncState != TransactionSynchronizationState.Never);
! return newTransactionStatus(definition, transaction, false, newSynch, debugEnabled, null);
}
--- 604,608 ----
}
bool newSynch = (_transactionSyncState != TransactionSynchronizationState.Never);
! return NewTransactionStatus(definition, transaction, false, newSynch, debugEnabled, null);
}
***************
*** 641,646 ****
try
{
! triggerBeforeCommit(status);
! triggerBeforeCompletion(status);
beforeCompletionInvoked = true;
bool globalRollbackOnly = false;
--- 666,671 ----
try
{
! TriggerBeforeCommit(status);
! TriggerBeforeCompletion(status);
beforeCompletionInvoked = true;
bool globalRollbackOnly = false;
***************
*** 667,671 ****
catch (UnexpectedRollbackException)
{
! triggerAfterCompletion(status, TransactionSynchronizationStatus.Rolledback);
throw;
}
--- 692,696 ----
catch (UnexpectedRollbackException)
{
! TriggerAfterCompletion(status, TransactionSynchronizationStatus.Rolledback);
throw;
}
***************
*** 678,682 ****
else
{
! triggerAfterCompletion(status, TransactionSynchronizationStatus.Unknown);
}
throw;
--- 703,707 ----
else
{
! TriggerAfterCompletion(status, TransactionSynchronizationStatus.Unknown);
}
throw;
***************
*** 686,690 ****
if (!beforeCompletionInvoked)
{
! triggerBeforeCompletion(status);
}
DoRollbackOnCommitException(status, ex);
--- 711,715 ----
if (!beforeCompletionInvoked)
{
! TriggerBeforeCompletion(status);
}
DoRollbackOnCommitException(status, ex);
***************
*** 695,712 ****
try
{
! triggerAfterCommit(status);
}
finally
{
! triggerAfterCompletion(status, TransactionSynchronizationStatus.Committed);
}
}
finally
{
! cleanupAfterCompletion(status);
}
}
! private void triggerAfterCommit(DefaultTransactionStatus status)
{
if (status.NewSynchronization)
--- 720,737 ----
try
{
! TriggerAfterCommit(status);
}
finally
{
! TriggerAfterCompletion(status, TransactionSynchronizationStatus.Committed);
}
}
finally
{
! CleanupAfterCompletion(status);
}
}
! private void TriggerAfterCommit(DefaultTransactionStatus status)
{
if (status.NewSynchronization)
***************
*** 773,777 ****
try
{
! triggerBeforeCompletion(status);
if (status.HasSavepoint)
{
--- 798,802 ----
try
{
! TriggerBeforeCompletion(status);
if (status.HasSavepoint)
{
***************
*** 808,819 ****
catch (Exception)
{
! triggerAfterCompletion(status, TransactionSynchronizationStatus.Unknown);
throw;
}
! triggerAfterCompletion(status, TransactionSynchronizationStatus.Rolledback);
}
finally
{
! cleanupAfterCompletion(status);
}
}
--- 833,844 ----
catch (Exception)
{
! TriggerAfterCompletion(status, TransactionSynchronizationStatus.Unknown);
throw;
}
! TriggerAfterCompletion(status, TransactionSynchronizationStatus.Rolledback);
}
finally
{
! CleanupAfterCompletion(status);
}
}
***************
*** 821,836 ****
#endregion
! #region Private Methods
!
! private DefaultTransactionStatus newTransactionStatus(ITransactionDefinition definition,
! object transaction, bool newTransaction,
! bool newSynchronization, bool debug,
! object suspendedResources)
{
bool actualNewSynchronization = newSynchronization &&
!TransactionSynchronizationManager.SynchronizationActive;
if (actualNewSynchronization)
! {
TransactionSynchronizationManager.ActualTransactionActive = (transaction != null);
TransactionSynchronizationManager.CurrentTransactionIsolationLevel =
--- 846,860 ----
#endregion
! #region Protected Method
! private DefaultTransactionStatus NewTransactionStatus(ITransactionDefinition definition,
! object transaction, bool newTransaction,
! bool newSynchronization, bool debug,
! object suspendedResources)
{
bool actualNewSynchronization = newSynchronization &&
!TransactionSynchronizationManager.SynchronizationActive;
if (actualNewSynchronization)
! {
TransactionSynchronizationManager.ActualTransactionActive = (transaction != null);
TransactionSynchronizationManager.CurrentTransactionIsolationLevel =
***************
*** 846,871 ****
/// <summary>
! /// Create a new TransactionStatus for the given arguments,
! /// initializing transaction synchronization if appropriate.
/// </summary>
! private DefaultTransactionStatus newTransactionStatus2(object transaction, bool newTransaction,
! bool newSynchronization, bool readOnly, bool debug,
! object suspendedResources)
{
! bool actualNewSynchronization = newSynchronization &&
! !TransactionSynchronizationManager.SynchronizationActive;
! if (actualNewSynchronization)
{
!
! //TODO setActualTransactionActive and isolation levels
!
! //TransactionSynchronizationManager.CurrentTransactionName = de
! TransactionSynchronizationManager.InitSynchronization();
}
! return
! new DefaultTransactionStatus(transaction, newTransaction, actualNewSynchronization, readOnly, debug,
! suspendedResources);
}
/// <summary>
/// Suspend the given transaction. Suspends transaction synchronization first,
--- 870,895 ----
/// <summary>
! /// Determines the timeout to use for the given definition. Will fall back to this manager's default
! /// timeout if the transaction definition doesn't specify a non-default value.
/// </summary>
! /// <param name="definition">The transaction definition.</param>
! /// <returns>the actual timeout to use.</returns>
! protected int DetermineTimeout(ITransactionDefinition definition)
{
! if (definition.TransactionTimeout != DefaultTransactionDefinition.TIMEOUT_DEFAULT)
{
! return definition.TransactionTimeout;
}
! return _defaultTimeout;
}
+ #endregion
+
+ #region Private Methods
+
+
+
+
+
/// <summary>
/// Suspend the given transaction. Suspends transaction synchronization first,
***************
*** 874,878 ****
/// <param name="transaction">the current transaction object</param>
/// <returns>an object that holds suspended resources</returns>
! private object suspend(object transaction)
{
if (TransactionSynchronizationManager.SynchronizationActive)
--- 898,902 ----
/// <param name="transaction">the current transaction object</param>
/// <returns>an object that holds suspended resources</returns>
! private object Suspend(object transaction)
{
if (TransactionSynchronizationManager.SynchronizationActive)
***************
*** 949,953 ****
/// <param name="transaction">the current transaction object</param>
/// <param name="suspendedResources"> the object that holds suspended resources, as returned by suspend</param>
! private void resume(object transaction, object suspendedResources)
{
SuspendedResourcesHolder resourcesHolder = (SuspendedResourcesHolder) suspendedResources;
--- 973,977 ----
/// <param name="transaction">the current transaction object</param>
/// <param name="suspendedResources"> the object that holds suspended resources, as returned by suspend</param>
! private void Resume(object transaction, object suspendedResources)
{
SuspendedResourcesHolder resourcesHolder = (SuspendedResourcesHolder) suspendedResources;
***************
*** 1007,1014 ****
//TODO investigate rollback behavior...
log.Error("Commit exception overridden by rollback exception", exception);
! triggerAfterCompletion(status, TransactionSynchronizationStatus.Unknown);
throw;
}
! triggerAfterCompletion(status, TransactionSynchronizationStatus.Rolledback);
}
--- 1031,1038 ----
//TODO investigate rollback behavior...
log.Error("Commit exception overridden by rollback exception", exception);
! TriggerAfterCompletion(status, TransactionSynchronizationStatus.Unknown);
throw;
}
! TriggerAfterCompletion(status, TransactionSynchronizationStatus.Rolledback);
}
***************
*** 1017,1021 ****
/// </summary>
/// <param name="status">object representing the transaction</param>
! private void triggerBeforeCommit(DefaultTransactionStatus status)
{
if (status.NewSynchronization)
--- 1041,1045 ----
/// </summary>
/// <param name="status">object representing the transaction</param>
! private void TriggerBeforeCommit(DefaultTransactionStatus status)
{
if (status.NewSynchronization)
***************
*** 1033,1037 ****
/// </summary>
/// <param name="status">object representing the transaction</param>
! private void triggerBeforeCompletion(DefaultTransactionStatus status)
{
if (status.NewSynchronization)
--- 1057,1061 ----
/// </summary>
/// <param name="status">object representing the transaction</param>
! private void TriggerBeforeCompletion(DefaultTransactionStatus status)
{
if (status.NewSynchronization)
***************
*** 1063,1067 ****
/// Completion status according to <see cref="Spring.Transaction.Support.TransactionSynchronizationStatus"/>
/// </param>
! private void triggerAfterCompletion(DefaultTransactionStatus status, TransactionSynchronizationStatus completionStatus)
{
if (status.NewSynchronization)
--- 1087,1091 ----
/// Completion status according to <see cref="Spring.Transaction.Support.TransactionSynchronizationStatus"/>
/// </param>
! private void TriggerAfterCompletion(DefaultTransactionStatus status, TransactionSynchronizationStatus completionStatus)
{
if (status.NewSynchronization)
***************
*** 1103,1107 ****
/// </summary>
/// <param name="status">object representing the transaction</param>
! private void cleanupAfterCompletion(DefaultTransactionStatus status)
{
status.Completed = true;
--- 1127,1131 ----
/// </summary>
/// <param name="status">object representing the transaction</param>
! private void CleanupAfterCompletion(DefaultTransactionStatus status)
{
status.Completed = true;
***************
*** 1120,1124 ****
log.Debug("Resuming suspended transaction");
}
! resume(status.Transaction, status.SuspendedResources);
}
}
--- 1144,1148 ----
log.Debug("Resuming suspended transaction");
}
! Resume(status.Transaction, status.SuspendedResources);
}
}
|