Fabio, Ayende,

Another thing to consider is the nested transaction scenario like this:

using (var scopeOuter = new TransactionScope())
{
   // load / change some object(s)

   using (var innerScope = new TransactionScope())
   {
       try
       {
           // load / change something else
           innerScope.complete();
       }
       catch { // do something }
    }

    outerScope.complete();
}

This may look silly but if the inner transaction is encapsulated in a different 
class, this is a very plausible scenario. Wherever NH keeps track of the 
current transaction scope, it needs to be aware of potential for nesting.

Thanks!
-Michael


________________________________
From: [email protected] 
[[email protected]] On Behalf Of Fabio Maulo 
[[email protected]]
Sent: Monday, March 23, 2009 9:45 AM
To: [email protected]
Subject: [nhibernate-development] Re: More DTC issues



2009/3/23 Ayende Rahien <[email protected]<mailto:[email protected]>>
The problem is that usually the DTC is opened by a lower level component, and 
my code has no control over it.
More than that, I usually don't have control over NH's code as well.

It goes like this:

1/ low level infrastructure - dtc
2/ high level infarstruture - nh
3/ business code - my stuff

and then
3 -end
2- end
1-end

If 2 don't know about 1, 2 should use session.BeginTransaction and 
session.Transaction.Commit().


I don't want to be aware of all of this issues, I just want to make this work.
So explicitly flushing is an option that I would generally be against.

Making NH's transaction equal to the dtc is also not a good option, because the 
use of the DTC is to manage several resources, not just NH.

You know... I never said dtc=nhTx
What I would like to avoid is If(DTC) {something} else {somethingelse} inside 
NH-Core.

--
Fabio Maulo

Reply via email to