EnterpriseServices and transaction promotion
.


Greg
 didn’t really like my previous example
and says that one could easily pass the SqlTransaction to a method,
thereby eliminating the need for implicit distributed
transactions[…]

ThisEnterpriseServicesdiscussionhas been timely for
me. One of the projects that I’ve been working on over the last
couple of months involves building declarative SQL Server
transactions to give you the advantage of attributed programming
that you get with ES while avoiding the DTC.

I spent some time over the last week writing up a description of
my implicit transaction code so I will try my best to make time to
publish the first part of this tomorrow.

Definitely true – at the first look. But
what happens, if you later decide that you need
distributed TX, probably because another method wants to
integrate the addition of a new customer with a post to a
message queue? This wouldn’t be possible using the code you’ve
shown. (And I’m not even talking about what happens if some method
somewhere deep down the call chains screws up the transaction logic
by preliminary committing a TX).

For a whole class of web applications that I’ve been involved in
over the last few years using primarily VB6/ASP, we only used COM+
for the simplification of the transaction processing model.
Although in 99% of the cases we only ever used SQL Server, along
the way, perhaps with diminishing frequency, I’ve oft cited
the fact that one day we’ll need the DTC and we’ll be glad we used
COM+ transactions then but I don’t think it’s ever happened to me
yet.

On the other hand, your point regarding the overhead of
distributed TX is well understood. Wouldn’t it be great if
EnterpriseServices would allow for transactions to start as local
ones and later be turned into distributed TX “on demand” – as
soon as you access a secondary resource manager? In fact, this
feature is planned for the future and the only reason I didn’t talk
about it before was that I thought it was NDA
information. I was wrong – it is already in public and can be
found
at 
http://www.gotdotnet.com/team/xmlentsvcs/esfaq.aspx#5.2
 (next to some other great information about this
topic).

In the future, Enterprise Services will support the concept
of promotable transactions which will begin as a local transaction
and will be promoted to a distributed transaction when
required.

Pretty cool, huh? Hearing about this feature was definitely
part in triggering my love for this technology.

[Ingo
Rammer’s DotNetCentric
]

This is something that I didn’t know. Yes, it is
pretty cool, and I can certainly understand how it might cast ES in
a different light. I need to think carefully about how this affects
my thought processes thus far :o).