From: <aye...@us...> - 2009-01-09 12:56:07
|
Revision: 3981 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3981&view=rev Author: ayenderahien Date: 2009-01-09 11:49:30 +0000 (Fri, 09 Jan 2009) Log Message: ----------- Adding logging for DTC operations Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs Modified: trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-01-08 16:21:22 UTC (rev 3980) +++ trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-01-09 11:49:30 UTC (rev 3981) @@ -17,6 +17,8 @@ namespace NHibernate.Impl { + using log4net; + /// <summary> Functionality common to stateless and stateful sessions </summary> [Serializable] public abstract class AbstractSessionImpl : ISessionImplementor, IEnlistmentNotification @@ -28,6 +30,8 @@ private bool isAlreadyDisposed; protected bool shouldCloseSessionOnDtcTransactionCompleted; + private static readonly ILog logger = LogManager.GetLogger(typeof (AbstractSessionImpl)); + protected bool TakingPartInDtcTransaction { get @@ -259,10 +263,12 @@ Flush(); } preparingEnlistment.Prepared(); + logger.Debug("prepared for DTC transaction"); } void IEnlistmentNotification.Commit(Enlistment enlistment) { + logger.Debug("committing DTC transaction"); // we have nothing to do here, since it is the actual // DB connection that will commit the transaction enlistment.Done(); @@ -271,12 +277,14 @@ void IEnlistmentNotification.Rollback(Enlistment enlistment) { AfterTransactionCompletion(false, null); + logger.Debug("rolled back DTC transaction"); enlistment.Done(); } void IEnlistmentNotification.InDoubt(Enlistment enlistment) { AfterTransactionCompletion(false, null); + logger.Debug("DTC transaction is in doubt"); enlistment.Done(); } @@ -287,6 +295,7 @@ if (System.Transactions.Transaction.Current==null) return; ambientTransation = System.Transactions.Transaction.Current; + logger.Debug("enlisted into DTC transaction"); AfterTransactionBegin(null); ambientTransation.TransactionCompleted += delegate(object sender, TransactionEventArgs e) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aye...@us...> - 2009-01-09 23:31:21
|
Revision: 3983 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3983&view=rev Author: ayenderahien Date: 2009-01-09 23:31:13 +0000 (Fri, 09 Jan 2009) Log Message: ----------- Logging the isolation level for DTC tx. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs Modified: trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-01-09 20:48:07 UTC (rev 3982) +++ trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-01-09 23:31:13 UTC (rev 3983) @@ -295,7 +295,7 @@ if (System.Transactions.Transaction.Current==null) return; ambientTransation = System.Transactions.Transaction.Current; - logger.Debug("enlisted into DTC transaction"); + logger.DebugFormat("enlisted into DTC transaction: {0}", ambientTransation.IsolationLevel); AfterTransactionBegin(null); ambientTransation.TransactionCompleted += delegate(object sender, TransactionEventArgs e) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aye...@us...> - 2009-03-24 10:59:06
|
Revision: 4151 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4151&view=rev Author: ayenderahien Date: 2009-03-24 10:59:04 +0000 (Tue, 24 Mar 2009) Log Message: ----------- implementing a fix to flush during prepared event in escalated DTC tx Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs Modified: trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-03-22 17:56:16 UTC (rev 4150) +++ trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-03-24 10:59:04 UTC (rev 4151) @@ -260,14 +260,19 @@ { try { - BeforeTransactionCompletion(null); - if (FlushMode != FlushMode.Never) + using(var tx = new TransactionScope(ambientTransation)) { - using (ConnectionManager.FlushingFromDtcTransaction) - Flush(); - } - preparingEnlistment.Prepared(); - logger.Debug("prepared for DTC transaction"); + BeforeTransactionCompletion(null); + if (FlushMode != FlushMode.Never) + { + using (ConnectionManager.FlushingFromDtcTransaction) + Flush(); + } + logger.Debug("prepared for DTC transaction"); + + tx.Complete(); + } + preparingEnlistment.Prepared(); } catch (Exception exception) { @@ -315,7 +320,7 @@ if (shouldCloseSessionOnDtcTransactionCompleted) Dispose(true); }; - ambientTransation.EnlistVolatile(this, EnlistmentOptions.None); + ambientTransation.EnlistVolatile(this, EnlistmentOptions.EnlistDuringPrepareRequired); } protected abstract void Dispose(bool disposing); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aye...@us...> - 2009-03-24 11:27:28
|
Revision: 4152 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4152&view=rev Author: ayenderahien Date: 2009-03-24 11:27:18 +0000 (Tue, 24 Mar 2009) Log Message: ----------- cloning and disposing of the ambient transaction, instead of using the current one. This protects us from bugs in the framework that dispose the transaction early. Fixed NH-1676 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs Modified: trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-03-24 10:59:04 UTC (rev 4151) +++ trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-03-24 11:27:18 UTC (rev 4152) @@ -190,6 +190,15 @@ protected internal void SetClosed() { + try + { + if (ambientTransation != null) + ambientTransation.Dispose(); + } + catch (Exception) + { + //ignore + } closed = true; } @@ -310,7 +319,7 @@ return; if (System.Transactions.Transaction.Current==null) return; - ambientTransation = System.Transactions.Transaction.Current; + ambientTransation = System.Transactions.Transaction.Current.Clone(); logger.DebugFormat("enlisted into DTC transaction: {0}", ambientTransation.IsolationLevel); AfterTransactionBegin(null); ambientTransation.TransactionCompleted += delegate(object sender, TransactionEventArgs e) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-04-14 22:39:28
|
Revision: 4180 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4180&view=rev Author: fabiomaulo Date: 2009-04-14 22:39:25 +0000 (Tue, 14 Apr 2009) Log Message: ----------- Removed some TODO Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs Modified: trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-04-14 18:11:54 UTC (rev 4179) +++ trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-04-14 22:39:25 UTC (rev 4180) @@ -25,7 +25,7 @@ { [NonSerialized] private ISessionFactoryImplementor factory; - private bool closed = false; + private bool closed; private System.Transactions.Transaction ambientTransation; private bool isAlreadyDisposed; protected bool shouldCloseSessionOnDtcTransactionCompleted; @@ -105,7 +105,7 @@ throw new MappingException("Named SQL query not known: " + name); } IQuery query = new SqlQueryImpl(nsqlqd, this, factory.QueryPlanCache.GetSQLParameterMetadata(nsqlqd.QueryString)); - //query.SetComment("named native SQL query " + name); + query.SetComment("named native SQL query " + name); InitQuery(query, nsqlqd); return query; } @@ -128,10 +128,10 @@ public abstract IDbConnection Connection { get; } public abstract int ExecuteNativeUpdate(NativeSQLQuerySpecification specification, QueryParameters queryParameters); public abstract int ExecuteUpdate(string query, QueryParameters queryParameters); - public abstract FutureCriteriaBatch FutureCriteriaBatch { get; internal set; } - public abstract FutureQueryBatch FutureQueryBatch { get; internal set; } + public abstract FutureCriteriaBatch FutureCriteriaBatch { get; internal set; } + public abstract FutureQueryBatch FutureQueryBatch { get; internal set; } - public virtual IQuery GetNamedQuery(string queryName) + public virtual IQuery GetNamedQuery(string queryName) { CheckAndUpdateSessionStatus(); NamedQueryDefinition nqd = factory.GetNamedQuery(queryName); @@ -140,7 +140,7 @@ { string queryString = nqd.QueryString; query = new QueryImpl(queryString, nqd.FlushMode, this, GetHQLQueryPlan(queryString, false).ParameterMetadata); - //query.SetComment("named HQL query " + queryName); + query.SetComment("named HQL query " + queryName); } else { @@ -150,7 +150,7 @@ throw new MappingException("Named query not known: " + queryName); } query = new SqlQueryImpl(nsqlqd, this, factory.QueryPlanCache.GetSQLParameterMetadata(nsqlqd.QueryString)); - //query.SetComment("named native SQL query " + queryName); + query.SetComment("named native SQL query " + queryName); nqd = nsqlqd; } InitQuery(query, nqd); @@ -210,25 +210,25 @@ { query.SetTimeout(nqd.Timeout); } - //if (nqd.FetchSize != -1) - //{ - // query.SetFetchSize(nqd.FetchSize); - //} + if (nqd.FetchSize != -1) + { + query.SetFetchSize(nqd.FetchSize); + } if (nqd.CacheMode.HasValue) query.SetCacheMode(nqd.CacheMode.Value); query.SetReadOnly(nqd.IsReadOnly); - //if (nqd.Comment != null) - //{ - // query.SetComment(nqd.Comment); - //} + if (nqd.Comment != null) + { + query.SetComment(nqd.Comment); + } } public virtual IQuery CreateQuery(string queryString) { CheckAndUpdateSessionStatus(); QueryImpl query = new QueryImpl(queryString, this, GetHQLQueryPlan(queryString, false).ParameterMetadata); - //query.SetComment(queryString); + query.SetComment(queryString); return query; } @@ -236,7 +236,7 @@ { CheckAndUpdateSessionStatus(); SqlQueryImpl query = new SqlQueryImpl(sql, this, factory.QueryPlanCache.GetSQLParameterMetadata(sql)); - //query.SetComment("dynamic native SQL query"); + query.SetComment("dynamic native SQL query"); return query; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |