I make a cross to the centre for Oren but Steve come running from back and,
with a stunning header, Goal!

2010/2/18 Stephen Bohlen <[email protected]>

> The simpl(est) synopsis of the reasons for this can be found on the NHProf
> site here for reference...
>
> http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions
>
> Steve Bohlen
> [email protected]
> http://blog.unhandled-exceptions.com
> http://twitter.com/sbohlen
>
>
>
> On Thu, Feb 18, 2010 at 3:49 PM, Fabio Maulo <[email protected]> wrote:
>
>> Well that is the matter... now try to ask to Ayende what happen when you
>> are using the session without a NH's transaction even if you are running
>> read-only queries...
>> Oren, the ball is for you now ;) (as in football)
>>
>>
>> 2010/2/18 Michael Teper <[email protected]>
>>
>>>  Yes.
>>>
>>> -Michael
>>>
>>>  ------------------------------
>>> *From:* [email protected] [
>>> [email protected]] On Behalf Of Fabio Maulo [
>>> [email protected]]
>>> *Sent:* Thursday, February 18, 2010 3:39 PM
>>>
>>> *To:* [email protected]
>>> *Subject:* Re: [nhibernate-development] Re:
>>> AdoNetWithDistrubtedTransactionFactory
>>>
>>>  and when the "Page event handlers" does not start an AmbientTransaction
>>> ?
>>> what happen ?
>>> You are working with session but without NH's transaction ?
>>>
>>> 2010/2/18 Michael Teper <[email protected]>
>>>
>>>>  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]>
>>>>
>>>>> 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]>
>>>>>
>>>>>  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] [
>>>>>> [email protected]] On Behalf Of Fabio Maulo [
>>>>>> [email protected]]
>>>>>> *Sent:* Thursday, February 18, 2010 6:53 AM
>>>>>>
>>>>>> *To:* [email protected]
>>>>>>  *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]>
>>>>>>
>>>>>>> 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]> 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]>
>>>>>>>  >
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> > > 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
>>>>
>>>>
>>>
>>>
>>> --
>>> Fabio Maulo
>>>
>>>
>>
>>
>> --
>> Fabio Maulo
>>
>>
>


-- 
Fabio Maulo

Reply via email to