基于Spring声明式事务的分布式事务管理

开发传统应用遇到的最大问题就是多数据源的事务一致性问题, 下面介绍一种常用的分布式事务处理方式的使用

开发环境:Eclipse+Java1.7 + Tomcat7, 另外使用到的开源框架 Spring3.X

提到分布式事务大家首先想到的肯定是jta,我们用到的就是基于jta的一种实现atomikos,下面就介绍一下他的使用

1、依赖的jar

Maven依赖代码

               
               
   com.atomikos
   transactions-jta
   ${atomikos.version}
   true
 

 
   com.atomikos
   transactions-jdbc
   ${atomikos.version}
   true
 

 
   javax.transaction
   jta
   ${jta.version}
   true
 


 
   com.alibaba
   druid
   1.0.9
 

2、 配置数据源

数据源连接池,必须是支持XA标准的连接池,什么是XA标准呢?

XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。目前,Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持。XA协议采用两阶段提交方式来管理分布式事务。XA接口提供资源管理器与事务管理器之间进行通信的标准接口。XA协议包括两套函数,以xa_开头的及以ax_开头的。
以下的函数使事务管理器可以对资源管理器进行的操作:
1)xa_open,xa_close:建立和关闭与资源管理器的连接。
2)xa_start,xa_end:开始和结束一个本地事务。
3)xa_prepare,xa_commit,xa_rollback:预提交、提交和回滚一个本地事务。
4)xa_recover:回滚一个已进行预提交的事务。
5)ax_开头的函数使资源管理器可以动态地在事务管理器中进行注册,并可以对XID(TRANSACTION IDS)进行操作。
6)ax_reg,ax_unreg;允许一个资源管理器在一个TMS(TRANSACTION MANAGER SERVER)中动态注册或撤消注册。

Java代码


   
       
                               
                                       
               
               
                                                   

 


       
                               
                                       
               
               
                                                   

 

3、强数据源指定到AtomikosDataSourceBean中,再有该类的对象向DAO层提供数据源服务

配置如下

datasource1

 
             
     
     
           
              test 
                          test 
                          test 
              test 
              test 
     
   
 
 

dataSource2

 
             
     
     
           
              test 
                          test 
                          test 
              test 
              test 
     
   
 
 

3、将数据源托管到TranscationManager

SUSErTransaction”
        class=”com.atomikos.icatch.jta.UserTransactionImp”>
        UserTransactionImp
       

        init-method=”init” destroy-method=”close”>
        UserTransactionManager
                    true
       


        JtaTransactionManager
                   
       
                   
       
       

4、定义切面


 
 
 
 
 
 
 



 
 
 
 
 

5、 jta.properties (路径跟log4j.properties一致就好)

这个文件不配置系统也能启动,因为有默认配置,个人建议配置一下。详细配置

com.atomikos.icatch.console_file_name = xam.out
com.atomikos.icatch.log_base_name = xamlog.log
com.atomikos.icatch.service = com.atomikos.icatch.standalone.UserTransactionServiceFactory

Spring中如何配置Hibernate事务 http://www.linuxidc.com/Linux/2013-12/93681.htm

Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm

基于 Spring 设计并实现 RESTful Web Services http://www.linuxidc.com/Linux/2013-10/91974.htm

Spring-3.2.4 + Quartz-2.2.0集成实例 http://www.linuxidc.com/Linux/2013-10/91524.htm

使用 Spring 进行单元测试 http://www.linuxidc.com/Linux/2013-09/89913.htm

运用Spring注解实现Netty服务器端UDP应用程序 http://www.linuxidc.com/Linux/2013-09/89780.htm

Spring 3.x 企业应用开发实战 PDF完整高清扫描版+源代码 http://www.linuxidc.com/Linux/2013-10/91357.htm

Spring 的详细介绍请点这里
Spring 的下载地址请点这里