SOA may mean different things to different people (to me, SOA is just an architectural style), but one thing is certain – SOA is being touted as the next generation enterprise integration technology and architecture. And yes, SOA is not all about Web services; however, Web services (SOAP and WSDL specifically) are immediately brought into conversation when SOA is mentioned.
But do Web services today provide necessary enterprise-level capabilities?
Take transaction support. Ideally, we should be able to wrap any access to a remote resource in a transaction since remote resources are prone to failing. In J2EE , this is certainly supported for JMS , JDBC and RMI . Yes, two-phase commit comes at a price, but it‘s nice to have it available when it‘s needed. Now, SOA is all about remote calls (synchronous or asynchronous, does not matter). So where is the transaction support? Well, there is WS-AtomicTransaction specification that in theory should provide it. But where are the products that support it today? Also, this specification is not currently part of any WS-I profile, so interoperability is a big question.
WS-ReliableMessaging is in the similar situation, and so the rule of thumb today is that Web services should conform to WS-I basic profile, which does not include any of the advanced specifications.
In theory, one could use SOAP over JMS supported by many J2EE vendors today which immediately makes SOA implementation more robust. But this approach is hardly interoperable with non-Java technologies and what is it really buying for J2EE applications? JMS is already an abstraction of the messaging middleware, so why do we need another abstraction on the top of it?
I concede that describing JMS destinations using WSDL might be useful for some environments, but in many cases it is simply overkill (if you must use BPEL , use the BPELJ variant which directly supports JMS ).
Using JAX-RPC or WSIF to communicate with JMS does not sound like a good idea either. These APIs are not JMS -aware, so, for example, how do I get/set messageID or correlationID?
I do realize that developing true enterprise-level integration technologies takes time, and so perhaps in a couple years most Web services products will provide WS-Transaction and WS-ReliableMessaging support out of the box. But are Web services really ready to take on the enterprise today?