||An Introduction to Service-Oriented Architecture from a Java Developer Perspective|
|Subject:||How about transactions?|
Quick question about SOA, how are transactions handled ? if we are in an heterogenous environment where each service (although exposed via XML and SOAP) can potentially be implemented in a different technology, how are we suppose to manage transactions in this case in a distributed manner?
For example, if the task i need requires calling 5 different service in a chain and at each node in the chain a business state is persisted to that particular node's persistent store, how can I guarantee that when an error occurs at the last node in the chain, i can rollback the persistent state changes in the previous node or if the operation completes successfully, i can commit all persistent state changes in all nodes?
How about concurrency control? If another client/user starts the same chain of execution acting on the same dataset instance as I am, how do we ensure atomicity? What about intersecting chains ? i.e. another operation that starts out at a different chain but intersects one of the node in mine acting on the same dataset at that node.
How would say different locking strategies fit into this ? i.e. since we're in a heterogenious environment, the locking strategies at each node may be different..
I would really like some information on this... are these issues already tackled in the SOA domain? I would think these are really pertinent issues.... Is there a book somewhere that covers these in more detail?