Michael, I have couple of question to you,
Whats your Session FlushMode option? How do you handle session on transaction(TransactionScope) failures? - Sathish On Feb 18, 5:28 pm, Michael Teper <[email protected]> wrote: > Fabio, > > My main environment is an ASP.NET application, using session per request > pattern, with a bit of an abstraction on top of NH, so no, actual code is not > a 100% match to the method I sketched up. The session is opened on first use > (rather than explicitly) and is closed in an EndRequest handler. Page event > handlers use TransactionScope, so the effective life cycle of an NH session > looks more like this: > > - new TransactionScope() > - OpenSession > - session.SaveOrUpdate > - scope.Complete > - session.Close > > This works, but I wanted to make sure I am not moving too far from the > correct pattern. Based on Ayende's response, sounds like we should be OK. > Right? > > Thank you! > -Michael > > ________________________________ > From: [email protected] > [[email protected]] On Behalf Of Fabio Maulo > [[email protected]] > Sent: Thursday, February 18, 2010 3:21 PM > To: [email protected] > Subject: Re: [nhibernate-development] Re: > AdoNetWithDistrubtedTransactionFactory > > Michael, > Perhaps my questions does not sound as a support request but even so an > answer will be appreciate and may help some user. > > 2010/2/18 Fabio Maulo <[email protected]<mailto:[email protected]>> > questions: > Are you managing the NH's session and trasaction at the same level of ambient > transaction ? > Where you are opening a NH's session and NH's transaction should you be aware > of ambient transaction ? > > Where I'm managing the NH's session and NH's transaction I can't, and I > wouldn't, be aware if it happen in an AmbientTransaction or not. > Have you some place where the code in your app. look like that you sent us ? > > 2010/2/18 Michael Teper > <[email protected]<mailto:[email protected]>> > > Fabio, > > Does that mean the correct pattern is: > > public void DoSomething() > { > using (var scope = new TransactionScope()) > { > var s = SessionFactory.OpenSession(); > s.BeginTransaction(); > > var foo = s.Get<Foo>(); > foo.Prop = "bar"; > s.SaveOrUpdate(foo); > > s.CommitTransaction(); > scope.Complete(); > } > > } > > If so, why are BeginTransaction and CommitTransaction needed? They feel > redundant... > > Thank you! > -Michael > > ________________________________ > From: > [email protected]<mailto:nhibernate-developm...@googl > egroups.com> > [[email protected]<mailto:nhibernate-developm...@goog > legroups.com>] On Behalf Of Fabio Maulo > [[email protected]<mailto:[email protected]>] > Sent: Thursday, February 18, 2010 6:53 AM > > To: > [email protected]<mailto:nhibernate-developm...@googl > egroups.com> > Subject: Re: [nhibernate-development] Re: > AdoNetWithDistrubtedTransactionFactory > > In order to use NH correctly you should: > 1) throw away the session after an exception > 2) use the NH's transaction > > Use NH's transaction mean: > 1) open the session inside a transactionscope > 2) after open the session begin a NH's transaction using > session.BeginTransaction > > 2010/2/18 Sathish Naga <[email protected]<mailto:[email protected]>> > The test is reflecting the way I use the NH session and transaction > scope. > > When I run the test with the default transaction > factory(AdoNetWithDistrubtedTransactionFactory), it fails on first > session.Clear. > > When I override the Session Factory to use the AdoTransactionFactory, > sample test didn't fail on first session.Clear(). > > I have the test as patch, if you want I can send/upload it. > > Thanks > Sathish > > On Feb 17, 9:51 pm, Fabio Maulo > <[email protected]<mailto:[email protected]>> wrote: > > > > > > > Where is the NH's transaction ? (ITransaction) > > I mean... you said you have a issue > > with AdoNetWithDistrubtedTransactionFactory but in your code you haven't use > > it, so... where is the issue ? > > > 2010/2/17 Sathish Naga <[email protected]<mailto:[email protected]>> > > > > Hi, > > > > I've a issue with NHibernate 2.1x and > > > AdoNetWithDistrubtedTransactionFactory and SessionImpl. > > > > To give you background of my Infrastructure, I have a NH session > > > created per web request. > > > > On Begin Request I create a Session and On End Request, I clear and > > > dispose the NH session. > > > > using (ISession s = sessions.OpenSession()) > > > { > > > s.FlushMode = FlushMode.Commit; > > > > using (var tx = new > > > TransactionScope(TransactionScopeOption.Required, > > > new TimeSpan(0,0,0,0,10000))) > > > > // > > > Set timeout to 10 secs > > > { > > > try > > > { > > > s.Save(new Person { CreatedAt = DateTime.Now}); > > > Thread.Sleep(20000); //Sleep for 20 secs to timeout > > > the transaction > > > s.Flush(); > > > tx.Complete(); > > > } > > > catch (Exception ex) > > > { > > > //when this transaction fails, clear internal > > > entity > > > cache on > > > session and move on > > > s.Clear();// > > > } > > > } > > > //This transaction expected to be successful > > > using (var tx = new TransactionScope()) > > > { > > > try > > > { > > > s.Save(new Person { CreatedAt = DateTime.Now }); > > > s.Flush(); > > > tx.Complete(); > > > } > > > catch (Exception ex) > > > { > > > s.Clear(); > > > } > > > } > > > } > > > > As i reuse the same session for multiple transactions, when any of my > > > transaction fails, I want to clear the session internal cache. In that > > > case when the error is due to TransactionScope it fails on > > > session.clear and brings whole application down. > > > > Once JIRA is up, I'm going to add this defect. I have the test > > > created, Looks like I cant attach the patch to this mail. > > > -- > > Fabio Maulo > > -- > Fabio Maulo > > -- > Fabio Maulo > > -- > Fabio Maulo
