java分布式事务——spring+jta+atomikos

Atomikos分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTransactions。

       TransactionEssentials的主要特征:JTA/XA 事务管理 —— 提供事务管理和连接池不需要应用服务器支持分布式事务(例如tomcat) 。TransactionEssentials可以在任何Java EE应用服务器中运行,也就是不依赖于任何应用服务器开源。TransactionEssentials是遵守Apache版本2许可的开源软件专注于JDBC/JMS —— 支持所有XA资源。


        Atomikos数据源配置方法有三种分别有:SimpleDataSourceBean、AtomikosDataSourceBean、AtomikosNonXADataSourceBean可任选一种。但是,使用atomikos时不能使用不支持jta的连接池,如c3p0。同样,如果使用jotm,也必须使用StandardXAPoolDataSource数据源配置。

SimpleDataSourceBean表示基础数据库连接配置;

AtomikosDataSourceBean表示必须要用到XA数据库驱动类,可设置连接池(经过测试推荐此方法);

AtomikosNonXADataSourceBean表示必须要用到普通数据库驱动类,可设置连接池;


1、实验环境:

spring
mysql5.1.51(需要版本5.0+)
AtomikosTransactionsEssentials-3.7.0 (详细可参加它的官网:http://www.atomikos.com   )
说明:
1. 测试的数据库需要支持分布式事务,同时JDBC要支持XA连接驱动。本次测试用的mysql5.1是支持事务的,JDBC驱动版本:mysql-connector-java-5.1.7-bin.jar,包含对 XA连接的支持:com.mysql.jdbc.jdbc2.optional.MysqlXAConnection
2. 附件提供AtomikosTransactionsEssentials 3.7.0 lib包下载:AtomikosTransactionsEssentials-3.7.0-lib.zip官方下载地址:http://www.atomikos.com/Main/TransactionsEssentialsDownloadForm,需要先注册才能下载。


2、创建表:

CREATE DATABASE IF NOT EXISTS testdb_a        DEFAULT CHARACTER SET utf8;    

USE testdb_a;    

DROP TABLE IF EXISTS tab_a;    

CREATE TABLE tab_a (    
        id bigint(20) NOT NULL,    
        name varchar(60) DEFAULT NULL,    
        address varchar(120) DEFAULT NULL,    
        PRIMARY KEY (id)    
) ENGINE=InnoDB DEFAULT CHARSET=utf8;    


CREATE DATABASE IF NOT EXISTS testdb_b        DEFAULT CHARACTER SET utf8;    

USE testdb_b;    

DROP TABLE IF EXISTS tab_b;    

CREATE TABLE tab_b (    
        id bigint(20) NOT NULL,    
        name varchar(60) DEFAULT NULL,    
        address varchar(120) DEFAULT NULL,    
        PRIMARY KEY (id)    
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3、配置文件:

 
 
 

         
         
                 
                         
                                classpath:jdbc.properties 
                         
                 
         
         
         
                 
                        mysql/db_a 
                 
                 
                        com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 
                 
                 
                        URL=${jdbc.url};user=${jdbc.username};password=${jdbc.password} 
                 
                 
                        true 
                 
                 
                        3 
                 
                 
                        SELECT 1 
                 
         
         
         
                 
                        mysql/db_b 
                 
                 
                        com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 
                 
                 
                        URL=${jdbc2.url};user=${jdbc2.username};password=${jdbc2.password} 
                 
                 
                        true 
                 
                 
                        3 
                 
                 
                        SELECT 1 
                 
         

         
                 
         

         
                 
         
         
         
                 
                 
         


         
         
                 
                 
         
         
         
                 
                         
                         
                         
                         
                 
         

         
         
                 
                         
                 
                 
                        classpath:/sql-map-config_A.xml 
                 
         
         
         
                 
                         
                 
                 
                        classpath:/sql-map-config_B.xml 
                 
         
         
         
                 
         
         
         
                 
         

         
         
                 
         
         
                 
         

         
         
                 
                 
         



你可能感兴趣的:(java)