Hi,

<disclaimer> 
Below are just my thoughts about COM+ declarative transactions that
could happen to be just my speculations without any relation to any
official position of my employer or associates, bla, bla, bla... ;-). 
Ie: don't read it if you don't need it ;-).
</disclaimer> 

COM+ transactions appear to be a very controversial topic that created
lots of confusion and misinterpretations among developers. Partially it
could be explained by the considerable COM+ marketing/advertisement
efforts (remember the slogan "COM+ brings transactions to the COM
world")... But hey, don't we all know that advertisement people are used
to exaggerate? And that's, I believe, exactly the case with COM+
transactions.
COM+ declarative transactions are about distributed transactions. And
when you say distributed transactions - the major use of them is for
integration purposes only (for example when one tries to integrate
in-house made legacy system with SAP's or Great Plain's or any other
3rd-party solution). 
Does anybody know any new solution that wasn't about integration with
some legacy/3rd party system, but required access to multiple databases
from different database vendors? I bet - no. 
Note: "multiple database vendors" is an important part here, because as
far as I know - any database that supports distributed transactions has
its own internal (read - more efficient) mechanism of providing
distributed transaction across multiple databases of the same db vendor,
than going COM+/OLE transactions/XA distributed transactions path
between two or more different DB vendors. Ex. see: SQLServer -
"sp_addlinkedserver" + "Transact-SQL Distributed Transactions"; or
Oracle - "create database link..." + local transactions transparently
propagated to the distributed transactions by the Oracle DB engine... 
For the moment, let us be idealistic (from systems integrator's
perspective) and say that most/all 3rd party/legacy system are developed
as a set of COM+ components with suitable support for COM+ declarative
transactions (read - most of them just use transaction support
"required"), and most/all database vendors support distributed
transaction COM+ compatible way. Integration with such systems would be
just a joy and I'd rather become system integrator my-self ;-)... 
However everybody knows that simply stays too far from the reality. Most
of legacy/3rd party systems weren't (and aren't going to be) developed
such way due to the number of reasons. The major reason now is probably
that COM+ is relatively new technology. The major reason later could be
related to the fact that distributed transactions COM+/DTC/XA way are
way too expensive + they are incapable to be extended to the long
running transaction over Internet (or other similarly unreliable media
transport). 
Also note that not all databases (data sources) support distributed
transactions COM+ compatible way (or just support them at all). That
even concerns some of the Microsoft's own databases (like, I'd love to
see distributed transactions support on Exchange Server...). 
So, even if I develop a completely new system relying exclusively on
COM+ declarative transactions support (with future integration benefits
as one of the major focus) I still would not be able to integrate my
transactions with f.e Exchange Server, or some (fictional) John Smith's
custom OLE DB provider because they simply don't support
ITransactionJoin and family!?... Hello? And all that after I accepted
significant extra expenses that system's performance is paying due to
use of COM+/DTC distributed transactions, all just in favor of future
integration benefits!?... 
In fact, COM+ declarative transactions are expensive in such way, that
anyone who is doing real COM+ development surely heard of an advice to
use declarative transactions only when it's absolutely necessary,
otherwise just use local transactions (or db-vendor specific distributed
transaction) and mark your component with transactions support
"disabled"... 
Of course, COM+ provides elegant transactions model with transaction's
stream bound to the transaction's root object + BYOT + Compensating
Resource Mangers + Resource Dispensers (if former was not enough)... But
face it: there are too many limitations to blindly start using them
without looking into other considerable alternatives. 
And if we bring WebServices + Internet (HTTP, SMTP or any other Internet
related transport protocol) and/or applications integration story up to
the picture then integration the way of BizTalk server could become more
attractive and reliable investment than going COM+ declarative
transactions way. Ie. paradigm's shift back to the message based
solution where you define XML messages + rules of their processing
(workflow). Infrastructure provides you with the rest, like reliable
execution, long-running compensating transactions (but no isolation,
sorry) + much more...
And when it concerns to the COM+ services in general - COM+ offers
significant help for solving some common tasks of developing distributed
systems beside of using declarative distributed transactions... And when
it concerns to the last (COM+ distributed transactions) then COM+
benefits is rather exaggerated...

-Valery.

You can read messages from the Advanced DOTNET archive, unsubscribe from Advanced 
DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to