`
liuguofeng
  • 浏览: 453574 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
 
阅读更多

http://www.cnblogs.com/huangjingzhou/articles/2012014.html

 

 

一.以下介绍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>
接下来的代码和上例类同就不再写。
复制代码
分享到:
评论

相关推荐

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

    本文将深入探讨如何在Tomcat应用服务器上集成JTA,并使用JOTM(Java Open Transaction Manager)或Atomikos作为事务管理器来实现分布式事务。 首先,我们需要理解JTA的核心概念。JTA是Java EE平台的一部分,提供了...

    Atomikos实现分布式事务

    Atomikos 是一款开源的分布式事务处理库,它为Java应用程序提供了支持JTA(Java Transaction API)的事务管理服务。JTA是Java平台标准中定义的用于处理分布式事务的API,允许开发者在一个全局事务中处理多个数据库...

    java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip

    8. **集成与配置**: 集成Atomikos到Spring Boot项目中,需要在配置文件中设置相关的事务管理属性,比如数据源、事务超时时间等,并且需要在代码中适当地声明和管理事务边界。 9. **测试与监控**: 在分布式事务环境...

    集成jta-atomikos 实现分布式事务.zip

    本文将深入探讨如何在SpringBoot框架中集成JTA(Java Transaction API)和Atomikos来实现分布式事务管理。这是一项关键的技术,特别是在微服务架构中,它保证了跨服务操作的原子性。 首先,`pom.xml`是Maven项目的...

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

    分布式事务是现代企业级应用中不可或缺的技术,尤其是在大数据和微服务架构中,保证数据的一致性和完整性至关重要。Spring 框架提供了强大的事务管理能力,而JTA(Java Transaction API)是Java平台上的标准分布式...

    SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo

    Spring Boot集成Atomikos进行分布式事务管理,主要步骤包括: 1. 引入依赖:在项目中添加Atomikos的依赖,确保项目能够访问其提供的JTA服务。 2. 配置Atomikos:配置文件中设置Atomikos的相关参数,如事务超时时间、...

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

    分布式事务是现代企业级应用中不可或缺的一部分,尤其是在大数据和微服务架构中,它确保了在多个数据库或资源管理系统中的数据一致性。本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java ...

    集成atomikos实现分布式事务.zip

    在IT行业中,分布式事务是一个重要的概念,特别是在构建大型、高可用性的系统时。Atomikos是一个开源的事务...通过上述步骤,开发者可以将Atomikos与Spring Boot的事务管理机制紧密结合,构建出高可用的分布式应用。

    spring mybatis atomikos 多库分布式事务demo

    Atomikos是Java环境下的一款强大的事务处理工具,支持JTA(Java Transaction API),能处理复杂的分布式事务需求。在Spring中整合Atomikos,可以实现全局的事务管理,即使跨越多个数据库,也能确保ACID(原子性、...

    Springboot+Atomikos+Jpa+Mysql实现JTA分布式事务

    本文将详细讲解如何利用Spring Boot、Atomikos、JPA(Java Persistence API)以及MySQL来实现JTA(Java Transaction API)分布式事务。 首先,Spring Boot是一个轻量级的框架,它简化了基于Spring的应用程序开发...

    spring 结合druid和hibernate使用jta配置分布式事务

    `Atomikos` 是一个开源的JTA实现,它提供了对分布式事务的支持,可以与Spring集成,处理多数据源的事务管理。 在Spring中配置Druid和Hibernate结合Atomikos进行分布式事务管理的步骤如下: 1. **引入依赖**:在...

    非Maven基于SSM+Atomikos的分布式事务处理案例源码

    4. **Atomikos**:Atomikos是一个符合JTA(Java Transaction API)标准的事务管理器,支持XA分布式事务协议。在分布式环境中,它能确保跨多个数据源的操作要么全部成功,要么全部回滚,实现ACID(原子性、一致性、...

    springboot-jpa atomikos 分布式事务管理

    通过上述配置,SpringBoot应用就能在Atomikos的帮助下,对多数据库进行分布式事务的统一管理。在处理事务时,Atomikos会跟踪事务的边界,确保所有操作要么全部成功,要么全部回滚,从而保证了数据的一致性。 总的来...

    Atomikos分布式事务DEMO

    在这个DEMO中,Tomcat承载了Spring和MyBatis的应用,并且通过Atomikos的JTA支持,能够在多线程环境下处理分布式事务。 压缩包中的"atomikosJtaTx_Transform"可能包含以下内容:配置文件(如atomikos.properties)、...

    使用Spring+atomikos实现分布式事务

    这就是Atomikos的角色,它实现了JTA,允许应用程序在分布式环境中进行跨系统的事务处理。 **配置Spring与Atomikos** 1. **配置Atomikos**: 首先,我们需要在项目中引入Atomikos的依赖。在`pom.xml`中添加相应的...

    spring4+atomikos实现分布式事务

    在IT行业中,分布式事务是一个重要的概念,特别是在大型系统和微服务架构中,它涉及到多个数据库或数据源的协调操作,确保数据的一致性和完整性。Spring框架作为Java领域中广泛使用的应用开发框架,提供了多种处理...

    spring搭建分布式事务所需嘉宝atomikos加druid配置分布式事务

    Spring框架提供了多种实现分布式事务管理的方式,其中一种是通过集成第三方工具如Atomikos来实现。Atomikos是一个开源的事务处理服务,支持JTA(Java Transaction API),能很好地处理分布式环境中的ACID(原子性、...

    Java分布式开发spring+jta+jotm

    "Java分布式开发spring+jta+jotm"的主题涵盖了Spring框架在分布式系统中的应用,特别是如何利用JTA和JOTM来处理跨资源的分布式事务。理解和掌握这些技术对于构建可扩展、健壮的Java应用至关重要。通过深入学习和实践...

    spring+jotm+ibatis+mysql实现JTA分布式事务

    本项目“spring+jotm+ibatis+mysql实现JTA分布式事务”旨在利用这些技术来确保在分布式环境中的数据一致性。下面将详细介绍这个项目所涉及的知识点。 首先,Spring框架是Java开发中最常用的应用框架之一,它提供了...

    Atomikos分布式事务处理所需jar包

    Atomikos是一个开源的事务处理系统,专门设计用于在Java应用程序中实现分布式事务管理。它提供了JTA(Java Transaction API)的实现,使得开发者能够在不同的数据源之间进行复杂的事务操作,确保数据的一致性和完整...

Global site tag (gtag.js) - Google Analytics