Well, yes, but this is just a suggestion. Judging from code, there is a ISession proxy which handles session stack behavior. So maybe introduce ITransaction proxy, which does the similar thing for transactions?
On Tue, Feb 17, 2009 at 10:01 PM, Tuna Toksoz <[email protected]> wrote: > I see that you want something on session manager, I may think on this, but > no promises(i don't have time atm) > > 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:57 PM, Tuna Toksoz <[email protected]> wrote: > >> 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 >>> >>> >>> >> > > > > -- 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 -~----------~----~----~----~------~----~------~--~---
