Java Transaction API和XA协议是Spring常用的分布式事务机制,不过你可以选择选择其他的实现方式。理想的实现取决于你的应用程序使用何种资源,你愿意在性能、安全、系统稳健性、数据完整方面做出何种权衡。在这次JavaWorld大会上,来自SpringSource的David Syer跟大家分享了Spring应用的几种事务处理机制、三种XA式、四种非XA式事务协议。
Spring框架支持Java Transaction API(JTA),这样应用就可以脱离Java EE容器,转而利用分布式事务以及XA协议。然而即使有这样的支持,XA开销是昂贵的,不稳定而且笨重不利于管理,不过一些其他的应用可以避免使用XA协议。
为了让大家对所涉及的几种分布式事务有所了解,我会分析七种事务处理模式,并 给出具体代码实现。并且从安全或者稳定性入手倒序展示,可以看看从安全、稳定性出发,如何在一般场景下,保障数据高完整性和原子性。当然随着话题的深入, 更多的说明以及限制就会出现。模式也可以从运行时开销倒序展示。考虑到所有模式都是结构化或者学术性的,这一点有别于业务模型,因此我不打算展开业务用例 分析,仅仅关注每种模式其少部分代码如何工作的。
尽管只有起初的三种模式涉及到 XA协议,不过从性能角度出发,这些模式或许无法满足需求。考虑到这些模式无处不在,我不想做过多地扩展,只是对第一种模式做一个简单的展示。读完此文,你可以了解可以用分布式事务做些什么、不能做什么以及如何、何时避免使用XA,何时必须使用。
回到顶部
分布式事务以及原子性
分布式事务涉及不止一个事务资源。比如,在关系数据库和消息中间件之间通信的连接器,通常这些资源拥有类似begin()、rollback()、commit()的API。在此,一个事务资源通常是一个工厂产品,这个工厂通常由底层平台提供:以数据库为例,DataSource提供Connection,或者Java Persistence API(JPA)的EntityManager接口;又如Java Message Service(JMS)提供的Session。