JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)

转载 2012年03月30日 13:15:26

【转自:http://www.cnblogs.com/huangjingzhou/articles/2012014.html

JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)

一.以下介绍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文件复制到项目类路径下,修改内容为:

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

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

<!-- XAPool配置,内部包含了一个XA数据源,对应相应的数据库 --> <bean id="mysqlJta" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <!-- 内部XA数据源--> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:MySQL://localhost:3309/test"/> <property name="user" value="root"/> <property name="password" value=""/> </bean> </property> <property name="user" value="root"/> <property name="password" value=""/> </bean> <bean id="oracleJta" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/> <property name="user" value="orcl"/> <property name="password" value=""/> </bean> </property> <property name="user" value="orcl"/> <property name="password" value=""/> </bean>

4.事务配置

<!-- JOTM本地实例 --> <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" /> <!-- JTA事务管理器 --> <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction" ref="jotm"/> </bean> <!-- JTA事务传播特性 --> <tx:advice id="txAdviceJta" transaction-manager="txManager"> <tx:attributes> <tx:method name="Jta*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <aop:config> <aop:advisor pointcut="execution(* com.xxxxl.service.impl..*(..))" advice-ref="txAdviceJta" /> </aop:config> <bean id="timerDaoMysql" class="com.xxxxl.TimerDaoImpl" scope="prototype"> <property name="dataSource" ref="mysqlJta"></property> </bean> <bean id="timerDaoOracle" class="com.xxxxl.TimerDaoImpl" scope="prototype"> <property name="dataSource" ref="oracleJta"></property> </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可任选一种

Simple表示基础数据库连接配置 <bean id="oracleJta" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close"> <property name="uniqueResourceName"> <value>OracleXADataSource</value> <!--任意命名,但必须唯一--> </property> <property name="xaDataSourceClassName"> <value>oracle.jdbc.xa.client.OracleXADataSource</value> </property> <property name="xaDataSourceProperties"> <value>URL=jdbc:oracle:thin:@localhost:1521:orcl;user=orcl;password=</value> </property> <property name="exclusiveConnectionMode"> <value>true</value> </property> <property name="connectionPoolSize"> <value>3</value> </property> <property name="validatingQuery"> <value>SELECT 1</value> </property> </bean> Atomikos表示必须要用到XA数据库驱动类,可设置连接池(经过测试推荐此方法) <bean id="oracleJta" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" lazy-init="true"> <property name="uniqueResourceName"> <value>OracleXADataSource</value> </property> <property name="xaDataSourceClassName"> <value>oracle.jdbc.xa.client.OracleXADataSource</value> </property> <property name="xaProperties"> <props> <prop key="URL">jdbc:oracle:thin:@localhost:1521:orcl</prop> <prop key="user">orcl</prop> <prop key="password"></prop> </props> </property> <property name="poolSize"><value>1</value></property> <property name="maxPoolSize"><value>30</value></property> </bean> AtomikosNon表示必须要用到普通数据库驱动类,可设置连接池 <bean id="oracleJta" class="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean"> <property name="uniqueResourceName"><value>OracleXADataSource</value></property> <property name="user"><value>orcl</value></property> <property name="password"><value></value></property> <property name="url"><value>jdbc:oracle:thin:@192.168.1.217:1521:orcl</value></property> <property name="driverClassName"><value>oracle.jdbc.OracleDriver</value></property> <property name="poolSize"><value>1</value></property> <property name="borrowConnectionTimeout"><value>60</value></property> </bean> 另外一个数据库在这就不在写了,设置同上只是mysql的驱动类名为:xaDataSourceClassName:com.mysql.jdbc.jdbc2.optional.MysqlXADataSource

3.事务配置

Atomikos事务方法 <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close"> <property name="forceShutdown"> <value>true</value> </property> </bean> <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"> <property name="transactionTimeout" value="240" /> </bean> <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager"> <ref bean="atomikosTransactionManager" /> </property> <property name="userTransaction"> <ref bean="atomikosUserTransaction" /> </property> </bean> 接下来的代码和上例类同就不再写。

相关文章推荐

Atomikos Jta分布式事务spring集成实例

最近需要用到分布式事务,研究了下jta,使用了atomikos这个jta的实现,使用的是spring3.0,废话少说,直接贴代码。 1.使用如下jar包 atomikos-util.3.7.0.j...

使用Spring和Atomikos集成JTA分布式事务

分布式事务 分布式事务是指事务位于不同的分布式系统的不同节点之上。目的是保证分布式系统事务的原子性和一致性。XA规范是由X/Open DTP提出的分布式事务规范。XA规范包含四大角色:应用程序( AP...

atomikos实现多数据源支持分布式事务管理(spring、tomcat、JTA)

Atomikos TransactionsEssentials 是一个可靠的库,可以加入到您的Java应用程序,也就是说为了使用这个产品,您必须添加一些jar文件(包括在dist和lib文件夹下)到您...

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

转自:http://www.cnblogs.com/linjiqin/p/3533344.html Spring3.0+Hibernate+Atomikos集成构建JTA的分布式事务--解决...

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

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

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

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

atomikos JTA 分布式事务配置和原理

概述           本人现在正在做税务项目平台,为以后税务开发做准备,由于功能比较多,考虑到以后会有多种数据库参与,所以需要支持分布式事务. 对于事务,可以理解为原子操作,即要不都成功,要不都成...
  • zwkwd
  • zwkwd
  • 2014年03月31日 17:41
  • 3668

spring + JTA + JOTM实现分布式事务

  • 2014年09月21日 00:48
  • 5.76MB
  • 下载

分布式事务JTA 实现之 JOTM

JOTM介绍 JOTM (Java Open Transaction Manager)是由ObjectWeb协会开发的功能完整的且开源的事务管理器。 JOTM 提供了以下功能,有助于增强 WEB 应...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
举报原因:
原因补充:

(最多只允许输入30个字)