原文地址:http://dev2dev.bea.com.cn/blog/NickSimha001/200509/02_32.html
最近我在eaipatterns.com上看到了一篇非常棒的文章:“Starbucks doesn't use two phase commit(星巴克不使用两阶段提交)”。您可以通过这个网址查看完整的文章:http://eaipatterns.com/docs/IEEE_Software_Design_2PC.pdf。通过供应咖啡的常见例子,作者阐明了在一个非常典型的业务场景中使用紧密耦合的两阶段提交协议的局限性。其中的许多观点也同样适用于web services事务。Web Services环境典型的松散耦合也为它带来了挑战,使得经典的两阶段协议更加效率低下。因为一个web服务事务要跨越几个不同的执行环境,所以它必须与这些环境所支持的一切打交道——基于数据库的事务、J2EE、消息传递等等。使用HTTP(在两次调用之间不保留状态)作为传输协议意味着事务的整个上下文必须以其他方式管理。最后,由于在星巴克一文中所说明的原因,支持长期运行的业务流程的需求使得我们不能使用两阶段提交协议。WS-Transaction系列规范很好地满足了这些需求,这些规范包括WS-Coordination、WS-Atomic Transaction和WS Business Activity Framework。虽然规范看起来比较多,但只要记住几点就可以了:
1) 首先,只有需要跨多个环境进行互操作的时候才需要Web Services事务。所以在星巴克的例子中,不必使用Web Services事务,因为它是单一环境。
2) 这些规范旨在满足经典的两阶段协议和长期运行的事务两方面的需求。此外,它们是可扩充的,可以添加补充协议。
3) 最后,这些规范只对中间件供应商有用,大多数程序员将通过某种环境(如Workshop)来使用Web Services事务
原文出处:http://dev2dev.bea.com/blog/nsimha/archive/2005/08/starbucks_and_w.html