|
From: <kp...@us...> - 2009-01-26 10:27:03
|
Revision: 4001
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4001&view=rev
Author: kpixel
Date: 2009-01-26 10:26:50 +0000 (Mon, 26 Jan 2009)
Log Message:
-----------
Port "HHH-2884 : SessionFactory close notifications" from Revision 14452 (Hibernate 3.1)
Except SessionFactoryObserver and test/events/CallbackTest
Revision Links:
--------------
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=14452&view=rev
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Event/EventListeners.cs
trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Event/IDestructible.cs
Modified: trunk/nhibernate/src/NHibernate/Event/EventListeners.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Event/EventListeners.cs 2009-01-25 19:31:49 UTC (rev 4000)
+++ trunk/nhibernate/src/NHibernate/Event/EventListeners.cs 2009-01-26 10:26:50 UTC (rev 4001)
@@ -12,6 +12,8 @@
[Serializable]
public class EventListeners
{
+ private readonly List<object> initializedListeners = new List<object>();
+
private static readonly IDictionary<ListenerType, System.Type> eventInterfaceFromType =
new Dictionary<ListenerType, System.Type>(28);
@@ -607,6 +609,7 @@
private void InitializeListeners(Configuration cfg, object[] list)
{
+ initializedListeners.AddRange(list);
foreach (object i in list)
{
IInitializable initializable = i as IInitializable;
@@ -622,5 +625,24 @@
// todo-events Not ported
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);
+ }
+ }
}
}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Event/IDestructible.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Event/IDestructible.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Event/IDestructible.cs 2009-01-26 10:26:50 UTC (rev 4001)
@@ -0,0 +1,15 @@
+
+namespace NHibernate.Event
+{
+ /// <summary>
+ /// Contract for listeners which require notification of SessionFactory closing,
+ /// presumably to destroy internal state.
+ /// </summary>
+ public interface IDestructible
+ {
+ /// <summary>
+ /// Notification of <see cref="ISessionFactory"/> shutdown.
+ /// </summary>
+ void Cleanup();
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2009-01-25 19:31:49 UTC (rev 4000)
+++ trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2009-01-26 10:26:50 UTC (rev 4001)
@@ -743,6 +743,8 @@
{
schemaExport.Drop(false, true);
}
+
+ eventListeners.DestroyListeners();
}
public void Evict(System.Type persistentClass, object id)
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-01-25 19:31:49 UTC (rev 4000)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-01-26 10:26:50 UTC (rev 4001)
@@ -452,6 +452,7 @@
<Compile Include="Dialect\SybaseASA9Dialect.cs" />
<Compile Include="Driver\IfxDriver.cs" />
<Compile Include="Driver\OracleLiteDataClientDriver.cs" />
+ <Compile Include="Event\IDestructible.cs" />
<Compile Include="Exceptions\ReflectionBasedSqlStateExtracter.cs" />
<Compile Include="Exceptions\SqlStateExtracter.cs" />
<Compile Include="Exceptions\TemplatedViolatedConstraintNameExtracter.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|