I was referring to the current trunk version in my post. I really appreciate that the integration of ambient transactions is on its way to being implemented because I am convinced that they are of major importance for the acceptance of NH in enterprise apps.
H. Heinzelreiter On Jan 2, 1:28 pm, "Fabio Maulo" <[email protected]> wrote: > Ambient trans is partially supported in the trunk.All committers know that > we have a pretty big work to do to support TransactionContext (porting a > similar classes organization from H3.2.6). > > 2009/1/1 jheinzel <[email protected]> > > > > > > > Ambient transactions (System.Transactions) play an increasingly > > important role in .NET programming. Especially in WCF they are the > > preferred transaction model. Hibernate supports ambient transactions > > by implementing the IEnlistmentNotification interface. Unfortunately, > > ambient transactions can only be used in the same way as ADO.NET > > transactions: > > > using (ISession session = factory.OpenSession()) { > > using (TransactionScope scope = new TransactionScope()) { > > … > > scope.Complete(); > > } > > } > > > But ambient transactions are designed for distributed scenarios and > > are typically used in the following way: > > > using (TransactionScope scope = new TransactionScope()) { > > using (ISession session = factory1.OpenSession()) { > > … > > } // exception is thrown here > > using (ISession session = factory2.OpenSession()) { > > … > > } > > // access some other resource manager > > } > > > When using transacted WCF services, service operations are > > automatically enclosed in a (possibly distributed) transaction > > context. > > > But when using NH in this way, one gets an exception when a session is > > closed within an active ambient transaction > > (InvalidOperationException: "Disconnect cannot be called while a > > transaction is in progress."). While this behavior is useful for > > ADO.NET transactions (because these transactions are tied to the > > connection they are created with), this make less sense for ambient > > transactions (because they are totally independent from any > > connection). > > > Therefore, I propose that NH should allow closing a session even > > within an active ambient transaction. In this case NH should also > > flush the session (and thereby emitting the necessary SQL statements). > > > Since the implementation of ambient transactions in NH is cleanly > > separated from the rest of the NH code, only minor modifications in > > AbstractSessionImpl, SessionImpl, and ConnectionManager where > > necessary to implement this behavior in a prototypical manner. > > > I curious about the opinion of the NH community on this issue. > > > H. Heinzelreiter. > > -- > Fabio Maulo
