|
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.
|