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

Reply via email to