Why not Castle.Transactions?

Tuna Toksöz
http://tunatoksoz.com
http://turkiyealt.net
http://twitter.com/tehlike

Typos included to enhance the readers attention!



On Tue, Feb 17, 2009 at 9:49 PM, Andrew Melnichuk <
[email protected]> wrote:

> Well, implementation doesn't look complex, and clients will not know all
> that details. Clients just open sessions/starting transaction and
> commit(rollback) transactions/closing sessions - common pattern when working
> with NHibernate.
> Yes ATM will definitely work in that case too, but i need more control over
> transactions, for example, do some additional actions on transaction
> rollback.
> I'm just asking, if ISessionManager supports stack behavior for sessions,
> why it doesn't do same for transactions, which is logical IMO?
>
>
> On Tue, Feb 17, 2009 at 2:20 PM, Jason Meckley <[email protected]>wrote:
>
>>
>> you could implement this logic yourself by decorating the session
>> manager, but this will get messy with tracking how many times open
>> session is called, and then decrementing the count until you "really"
>> commit the transaction.  Not to mention if you call transaction.commit
>> (); the principle of least surprise would dictate that you are
>> actually committing the transaction.
>>
>> ATM is very simple to use. add facility, put Transactional attribute
>> on class, put Transaction attribute on member, Done. Depending on how
>> you structure your code, you could even register the components to get
>> a transaction attribute automatically, so you don't have to think
>> about it. Set and Forget.
>>
>> Jason
>>
>> On Feb 17, 5:57 am, Andrew Melnichuk <[email protected]>
>> wrote:
>> > Thanks pointing to this. It would work. But what i thought is that it is
>> > logical to have this stack behavior of Begin/Commit calls right in
>> > ISessionManager - if only first BeginTransaction() starts new
>> transaction
>> > and further calls return existing transaction, then only last Commit()
>> > commits transaction. Same like OpenSession()/Close() methods do. What
>> you
>> > think?
>> >
>> > On Tue, Feb 17, 2009 at 12:41 PM, Germán Schuager <[email protected]
>> >wrote:
>> >
>> >
>> >
>> > > Use Automatic Transaction Management facility:
>> > >http://castleproject.org/container/facilities/trunk/nhibernate/transa.
>> ..
>> >
>> > > On Tue, Feb 17, 2009 at 7:32 AM, Andrew Melnichuk <
>> > > [email protected]> wrote:
>> >
>> > >> Hi All.
>> >
>> > >> I have several components, which use ISessionManager.
>> > >> Typical component method is:
>> > >> using (ISession s = sessMgr.OpenSession())
>> > >> using (ITransaction tx = s.BeginTransaction())
>> > >> {
>> > >>     //save something here...
>> > >>     tx.Commit();
>> > >> }
>> >
>> > >> But some component methods call other component methods, so i need a
>> kind
>> > >> of transaction stack behavior:
>> > >> public void Outer()
>> > >> {
>> > >>     using (ISession s = sessMgr.OpenSession())
>> > >>     using (ITransaction tx = s.BeginTransaction())
>> > >>     {
>> > >>         //save something here...
>> > >>         Inner();
>> > >>         tx.Commit();
>> > >>      }
>> > >> }
>> >
>> > >> public void Inner()
>> > >> {
>> > >>     using (ISession s = sessMgr.OpenSession())
>> > >>     using (ITransaction tx = s.BeginTransaction())
>> > >>     {
>> > >>        //save something here...
>> > >>         tx.Commit();
>> > >>     }
>> > >> }
>> >
>> > >> Inner's BeginTransaction() call returns existing transaction, its ok,
>> but
>> > >> Inner's Commit() call commits it, so the Outer's Commit() raises
>> exception.
>> > >> ISessionManager supports nested ISession's, as described here
>> > >>
>> http://castleproject.org/container/facilities/trunk/nhibernate/usingi....
>> >
>> > >> Is there a way to use with nested transactions?
>> >
>> > >> --
>> > >> Best regards,
>> > >> Andrew Melnichuk
>> >
>> > --
>> > Best regards,
>> > Andrew Melnichuk
>>
>>
>
>
> --
> Best regards,
> Andrew Melnichuk
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to