一.以下介绍Spring中直接集成JOTM提供JTA事务管理、将JOTM集成到Tomcat中。 
(经过测试JOTM在批量持久化时有BUG需要修改源码GenericPool类解决)! 
参考文章http://mavin.zhou.blog.163.com/blog/static/114522435200971822334475/ 
通过集成JOTM,直接在Spring中使用JTA事务 
JOTM(Java Open Transaction Manager)是ObjectWeb的一个开源JTA实现,它本身也是开源应用程序服务器JOnAS(Java Open Application Server)的一部分,为其提供JTA分布式事务的功能。 
Spring 2.0附带的依赖类库中虽然包含jotm类库,但是并不完整,你可以到http://jotm.objectweb.org下载完全版的JOTM。 
Spring为JOTM提供了一个org.springframework.transaction.jta.JotmFactoryBean支持类,通过该支持类可以方便地创建JOTM本地实例。 
1.将jotm的jar包lib目录下所有jar复制到项目中 
2.将jotm的jar包conf目录下carol.properties文件复制到项目类路径下,修改内容为:

  1. # do not use CAROL JNDI wrapper
  2. carol.start.jndi=false
  3. # do not start a name server
  4. carol.start.ns=false
  5. # Naming Factory
  6. carol.jndi.java.naming.factory.url.pkgs=org.apache.naming

3.建立两个数据库,配置两个数据源

  1. <!-- XAPool配置,内部包含了一个XA数据源,对应相应的数据库 -->
  2. <bean id="mysqlJta" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
  3. <!-- 内部XA数据源-->
  4. <property name="dataSource">
  5. <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
  6. <property name="transactionManager" ref="jotm"/>
  7. <property name="driverName" value="com.mysql.jdbc.Driver"/>
  8. <property name="url" value="jdbc:MySQL://localhost:3309/test"/>
  9. <property name="user" value="root"/>
  10. <property name="password" value=""/>
  11. </bean>
  12. </property>
  13. <property name="user" value="root"/>
  14. <property name="password" value=""/>
  15. </bean>
  16. <bean id="oracleJta" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
  17. <property name="dataSource">
  18. <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
  19. <property name="transactionManager" ref="jotm"/>
  20. <property name="driverName" value="oracle.jdbc.driver.OracleDriver"/>
  21. <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
  22. <property name="user" value="orcl"/>
  23. <property name="password" value=""/>
  24. </bean>
  25. </property>
  26. <property name="user" value="orcl"/>
  27. <property name="password" value=""/>
  28. </bean>

4.事务配置

  1. <!-- JOTM本地实例 -->
  2. <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
  3. <!-- JTA事务管理器 -->
  4. <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
  5. <property name="userTransaction" ref="jotm"/>
  6. </bean>
  7. <!-- JTA事务传播特性 -->
  8. <tx:advice id="txAdviceJta" transaction-manager="txManager">
  9. <tx:attributes>
  10. <tx:method name="Jta*"     isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/>
  11. <tx:method name="*" read-only="true"/>
  12. </tx:attributes>
  13. </tx:advice>
  14. <aop:config>
  15. <aop:advisor pointcut="execution(* com.xxxxl.service.impl..*(..))"   advice-ref="txAdviceJta" />
  16. </aop:config>
  17. <bean id="timerDaoMysql" class="com.xxxxl.TimerDaoImpl" scope="prototype">
  18. <property name="dataSource" ref="mysqlJta"></property>
  19. </bean>
  20. <bean id="timerDaoOracle" class="com.xxxxl.TimerDaoImpl" scope="prototype">
  21. <property name="dataSource" ref="oracleJta"></property>
  22. </bean>

二.以下介绍Spring中直接集成Atomikos提供JTA事务管理、将Atomikos集成到Tomcat中。(经过测试推荐此方法) 
Atomikos Transactions Essentials现在的版本是3.1.7,可以在http://www.atomikos.com/Main/TransactionsEssentialsDownloadForm 下载,在发布包里的examples文件夹下面有些例子,非常实用,我在使用中参考里面的例子很容易配置成功。1.将Atomikos的jar包dist目录下所有jar复制到项目中 
2.建立两个数据库,配置两个数据源。 
Atomikos数据源配置方法有三种分别有:SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean可任选一种

  1. <!-- Simple表示基础数据库连接配置 -->
  2. <bean id="oracleJta" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">
  3. <property name="uniqueResourceName">
  4. <value>OracleXADataSource</value>   <!--任意命名,但必须唯一-->
  5. </property>
  6. <property name="xaDataSourceClassName">
  7. <value>oracle.jdbc.xa.client.OracleXADataSource</value>
  8. </property>
  9. <property name="xaDataSourceProperties">
  10. <value>URL=jdbc:oracle:thin:@localhost:1521:orcl;user=orcl;password=</value>
  11. </property>
  12. <property name="exclusiveConnectionMode">
  13. <value>true</value>
  14. </property>
  15. <property name="connectionPoolSize">
  16. <value>3</value>
  17. </property>
  18. <property name="validatingQuery">
  19. <value>SELECT 1</value>
  20. </property>
  21. </bean>
  22. <!-- Atomikos表示必须要用到XA数据库驱动类,可设置连接池(经过测试推荐此方法) -->
  23. <bean id="oracleJta" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" lazy-init="true">
  24. <property name="uniqueResourceName">
  25. <value>OracleXADataSource</value>
  26. </property>
  27. <property name="xaDataSourceClassName">
  28. <value>oracle.jdbc.xa.client.OracleXADataSource</value>
  29. </property>
  30. <property name="xaProperties">
  31. <props>
  32. <prop key="URL">jdbc:oracle:thin:@localhost:1521:orcl</prop>
  33. <prop key="user">orcl</prop>
  34. <prop key="password"></prop>
  35. </props>
  36. </property>
  37. <property name="poolSize"><value>1</value></property>
  38. <property name="maxPoolSize"><value>30</value></property>
  39. <property name="testQuery" value="SELECT 1 from dual"/>  <!--解决偶尔失去连接的bug-->
  40. </bean>
  41. <!-- AtomikosNon表示必须要用到普通数据库驱动类,可设置连接池 -->
  42. <bean id="oracleJta" class="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean">
  43. <property name="uniqueResourceName"><value>OracleXADataSource</value></property>
  44. <property name="user"><value>orcl</value></property>
  45. <property name="password"><value></value></property>
  46. <property name="url"><value>jdbc:oracle:thin:@192.168.1.217:1521:orcl</value></property>
  47. <property name="driverClassName"><value>oracle.jdbc.OracleDriver</value></property>
  48. <property name="poolSize"><value>1</value></property>
  49. <property name="borrowConnectionTimeout"><value>60</value></property>
  50. </bean>
  51. 另外一个数据库在这就不在写了,设置同上只是mysql的驱动类名为:xaDataSourceClassName:com.mysql.jdbc.jdbc2.optional.MysqlXADataSource

3.事务配置

    1. <!-- Atomikos事务方法 -->
    2. <bean id="atomikosTransactionManager"
    3. class="com.atomikos.icatch.jta.UserTransactionManager"
    4. init-method="init" destroy-method="close">
    5. <property name="forceShutdown">
    6. <value>true</value>
    7. </property>
    8. </bean>
    9. <bean id="atomikosUserTransaction"
    10. class="com.atomikos.icatch.jta.UserTransactionImp">
    11. <property name="transactionTimeout" value="240" />
    12. </bean>
    13. <bean id="transactionManager"
    14. class="org.springframework.transaction.jta.JtaTransactionManager">
    15. <property name="transactionManager">
    16. <ref bean="atomikosTransactionManager" />
    17. </property>
    18. <property name="userTransaction">
    19. <ref bean="atomikosUserTransaction" />
    20. </property>
    21. </bean>
    22. 接下来的代码和上例类同就不再写。

JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)的更多相关文章

  1. DTP模型之二:(XA协议之二)JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)

    jotm只能用的xapool数据源,而且很少更新. 一.以下介绍Spring中直接集成JOTM提供JTA事务管理.将JOTM集成到Tomcat中. (经过测试JOTM在批量持久化时有BUG需要修改源码 ...

  2. Spring+JTA+Atomikos+mybatis分布式事务管理

    我们平时的工作中用到的Spring事务管理是管理一个数据源的.但是如果对多个数据源进行事务管理该怎么办呢?我们可以用JTA和Atomikos结合Spring来实现一个分布式事务管理的功能.了解JTA可 ...

  3. 分布式事务、多数据源、分库分表中间件之spring boot基于Atomikos+XADataSource分布式事务配置(100%纯动态)

    本文描述spring boot基于Atomikos+DruidXADataSource分布式事务配置(100%纯动态),也就是增加.减少数据源只需要修改application.properties文件 ...

  4. 事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理

    1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...

  5. Spring事务隔离级别与传播机制详解,spring+mybatis+atomikos实现分布式事务管理

    原创说明:本文为本人原创作品,绝非他处转载,转账请注明出处 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). ...

  6. spring整合atomikos实现分布式事务

    前言 Atomikos 是一个为Java平台提供增值服务的并且开源类事务管理器,主要用于处理跨数据库事务,比如某个指令在A库和B库都有写操作,业务上要求A库和B库的写操作要具有原子性,这时候就可以用到 ...

  7. spring boot + druid + mybatis + atomikos 多数据源配置 并支持分布式事务

    文章目录 一.综述 1.1 项目说明 1.2 项目结构 二.配置多数据源并支持分布式事务 2.1 导入基本依赖 2.2 在yml中配置多数据源信息 2.3 进行多数据源的配置 三.整合结果测试 3.1 ...

  8. DTP模型之二:(XA协议之二)jotm分布式事务实现

    分布式事务是指操作多个数据库之间的事务,spring的org.springframework.transaction.jta.JtaTransactionManager,提供了分布式事务支持.如果使用 ...

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

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

随机推荐

  1. SpringMVC数据库链接池,以及其他相关配置

    1.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...

  2. 【bzoj3150】 cqoi2013—新Nim游戏

    www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...

  3. Bsoj 1322 第K小数

    第K小数 Description 现在已有N个整数,你有以下三种操作: 1 A:表示加入一个值为A的整数: 2 B:表示删除其中值为B的整数: 3 K:表示输出这些整数中第K小的数: Input 第一 ...

  4. Linux—fork函数学习笔记

    fork()函数 在赋值语句pid = fork();之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了,这两个进程的代码部分完全相同.> 两个进程中,原先就存在的那个被 ...

  5. Put-Me-Down项目Postmortem

    设想和目标 PMD是一款帮助低头族控制使用手机时间的APP,设想按照需求规格说明书内容实现功能,能将数据备份到服务器. 计划 初始计划我们是想将程序方面分为安卓和后台,主要是程序方面的工作.我们对项目 ...

  6. javascript设计模式-装饰模式

    装饰模式:在不改变原类(对象)和继承的情况下动态扩展对象功能,通过包装一个对象来实现一个新的具有原对象相同接口的新的对象.在设计原则中,有一条,多用组合,少用继承,装饰模式正是这一原则的体现. UML ...

  7. SCI完全攻略:从构思到发表

  8. truncate的用法

    truncate是文件处理中的截断函数,今天是有个需求改动了json中的某个值,然后用改动后的值去覆盖之前的数据,这个方法有很多,比如边读边写,然后使用os模块替换,这个适合用于在程序和文件都在同一个 ...

  9. Nginx使用的php-fpm的两种进程管理方式及优化(转)

    php-fpm目前主要又两个分支,分别对应于php-5.2.x的版本和php-5.3.x的版本.在5.2.x的版本中,php-fpm.conf使用的是xml格式,而在新的5.3.x版本中,则是和php ...

  10. C# Socket大文件上传

    public sealed class SocketData { private SocketData() { } public static SendFileMode SendFile(Socket ...