Re: EmptyInterceptor SetSession / Session Factory Breaking Changes
"Will Shaver" <[email protected]>
| Newsgroups | gmane.comp.windows.dotnet.nhibernate.devel |
|---|---|
| Message-ID | <[email protected]> |
Here's a patch adding the SetSession call back into the SessionFactory. -Will On Wed, Jun 18, 2008 at 4:01 PM, Ayende Rahien <[email protected]> wrote: > Agreed. > > > On Thu, Jun 19, 2008 at 1:56 AM, Will Shaver <[email protected]> > wrote: > >> I'm fine with fixing it so that SetSession is being called in the Session >> Factory too. I just think that we need to call it in the factory OR we >> should remove it from the Interceptor. >> >> -Will >> >> >> >> On Wed, Jun 18, 2008 at 3:51 PM, Ayende Rahien <[email protected]> wrote: >> >>> Hm, this isn't really that good. Consider all the things that wrap NH. >>> There was a reason this was there, because you don't always control the call >>> to OpenSession >>> >>> On Thu, Jun 19, 2008 at 1:40 AM, Will Shaver <[email protected]> >>> wrote: >>> >>>> It looks like Fabio did a bunch of work last weekend refactoring the >>>> session factory and other session factory related stuff. Based on the amount >>>> of code that was changed, I'm sure it was needed. Merging my project to the >>>> trunk, I did find one breaking change. >>>> >>>> The previous versions called something like: >>>> >>>> if >>>> (isSessionScopedInterceptor) >>>> interceptor.SetSession(sessionImpl); >>>> on each Interceptor registered with the session. This was useful in that >>>> you could then overload this in the interceptor and then keep a reference to >>>> that session. This is now removed, which is easy enough to deal with - >>>> simply call the method manually after creating the session. >>>> >>>> session = sessionFactory.OpenSession(interceptor); >>>> interceptor.SetSession(session); >>>> >>>> I of course only found out about this breaking change when running my >>>> interceptor unit tests. (How did I ever write software without unit tests? >>>> Who knows?!) >>>> >>>> Instead, we should remove the SetSession(ISession session) method from >>>> the Interceptor interface and EmptyInterceptor implementation. This will >>>> force people to realize "ohh, if it isn't there, obviously it isn't being >>>> called by NHCore anymore." Then they will change it to non-virtual and call >>>> it themselves without needing to look into the source as I did... >>>> >>>> - Will >>>> >>>> >>>> >>>> >>>> >>>> >>>> ------------------------------------------------------------------------- >>>> Check out the new SourceForge.net Marketplace. >>>> It's the best place to buy or sell services for >>>> just about anything Open Source. >>>> http://sourceforge.net/services/buy/index.php >>>> _______________________________________________ >>>> Nhibernate-development mailing list >>>> [email protected] >>>> https://lists.sourceforge.net/lists/listinfo/nhibernate-development >>>> >>>> >>> >>> ------------------------------------------------------------------------- >>> Check out the new SourceForge.net Marketplace. >>> It's the best place to buy or sell services for >>> just about anything Open Source. >>> http://sourceforge.net/services/buy/index.php >>> _______________________________________________ >>> Nhibernate-development mailing list >>> [email protected] >>> https://lists.sourceforge.net/lists/listinfo/nhibernate-development >>> >>> >> >> ------------------------------------------------------------------------- >> Check out the new SourceForge.net Marketplace. >> It's the best place to buy or sell services for >> just about anything Open Source. >> http://sourceforge.net/services/buy/index.php >> _______________________________________________ >> Nhibernate-development mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/nhibernate-development >> >> > > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://sourceforge.net/services/buy/index.php > _______________________________________________ > Nhibernate-development mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/nhibernate-development > > ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ Nhibernate-development mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/nhibernate-development
SetSession.patch
(text/plain, 977 B)
Index: SessionFactoryImpl.cs
===================================================================
--- SessionFactoryImpl.cs (revision 3564)
+++ SessionFactoryImpl.cs (working copy)
@@ -1080,10 +1080,14 @@
private SessionImpl OpenSession(IDbConnection connection, bool autoClose, long timestamp, IInterceptor sessionLocalInterceptor)
{
- return
- new SessionImpl(connection, this, autoClose, timestamp, sessionLocalInterceptor ?? interceptor,
+ SessionImpl sessionImpl = new SessionImpl(connection, this, autoClose, timestamp, sessionLocalInterceptor ?? interceptor,
settings.DefaultEntityMode, settings.IsFlushBeforeCompletionEnabled,
settings.IsAutoCloseSessionEnabled, settings.ConnectionReleaseMode);
+ if(sessionLocalInterceptor != null)
+ {
+ sessionLocalInterceptor.SetSession(sessionImpl);
+ }
+ return sessionImpl;
}
private ICurrentSessionContext BuildCurrentSessionContext()