From: <fab...@us...> - 2010-10-13 12:55:22
|
Revision: 5250 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5250&view=rev Author: fabiomaulo Date: 2010-10-13 12:55:16 +0000 (Wed, 13 Oct 2010) Log Message: ----------- Fix NH-2376 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Event/EventListeners.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs Modified: trunk/nhibernate/src/NHibernate/Event/EventListeners.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/EventListeners.cs 2010-10-12 21:27:00 UTC (rev 5249) +++ trunk/nhibernate/src/NHibernate/Event/EventListeners.cs 2010-10-13 12:55:16 UTC (rev 5250) @@ -626,23 +626,31 @@ return this; } - public void DestroyListeners() - { - try - { - foreach (object i in initializedListeners) - { - IDestructible destructible = i as IDestructible; - if (destructible != null) - { - destructible.Cleanup(); - } - } - } - catch (Exception e) - { - throw new HibernateException("could not destruct listeners", e); - } - } + public void DestroyListeners() + { + try + { + foreach (object i in initializedListeners) + { + var destructible = i as IDestructible; + if (destructible != null) + { + destructible.Cleanup(); + } + else + { + var disposable = i as IDisposable; + if (disposable != null) + { + disposable.Dispose(); + } + } + } + } + catch (Exception e) + { + throw new HibernateException("could not destruct/dispose listeners", e); + } + } } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs 2010-10-13 12:55:16 UTC (rev 5250) @@ -0,0 +1,35 @@ +using System; +using NHibernate.Cfg; +using NHibernate.Event; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.Events +{ + public class MyDisposableListener : IPostUpdateEventListener, IDisposable + { + public void OnPostUpdate(PostUpdateEvent @event) + { + } + + public bool DisposeCalled { get; private set; } + public void Dispose() + { + DisposeCalled = true; + } + } + + public class DisposableListenersTest + { + [Test] + public void WhenCloseSessionFactoryThenCallDisposeOfListener() + { + Configuration cfg = TestConfigurationHelper.GetDefaultConfiguration(); + var myDisposableListener = new MyDisposableListener(); + cfg.AppendListeners(ListenerType.PostUpdate, new[]{myDisposableListener}); + var sf = cfg.BuildSessionFactory(); + sf.Close(); + myDisposableListener.DisposeCalled.Should().Be.True(); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-12 21:27:00 UTC (rev 5249) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-13 12:55:16 UTC (rev 5250) @@ -196,6 +196,7 @@ <Compile Include="EngineTest\NativeSQLQueryNonScalarReturnTest.cs" /> <Compile Include="EngineTest\NativeSQLQueryScalarReturnTest.cs" /> <Compile Include="EngineTest\NativeSQLQuerySpecificationTest.cs" /> + <Compile Include="Events\DisposableListenersTest.cs" /> <Compile Include="ExceptionsTest\NullQueryTest.cs" /> <Compile Include="ExpressionTest\RestrictionsFixture.cs" /> <Compile Include="Criteria\Student.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |