I was reading a bit of details about transactions, locking, distributed transaction etc till I stumbled upon a specification named WS-BusinessActivity / WS-BA. (Refer specification at this link)
On first read it seemed to have a big functional overlap with BPEL in terms of ability to support long running transactions(LRT) using activities and compensation.
But dig a little deeper, and it is interesting to note that BPEL and WS-BA have to alternate approaches for solving the problem.
While in BPEL the orchestrating service (application flow) is responsible for managing the ensuring the consistency of the LRT by performing compensation activities. The BPEL and thus the application needs to know the semantics of both the business activities and compensation/cancel activities of any remote services it is invoking.
On the other hand in WS-BA all participants share the responsibility of ensuring the LRT consistency by registering with a central transaction coordinator and performing a compensation when the coordinator directs them to do so. Thus none of the parties involved in the global transaction need to be aware of the semantics of transaction specific complete, compensation/cancel operations of other parties.
In fact, by leveraging WS-BA as an underlying protocol, BPEL flows with long running transactions can be designed with no significant compensation flows involving external services.