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
-~----------~----~----~----~------~----~------~--~---

Reply via email to