From: <aye...@us...> - 2009-05-16 08:09:36
|
Revision: 4328 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4328&view=rev Author: ayenderahien Date: 2009-05-16 08:09:29 +0000 (Sat, 16 May 2009) Log Message: ----------- NH-1714 - changing GetSession to create a new child session if asking for a session with the same entity mode Allows to continue using the same audit scenarios Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/DomainClass.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/LogClass.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/SimpleReproductionFixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/UseCaseDemonstrationFixture.cs Modified: trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs 2009-05-16 07:30:51 UTC (rev 4327) +++ trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs 2009-05-16 08:09:29 UTC (rev 4328) @@ -2332,10 +2332,15 @@ { using (new SessionIdLoggingContext(sessionId)) { - if (this.entityMode.Equals(entityMode)) - { - return this; - } + // This is explicitly removed to allow support + // for child sessions that want to flush during + // the parent session lifecycle. See NH-1714, + // and the suggested audit examples. + // + //if (this.entityMode.Equals(entityMode)) + //{ + // return this; + //} if (rootSession != null) { Property changes on: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714 ___________________________________________________________________ Added: bugtraq:url + http://jira.nhibernate.org/browse/%BUGID% Added: bugtraq:logregex + NH-\d+ Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/DomainClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/DomainClass.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/DomainClass.cs 2009-05-16 08:09:29 UTC (rev 4328) @@ -0,0 +1,22 @@ + + +namespace NHibernate.Test.NHSpecificTest.NH1714 +{ + public class DomainClass + { + private byte[] byteData; + private int id; + + public int Id + { + get { return id; } + set { id = value; } + } + + public byte[] ByteData + { + get { return byteData; } + set { byteData = value; } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/LogClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/LogClass.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/LogClass.cs 2009-05-16 08:09:29 UTC (rev 4328) @@ -0,0 +1,20 @@ +namespace NHibernate.Test.NHSpecificTest.NH1714 +{ + public class LogClass + { + private byte[] byteData; + private int id; + + public int Id + { + get { return id; } + set { id = value; } + } + + public byte[] ByteData + { + get { return byteData; } + set { byteData = value; } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/Mappings.hbm.xml 2009-05-16 08:09:29 UTC (rev 4328) @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH1714" default-access="field.camelcase" + default-lazy="false"> + <class name="DomainClass"> + <id name="Id"> + <generator class="native" /> + </id> + <property name="ByteData" /> + </class> + <class name="LogClass"> + <id name="Id"> + <generator class="native" /> + </id> + </class> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/SimpleReproductionFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/SimpleReproductionFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/SimpleReproductionFixture.cs 2009-05-16 08:09:29 UTC (rev 4328) @@ -0,0 +1,43 @@ +using System; +using NHibernate.Dialect; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1714 +{ + [TestFixture] + public class SimpleReproductionFixture : BugTestCase + { + protected override bool AppliesTo(NHibernate.Dialect.Dialect dialect) + { + return dialect as MsSql2005Dialect != null; + } + + [Test] + public void DbCommandsFromEventListenerShouldBeEnlistedInRunningTransaction() + { + using (ISession session = OpenSession()) + { + using (var tx = session.BeginTransaction()) + { + var entity = new DomainClass(); + session.Save(entity); + + using (var otherSession = session.GetSession(EntityMode.Poco)) + { + otherSession.Save(new DomainClass()); + otherSession.Flush(); + } + + tx.Commit(); + } + } + + using(var session = OpenSession()) + using (var tx = session.BeginTransaction()) + { + session.Delete("from DomainClass"); + tx.Commit(); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/UseCaseDemonstrationFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/UseCaseDemonstrationFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1714/UseCaseDemonstrationFixture.cs 2009-05-16 08:09:29 UTC (rev 4328) @@ -0,0 +1,73 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using NHibernate.Dialect; +using NHibernate.Event; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1714 +{ + [TestFixture] + public class UseCaseDemonstrationFixture : BugTestCase + { + protected override void OnSetUp() + { + base.OnSetUp(); + var listener = new IPreInsertEventListener[this.cfg.EventListeners.PreInsertEventListeners.Length + 1]; + this.cfg.EventListeners.PreInsertEventListeners.CopyTo(listener, 0); + listener[listener.Length - 1] = new MyCustomEventListener(); + + this.cfg.EventListeners.PreInsertEventListeners = listener; + } + + protected override bool AppliesTo(NHibernate.Dialect.Dialect dialect) + { + return dialect as MsSql2005Dialect != null; + } + + [Test] + public void DbCommandsFromEventListenerShouldBeEnlistedInRunningTransaction() + { + using (ISession session = this.OpenSession()) + { + using (var tx = session.BeginTransaction()) + { + var entity = new DomainClass(); + session.Save(entity); + + tx.Commit(); + } + } + + using (ISession session = this.OpenSession()) + { + using (var tx = session.BeginTransaction()) + { + session.Delete("from DomainClass"); + session.Delete("from LogClass"); + tx.Commit(); + } + } + } + } + + public class MyCustomEventListener : IPreInsertEventListener + { + public bool OnPreInsert(PreInsertEvent e) + { + if(e.Entity is DomainClass == false) + return false; + + // this will join into the parent's transaction + using (var session = e.Session.GetSession(EntityMode.Poco)) + { + //should insert log record here + session.Save(new LogClass()); + session.Flush(); + } + + return false; + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-05-16 07:30:51 UTC (rev 4327) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-05-16 08:09:29 UTC (rev 4328) @@ -387,6 +387,10 @@ <Compile Include="NHSpecificTest\NH1713\Fixture.cs"> <SubType>Code</SubType> </Compile> + <Compile Include="NHSpecificTest\NH1714\DomainClass.cs" /> + <Compile Include="NHSpecificTest\NH1714\LogClass.cs" /> + <Compile Include="NHSpecificTest\NH1714\SimpleReproductionFixture.cs" /> + <Compile Include="NHSpecificTest\NH1714\UseCaseDemonstrationFixture.cs" /> <Compile Include="NHSpecificTest\NH1715\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1715\ClassA.cs" /> <Compile Include="NHSpecificTest\NH1716\ClassA.cs" /> @@ -1800,6 +1804,7 @@ <EmbeddedResource Include="BulkManipulation\SimpleClass.hbm.xml" /> <EmbeddedResource Include="Ado\VerySimple.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1714\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1763\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\ElementsEnums\SimpleWithEnumsNoName.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\ElementsEnums\SimpleWithEnumsPartialName.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |