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

Reply via email to