摘自: http://gongjiayun.iteye.com/blog/1570111

spring3.0+Atomikos 构建jta的分布式事务

spring3.0已经不再支持jtom了,不过我们可以用第三方开源软件atomikos(http://www.atomikos.com/)来实现.
Atomikos是目前在分布式事务管理中做得相当不错的开源软件。有10年以上的经验,Atomikos保障您的关键事务和
防止昂贵的数据丢失在发生系统故障或事故中.Atomikos支持XA(全局事务)和NON-XA(非全局事务),NON-XA效率高
于XA.本文主要是讲XA事件,因为要在不同的数据库中操作多张表.

接下来说一下怎么和spring3.0结合使用

首先要下载spring3.0的相关jar包.这个相信对大家说来不难

第二.下载Atomikos,需要以下这些包

  1. atomikos-util-1.0.jar
  2. cglib-nodep-2.2.2.jar
  3. transactions-3.7.0.jar
  4. transactions-api-3.7.0.jar
  5. transactions-jdbc-3.7.0.jar
  6. transactions-jta-3.7.0.jar

第三.配置
在applicationContext.xml文件当中作如下配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"
  4. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"
  6. default-lazy-init="true">
  7.  
  8. <!-- spring atomikos 配置 开始-->
  9. <!-- mysql数据源 -->
  10. <bean id="mysqlDS" class="com.atomikos.jdbc.AtomikosDataSourceBean"
  11. init-method="init" destroy-method="close">
  12. <description>mysql xa datasource</description>
  13. <property name="uniqueResourceName">
  14. <value>mysql_ds</value>
  15. </property>
  16. <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
  17. <property name="xaProperties">
  18. <props>
  19. <prop key="user">userName</prop>
  20. <prop key="password">password</prop>
  21. <prop key="URL">jdbc\:mysql\://127.0.0.1\:3306/dataBaseName?autoReconnect\=true</prop>
  22. </props>
  23. </property>
  24. <!-- 连接池里面连接的个数? -->
  25. <property name="poolSize" value="3"/>
  26. </bean>
  27.  
  28. <!-- oracle数据源 -->
  29. <bean id="oracleDS" class="com.atomikos.jdbc.AtomikosDataSourceBean"
  30. init-method="init" destroy-method="close">
  31. <description>oracle xa datasource</description>
  32. <property name="uniqueResourceName">
  33. <value>oracle_ds</value>
  34. </property>
  35. <property name="xaDataSourceClassName">
  36. <value>oracle.jdbc.xa.client.OracleXADataSource</value>
  37. </property>
  38. <property name="xaProperties">
  39. <props>
  40. <prop key="user">userName</prop>
  41. <prop key="password">password</prop>
  42. <prop key="URL">jdbc\:oracle\:thin\:@127.0.0.1\:1521\:dataBaseName</prop>
  43. </props>
  44. </property>
  45. <!-- 连接池里面连接的个数? -->
  46. <property name="poolSize" value="3"/>
  47. </bean>
  48.  
  49. <!-- atomikos事务管理器 -->
  50. <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
  51. init-method="init" destroy-method="close">
  52. <description>UserTransactionManager</description>
  53. <property name="forceShutdown">
  54. <value>true</value>
  55. </property>
  56. </bean>
  57.  
  58. <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
  59. <property name="transactionTimeout" value="300" />
  60. </bean>
  61.  
  62. <!-- spring 事务管理器 -->
  63. <bean id="springTransactionManager"
  64. class="org.springframework.transaction.jta.JtaTransactionManager">
  65. <property name="transactionManager">
  66. <ref bean="atomikosTransactionManager" />
  67. </property>
  68. <property name="userTransaction">
  69. <ref bean="atomikosUserTransaction" />
  70. </property>
  71. </bean>
  72.  
  73. <!-- spring 事务模板 我在项目当中用的是编程式事务-->
  74. <bean id="transactionTemplate"
  75. class="org.springframework.transaction.support.TransactionTemplate">
  76. <property name="transactionManager">
  77. <ref bean="springTransactionManager" />
  78. </property>
  79. </bean>
  80.  
  81. <bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
  82. <constructor-arg>
  83. <ref bean="mysqlDS" />
  84. </constructor-arg>
  85. </bean>
  86.  
  87. <bean id="simplejdbcTemplateOra" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
  88. <constructor-arg>
  89. <ref bean="oracleDS" />
  90. </constructor-arg>
  91. </bean>
  92.  
  93. <!-- spring atomikos 配置 结束-->
  94.  
  95. <!-- 接下来就是具体的Dao的配置 -->
  96. <bean id="oracleJtaDao" class="com.dao.TerminalOracleJtaDao">
  97. <property name="simplejdbcTemplateOra">
  98. <ref bean="simplejdbcTemplateOra" />
  99. </property>
  100. <property name="transactionTemplate">
  101. <ref bean="transactionTemplate" />
  102. </property>
  103. </bean>
  104.  
  105. <bean id="myaqlJtaDao" class="com.dao.TerminalMyaqlJtaDao">
  106. <property name="simpleJdbcTemplate">
  107. <ref bean="simpleJdbcTemplate" />
  108. </property>
  109. <property name="transactionTemplate">
  110. <ref bean="transactionTemplate" />
  111. </property>
  112. </bean>
  113. </beans>

第四.在src文件夹下面加入一个jta.properties文件.
文件内容如下,这个文件是必须的.主是是设置atomikos启动的一些参数,比如日志的输出级别,日志文件的名称等.

  1. # SAMPLE PROPERTIES FILE FOR THE TRANSACTION SERVICE
  2. # THIS FILE ILLUSTRATES THE DIFFERENT SETTINGS FOR THE TRANSACTION MANAGER
  3. # UNCOMMENT THE ASSIGNMENTS TO OVERRIDE DEFAULT VALUES;
  4.  
  5. # Required: factory implementation class of the transaction core.
  6. # NOTE: there is no default for this, so it MUST be specified!
  7. #
  8. com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
  9.  
  10. # Set base name of file where messages are output
  11. # (also known as the 'console file').
  12. #
  13. com.atomikos.icatch.console_file_name = tm.out
  14.  
  15. # Size limit (in bytes) for the console file;
  16. # negative means unlimited.
  17. #
  18. # com.atomikos.icatch.console_file_limit=-1
  19.  
  20. # For size-limited console files, this option
  21. # specifies a number of rotating files to
  22. # maintain.
  23. #
  24. # com.atomikos.icatch.console_file_count=1
  25.  
  26. # Set the number of log writes between checkpoints
  27. #
  28. # com.atomikos.icatch.checkpoint_interval=500
  29.  
  30. # Set output directory where console file and other files are to be put
  31. # make sure this directory exists!
  32. #
  33. # com.atomikos.icatch.output_dir = ./
  34.  
  35. # Set directory of log files; make sure this directory exists!
  36. #
  37. # com.atomikos.icatch.log_base_dir = ./
  38.  
  39. # Set base name of log file
  40. # this name will be used as the first part of
  41. # the system-generated log file name
  42. #
  43. com.atomikos.icatch.log_base_name = tmlog
  44.  
  45. # Set the max number of active local transactions
  46. # or -1 for unlimited.
  47. #
  48. # com.atomikos.icatch.max_actives = 50
  49.  
  50. # Set the default timeout (in milliseconds) for local transactions
  51. #
  52. # com.atomikos.icatch.default_jta_timeout = 10000
  53.  
  54. # Set the max timeout (in milliseconds) for local transactions
  55. #
  56. # com.atomikos.icatch.max_timeout = 300000
  57.  
  58. # The globally unique name of this transaction manager process
  59. # override this value with a globally unique name
  60. #
  61. com.atomikos.icatch.tm_unique_name = tm
  62.  
  63. # Do we want to use parallel subtransactions? JTA's default
  64. # is NO for J2EE compatibility
  65. #
  66. # com.atomikos.icatch.serial_jta_transactions=true
  67.  
  68. # If you want to do explicit resource registration then
  69. # you need to set this value to false.
  70. #
  71. # com.atomikos.icatch.automatic_resource_registration=true
  72.  
  73. # Set this to WARN, INFO or DEBUG to control the granularity
  74. # of output to the console file.
  75. #
  76. com.atomikos.icatch.console_log_level=INFO
  77.  
  78. # Do you want transaction logging to be enabled or not?
  79. # If set to false, then no logging overhead will be done
  80. # at the risk of losing data after restart or crash.
  81. #
  82. # com.atomikos.icatch.enable_logging=true
  83.  
  84. # Should two-phase commit be done in (multi-)threaded mode or not?
  85. # Set this to false if you want commits to be ordered according
  86. # to the order in which resources are added to the transaction.
  87. #
  88. # NOTE: threads are reused on JDK 1.5 or higher.
  89. # For JDK 1.4, thread reuse is enabled as soon as the
  90. # concurrent backport is in the classpath - see
  91. # http://mirrors.ibiblio.org/pub/mirrors/maven2/backport-util-concurrent/backport-util-concurrent/
  92. #
  93. # com.atomikos.icatch.threaded_2pc=false
  94.  
  95. # Should shutdown of the VM trigger shutdown of the transaction core too?
  96. #
  97. # com.atomikos.icatch.force_shutdown_on_vm_exit=false

第五.具体应用
在需要分布事务处理的地方手动开启事务

  1. TransactionTemplate.getTransactionTemplate().execute(new TransactionCallback(){
  2. public Object doInTransaction(TransactionStatus status){
  3. boolean flag = true;
  4. try {
  5.  
  6. } catche (Exception e){
  7. flag = false;
  8. } finally {
  9. if (!flag) {
  10. status.status.setRollbackOnly();
  11. }
  12. }
  13. }
  14. })

至于怎么与hibernate,mybatis这些整合使用,应该也不难,把数据源换成atomikos数据源应该就差不多了.
如果想了解更多有关atomikos的用法,可以查看这个链接http://www.atomikos.com/Documentation/IntegratingTransactionEssentials

spring3.0+Atomikos 构建jta的分布式事务 -- NO的更多相关文章

  1. spring3.0+Atomikos 构建jta的分布式事务

    摘自: http://gongjiayun.iteye.com/blog/1570111 spring3.0+Atomikos 构建jta的分布式事务 spring3.0已经不再支持jtom了,不过我 ...

  2. Spring3.0+Hibernate+Atomikos集成构建JTA的分布式事务--解决多数据源跨库事务

    一.概念 分布式事务分布式事务是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上.简言之,同时操作多个数据库保持事务的统一,达到跨库事务的效果. JTA ...

  3. Spring 3.0 + Atomikos构建jta分布式事务

    Spring3.0已经不再支持jtom了,不过我们可以用第三方开源软件atomikos(http://www.atomikos.com/)来实现.Atomikos是目前在分布式事务管理中做得相当不错的 ...

  4. 【分布式事务】使用atomikos+jta解决分布式事务问题

    一.前言 分布式事务,这个问题困惑了小编很久,在3个月之前,就间断性的研究分布式事务.从MQ方面,数据库事务方面,jta方面.近期终于成功了,使用JTA解决了分布式事务问题.先写一下心得,后面的二级提 ...

  5. SpringMVC+MyBatis+JMS+JTA(分布式事务)

    SpringMVC+MyBatis 相信已经是如今企业开发中经常使用技术了. 由于一些需求,我们须要集成JMS(我使用的是ActiveMQ).大家应该都知道.MQ也能够觉得是一个数据源.数据也是数据源 ...

  6. springboot学习笔记:10.springboot+atomikos+mysql+mybatis+druid+分布式事务

    前言 上一篇文章我们整合了springboot+druid+mybatis+mysql+多数据源: 本篇文章大家主要跟随你们涛兄在上一届基础上配置一下多数据源情况下的分布式事务: 首先,到底啥是分布式 ...

  7. Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)

    在本系列先前的文章中,我们主要讲解了JDBC对本地事务的处理,本篇文章将讲到一个分布式事务的例子. 请通过以下方式下载github源代码: git clone https://github.com/d ...

  8. spring+springMVC+Mybatis架构下采用AbstractRoutingDataSource、atomikos、JTA实现多数据源灵活切换以及分布式事务管理

    背景: 1.系统采用SSM架构.需要在10多个MYSQL数据库之间进行切换并对数据进行操作,上篇博文<springMVC+Mybatis(使用AbstractRoutingDataSource实 ...

  9. 分布式事务(二)Java事务API(JTA)规范

    一.引子 既然出现了分布式场景(DTP模型), 大java也及时制定出一套规范来给各大应用服务器.数据库/mq等厂商使用,以方便管理互通--->JTA闪亮登场.JTA(Java Transact ...

随机推荐

  1. git 命令的学习

    我们在安装好gitlab 之后就是怎么使用它了,这里我选择http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b806 ...

  2. CXF 自定义拦截器

    此例子来自apache cxf sample. /**  * Licensed to the Apache Software Foundation (ASF) under one  * or more ...

  3. Java 并发-任务执行.

    首先来看一下,任务的定义: 所谓的任务,就是抽象,离散的工作单位.你可以简单理解为代码级别的 (Runnable接口) 大多数并发应用程序都是围绕着任务进行管理的. 看一小段代码: package c ...

  4. 你也可以当面霸-Servlet与JSP的原理及特点

    既然是面试系列,就是面试官和应聘者之间的对话.本文是采用一问一答的形式呈现给读者的,这样能有一个明确的考察点,不像理论知识那么枯燥. 01.什么是Servlet技术 Servlet是和平台无关的服务器 ...

  5. 判断Set里的元素是否重复、==、equals、hashCode方法研究-代码演示

    被测试类,没有重写hasCode()和equals()方法: package niukewang; import java.util.Objects; public class setClass { ...

  6. 22.Android之ExpandableListView树形列表学习

    Android经常用到树形菜单,一般ExpandableListView可以满足这个需要,今天学习下. XML代码: <?xml version="1.0" encoding ...

  7. UVa 11988 Broken Keyboard (a.k.a. Beiju Text)

    题目复制太麻烦了,甩个链接 http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18693 直接模拟光标操作时间复杂度较高,所以用链 ...

  8. HackerRank Ice Cream Parlor

    传送门 Ice Cream Parlor Authored by dheeraj on Mar 21 2013 Problem Statement Sunny and Johnny together ...

  9. Android事件机制之一:事件传递和消费

    http://www.cnblogs.com/lwbqqyumidi/p/3500997.html 关于Android中的事件机制,用到的地方还是很多的,并且这个知识点还真有点复杂. 在写这篇文章前, ...

  10. hibernate的pojo和xml文件