From: <aye...@us...> - 2009-06-22 05:26:56
|
Revision: 4508 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4508&view=rev Author: ayenderahien Date: 2009-06-22 05:26:50 +0000 (Mon, 22 Jun 2009) Log Message: ----------- Fixing NH-1844 - SessionIdLoggingContext causing perf problems Modified Paths: -------------- branches/2.1.x/nhibernate/src/NHibernate/Impl/SessionIdLoggingContext.cs branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/Logs/LogsFixture.cs Property Changed: ---------------- branches/2.1.x/nhibernate/src/Iesi.Collections.Test/ branches/2.1.x/nhibernate/src/NHibernate.ByteCode.Castle.Tests/ branches/2.1.x/nhibernate/src/NHibernate.ByteCode.LinFu.Tests/ branches/2.1.x/nhibernate/src/NHibernate.ByteCode.Spring.Tests/ branches/2.1.x/nhibernate/src/NHibernate.Test/ Property changes on: branches/2.1.x/nhibernate/src/Iesi.Collections.Test ___________________________________________________________________ Modified: svn:ignore - bin obj AssemblyInfo.cs [Bb]in [Dd]ebug [Rr]elease *.user *.aps *.eto + bin obj AssemblyInfo.cs [Bb]in [Dd]ebug [Rr]elease *.user *.aps *.eto *.xml Modified: branches/2.1.x/nhibernate/src/NHibernate/Impl/SessionIdLoggingContext.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate/Impl/SessionIdLoggingContext.cs 2009-06-22 05:00:35 UTC (rev 4507) +++ branches/2.1.x/nhibernate/src/NHibernate/Impl/SessionIdLoggingContext.cs 2009-06-22 05:26:50 UTC (rev 4508) @@ -3,10 +3,16 @@ namespace NHibernate.Impl { + using System.Web; + public class SessionIdLoggingContext : IDisposable { - private readonly object oldSessonId; + [ThreadStatic] private static Guid? CurrentSessionId; + private const string CurrentSessionIdKey = "NHibernate.Impl.SessionIdLoggingContext.CurrentSessionId"; + + private readonly Guid? oldSessonId; + public SessionIdLoggingContext(Guid id) { oldSessonId = SessionId; @@ -18,28 +24,20 @@ /// this is usally the case if we are called from the finalizer, since this is something /// that we do only for logging, we ignore the error. /// </summary> - private static object SessionId + public static Guid? SessionId { get { - try - { - return ThreadContext.Properties["sessionId"]; - } - catch (Exception) - { - return null; - } + if (HttpContext.Current != null) + return (Guid?)HttpContext.Current.Items[CurrentSessionIdKey]; + return CurrentSessionId; } set { - try - { - ThreadContext.Properties["sessionId"] = value; - } - catch (Exception) - { - } + if (HttpContext.Current != null) + HttpContext.Current.Items[CurrentSessionIdKey] = value; + else + CurrentSessionId = value; } } Property changes on: branches/2.1.x/nhibernate/src/NHibernate.ByteCode.Castle.Tests ___________________________________________________________________ Modified: svn:ignore - obj .#* *.user *.xsx AssemblyInfo.cs hibernate.cfg.xml *.aps *.eto [Bb]in [Dd]ebug [Rr]elease *resharper* + obj .#* *.user *.xsx AssemblyInfo.cs hibernate.cfg.xml *.aps *.eto [Bb]in [Dd]ebug [Rr]elease *resharper* *.xml Property changes on: branches/2.1.x/nhibernate/src/NHibernate.ByteCode.LinFu.Tests ___________________________________________________________________ Modified: svn:ignore - obj .#* *.user *.xsx AssemblyInfo.cs hibernate.cfg.xml *.aps *.eto [Bb]in [Dd]ebug [Rr]elease *resharper* + obj .#* *.user *.xsx AssemblyInfo.cs hibernate.cfg.xml *.aps *.eto [Bb]in [Dd]ebug [Rr]elease *resharper* *.xml Property changes on: branches/2.1.x/nhibernate/src/NHibernate.ByteCode.Spring.Tests ___________________________________________________________________ Modified: svn:ignore - obj .#* *.user *.xsx *.aps *.eto [Bb]in [Dd]ebug [Rr]elease *resharper* AssemblyInfo.cs hibernate.cfg.xml + obj .#* *.user *.xsx *.aps *.eto [Bb]in [Dd]ebug [Rr]elease *resharper* AssemblyInfo.cs hibernate.cfg.xml *.xml Property changes on: branches/2.1.x/nhibernate/src/NHibernate.Test ___________________________________________________________________ Modified: svn:ignore - bin obj .#* *.user *.xsx AssemblyInfo.cs hibernate.cfg.xml Debug Release *.aps *.eto [Bb]in [Dd]ebug [Rr]elease *resharper* + bin obj .#* *.user *.xsx AssemblyInfo.cs hibernate.cfg.xml Debug Release *.aps *.eto [Bb]in [Dd]ebug [Rr]elease *resharper* *.xml Modified: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/Logs/LogsFixture.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/Logs/LogsFixture.cs 2009-06-22 05:00:35 UTC (rev 4507) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/Logs/LogsFixture.cs 2009-06-22 05:26:50 UTC (rev 4508) @@ -6,6 +6,15 @@ namespace NHibernate.Test.NHSpecificTest.Logs { + using System; + using System.IO; + using System.Text; + using log4net; + using log4net.Appender; + using log4net.Core; + using log4net.Layout; + using log4net.Repository.Hierarchy; + [TestFixture] public class LogsFixture : TestCase { @@ -22,16 +31,62 @@ [Test] public void WillGetSessionIdFromSessionLogs() { - using (var spy = new SqlLogSpy()) + ThreadContext.Properties["sessionId"] = new SessionIdCapturer(); + + using (var spy = new TextLogSpy("NHibernate.SQL", "%message | SessionId: %property{sessionId}")) using (var s = sessions.OpenSession()) { var sessionId = ((SessionImpl)s).SessionId; s.Get<Person>(1);//will execute some sql - var loggingEvent = spy.Appender.GetEvents()[0]; - Assert.AreEqual(sessionId, loggingEvent.Properties["sessionId"]); + var loggingEvent = spy.Events[0]; + Assert.True(loggingEvent.Contains(sessionId.ToString())); } } + + public class SessionIdCapturer + { + public override string ToString() + { + return SessionIdLoggingContext.SessionId.ToString(); + } + } + + public class TextLogSpy : IDisposable + { + private readonly TextWriterAppender appender; + private readonly Logger loggerImpl; + private readonly StringBuilder stringBuilder; + + public TextLogSpy(string loggerName, string pattern) + { + stringBuilder = new StringBuilder(); + appender = new TextWriterAppender + { + Layout = new PatternLayout(pattern), + Threshold = Level.All, + Writer = new StringWriter(stringBuilder) + }; + loggerImpl = (Logger)LogManager.GetLogger(loggerName).Logger; + loggerImpl.AddAppender(appender); + loggerImpl.Level = Level.All; + } + + public string[] Events + { + get + { + return stringBuilder.ToString().Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries); + } + } + + public void Dispose() + { + loggerImpl.RemoveAppender(appender); + } + } } + + } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dav...@us...> - 2009-07-26 15:24:42
|
Revision: 4658 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4658&view=rev Author: davybrion Date: 2009-07-26 15:24:33 +0000 (Sun, 26 Jul 2009) Log Message: ----------- applying patch from Armin Landscheidt to fix NH-1902 Modified Paths: -------------- branches/2.1.x/nhibernate/src/NHibernate/Criterion/Example.cs branches/2.1.x/nhibernate/src/NHibernate.Test/ExpressionTest/QueryByExampleTest.cs Property Changed: ---------------- branches/2.1.x/nhibernate/src/ Property changes on: branches/2.1.x/nhibernate/src ___________________________________________________________________ Added: svn:mergeinfo + /trunk/nhibernate/src:4657 Modified: branches/2.1.x/nhibernate/src/NHibernate/Criterion/Example.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate/Criterion/Example.cs 2009-07-26 15:07:33 UTC (rev 4657) +++ branches/2.1.x/nhibernate/src/NHibernate/Criterion/Example.cs 2009-07-26 15:24:33 UTC (rev 4658) @@ -481,7 +481,7 @@ { bool isString = propertyValue is String; crit = (_isLikeEnabled && isString) ? - (ICriterion) new LikeExpression(propertyName, propertyValue.ToString(), escapeCharacter, _isIgnoreCaseEnabled) : + (ICriterion) new LikeExpression(propertyName, propertyValue.ToString(), _matchMode, escapeCharacter, _isIgnoreCaseEnabled) : new SimpleExpression(propertyName, propertyValue, " = ", _isIgnoreCaseEnabled && isString); } else Modified: branches/2.1.x/nhibernate/src/NHibernate.Test/ExpressionTest/QueryByExampleTest.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/ExpressionTest/QueryByExampleTest.cs 2009-07-26 15:07:33 UTC (rev 4657) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/ExpressionTest/QueryByExampleTest.cs 2009-07-26 15:24:33 UTC (rev 4658) @@ -42,6 +42,51 @@ } [Test] + public void TestEnableLikeWithMatchmodeStart() { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) { + Componentizable master = GetMaster("hib", null, "open source1"); + ICriteria crit = s.CreateCriteria(typeof(Componentizable)); + Example ex = Example.Create(master).EnableLike(MatchMode.Start); + crit.Add(ex); + IList result = crit.List(); + Assert.IsNotNull(result); + Assert.AreEqual(1, result.Count); + t.Commit(); + } + } + + [Test] + public void TestEnableLikeWithMatchmodeEnd() { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) { + Componentizable master = GetMaster("nate", null, "ORM tool1"); + ICriteria crit = s.CreateCriteria(typeof(Componentizable)); + Example ex = Example.Create(master).EnableLike(MatchMode.End); + crit.Add(ex); + IList result = crit.List(); + Assert.IsNotNull(result); + Assert.AreEqual(1, result.Count); + t.Commit(); + } + } + + [Test] + public void TestEnableLikeWithMatchmodeAnywhere() { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) { + Componentizable master = GetMaster("bern", null, null); + ICriteria crit = s.CreateCriteria(typeof(Componentizable)); + Example ex = Example.Create(master).EnableLike(MatchMode.Anywhere); + crit.Add(ex); + IList result = crit.List(); + Assert.IsNotNull(result); + Assert.AreEqual(3, result.Count); + t.Commit(); + } + } + + [Test] public void TestJunctionNotExpressionQBE() { using (ISession s = OpenSession()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aye...@us...> - 2009-10-17 23:44:26
|
Revision: 4769 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4769&view=rev Author: ayenderahien Date: 2009-10-17 23:44:14 +0000 (Sat, 17 Oct 2009) Log Message: ----------- Merging r4768 from trunk Adding current session id for actions that are performed outside of the session but belong the the session. Modified Paths: -------------- branches/2.1.x/nhibernate/src/NHibernate/Id/Insert/AbstractSelectingDelegate.cs branches/2.1.x/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs branches/2.1.x/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs branches/2.1.x/nhibernate/src/NHibernate/Type/DbTimestampType.cs Property Changed: ---------------- branches/2.1.x/nhibernate/src/ branches/2.1.x/nhibernate/src/NHibernate.Test/ Property changes on: branches/2.1.x/nhibernate/src ___________________________________________________________________ Modified: svn:mergeinfo - /trunk/nhibernate/src:4657 + /trunk/nhibernate/src:4657,4768 Modified: branches/2.1.x/nhibernate/src/NHibernate/Id/Insert/AbstractSelectingDelegate.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate/Id/Insert/AbstractSelectingDelegate.cs 2009-10-17 23:34:20 UTC (rev 4768) +++ branches/2.1.x/nhibernate/src/NHibernate/Id/Insert/AbstractSelectingDelegate.cs 2009-10-17 23:44:14 UTC (rev 4769) @@ -2,6 +2,7 @@ using System.Data.Common; using NHibernate.Engine; using NHibernate.Exceptions; +using NHibernate.Impl; using NHibernate.SqlCommand; using NHibernate.SqlTypes; @@ -48,6 +49,7 @@ } SqlString selectSQL = SelectSQL; + using (new SessionIdLoggingContext(session.SessionId)) try { //fetch the generated id in a separate query Modified: branches/2.1.x/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs 2009-10-17 23:34:20 UTC (rev 4768) +++ branches/2.1.x/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs 2009-10-17 23:44:14 UTC (rev 4769) @@ -1504,6 +1504,7 @@ public int GetSize(object key, ISessionImplementor session) { + using(new SessionIdLoggingContext(session.SessionId)) try { IDbCommand st = session.Batcher.PrepareCommand(CommandType.Text, sqlSelectSizeString, KeyType.SqlTypes(factory)); @@ -1540,6 +1541,7 @@ private bool Exists(object key, object indexOrElement, IType indexOrElementType, SqlString sql, ISessionImplementor session) { + using(new SessionIdLoggingContext(session.SessionId)) try { List<SqlType> sqlTl = new List<SqlType>(KeyType.SqlTypes(factory)); @@ -1579,6 +1581,7 @@ public virtual object GetElementByIndex(object key, object index, ISessionImplementor session, object owner) { + using(new SessionIdLoggingContext(session.SessionId)) try { List<SqlType> sqlTl = new List<SqlType>(KeyType.SqlTypes(factory)); Modified: branches/2.1.x/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2009-10-17 23:34:20 UTC (rev 4768) +++ branches/2.1.x/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2009-10-17 23:44:14 UTC (rev 4769) @@ -1230,6 +1230,7 @@ log.Debug("initializing lazy properties from datastore"); + using (new SessionIdLoggingContext(session.SessionId)) try { object result = null; @@ -1406,6 +1407,7 @@ log.Debug("Getting current persistent state for: " + MessageHelper.InfoString(this, id, Factory)); } + using (new SessionIdLoggingContext(session.SessionId)) try { IDbCommand st = session.Batcher.PrepareCommand(CommandType.Text, SQLSnapshotSelectString, IdentifierType.SqlTypes(factory)); @@ -1661,7 +1663,7 @@ { log.Debug("Getting version: " + MessageHelper.InfoString(this, id, Factory)); } - + using(new SessionIdLoggingContext(session.SessionId)) try { IDbCommand st = session.Batcher.PrepareQueryCommand(CommandType.Text, VersionSelectString, IdentifierType.SqlTypes(Factory)); @@ -2415,6 +2417,7 @@ IDbCommand sequentialSelect = null; IDataReader sequentialResultSet = null; bool sequentialSelectEmpty = false; + using (new SessionIdLoggingContext(session.SessionId)) try { if (hasDeferred) @@ -3917,6 +3920,7 @@ { session.Batcher.ExecuteBatch(); //force immediate execution of the insert + using (new SessionIdLoggingContext(session.SessionId)) try { IDbCommand cmd = @@ -4007,6 +4011,7 @@ /////////////////////////////////////////////////////////////////////// object[] snapshot = new object[naturalIdPropertyCount]; + using (new SessionIdLoggingContext(session.SessionId)) try { IDbCommand ps = session.Batcher.PrepareCommand(CommandType.Text, sql, IdentifierType.SqlTypes(factory)); Modified: branches/2.1.x/nhibernate/src/NHibernate/Type/DbTimestampType.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate/Type/DbTimestampType.cs 2009-10-17 23:34:20 UTC (rev 4768) +++ branches/2.1.x/nhibernate/src/NHibernate/Type/DbTimestampType.cs 2009-10-17 23:44:14 UTC (rev 4769) @@ -4,6 +4,7 @@ using log4net; using NHibernate.Engine; using NHibernate.Exceptions; +using NHibernate.Impl; using NHibernate.SqlCommand; using NHibernate.SqlTypes; @@ -58,6 +59,7 @@ var tsSelect = new SqlString(timestampSelectString); IDbCommand ps = null; IDataReader rs = null; + using (new SessionIdLoggingContext(session.SessionId)) try { ps = session.Batcher.PrepareCommand(CommandType.Text, tsSelect, EmptyParams); Property changes on: branches/2.1.x/nhibernate/src/NHibernate.Test ___________________________________________________________________ Modified: svn:ignore - bin obj .#* *.user *.xsx AssemblyInfo.cs hibernate.cfg.xml Debug Release *.aps *.eto [Bb]in [Dd]ebug [Rr]elease *resharper* *.xml + bin obj .#* *.user *.xsx AssemblyInfo.cs hibernate.cfg.xml Debug Release *.aps *.eto [Bb]in [Dd]ebug [Rr]elease *resharper* *.xml Summary.xslt This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |