如果容器支持jta,那么spring配置起来非常简单,因为spring提供了JtaTransactionManager,在这里面提供了几乎所有的服务器的jta的jndi名字,比如
* "java:comp/UserTransaction" for Resin 2.x, Oracle OC4J (Orion), JOnAS (JOTM), BEA WebLogic
* "java:comp/TransactionManager" for Resin 3.x
* "java:appserver/TransactionManager" for GlassFish
* "java:pm/TransactionManager" for Borland Enterprise Server and Sun Application Server (Sun ONE 7 and later)
* "java:/TransactionManager" for JBoss Application Server
* "java:comp/TransactionManager" for Resin 3.x
* "java:appserver/TransactionManager" for GlassFish
* "java:pm/TransactionManager" for Borland Enterprise Server and Sun Application Server (Sun ONE 7 and later)
* "java:/TransactionManager" for JBoss Application Server
由于大部分服务器获取jta的方式都不尽相同,spring还针对不同的服务器提供了不同的jta实现,例如:
WebLogicJtaTransactionManager
WebSphereUowTransactionManager
OC4JJtaTransactionManager
WebSphereUowTransactionManager
OC4JJtaTransactionManager
具体内容参加:
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/transaction/jta/JtaTransactionManager.html
不管是jdbc、hibernate还是ibatis,都可以通过JtaTransactionManager来配置分布式事务
下面简单贴出部分配置代码:
hibernate:
<beans>
<jee:jndi-lookup id="myDataSource1" jndi-name="dsjndi1" />
<jee:jndi-lookup id="myDataSource2" jndi-name="dsjndi2" />
<bean id="mySessionFactory1"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="myDataSource1" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hiberante.format_sql">true</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>com.landor.test.entity.User</value>
</list>
</property>
<property name="annotatedPackages">
<list>
<value>com.landor.test.entity</value>
</list>
</property>
</bean>
<bean id="mySessionFactory2"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="myDataSource2" />
</property>
</bean>
<bean id="myTxManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
<!--如果默认id=transactionManager,那么可以有下面的标签,这样spring会自动寻找相应的jta的jndi并且注入
<tx:jta-transaction-manager/>-->
<tx:advice id="txAdvice" transaction-manager="myTxManager">
<tx:attributes>
<tx:method name="select*" read-only="true" propagation="REQUIRED"/>
<tx:method name="find*" read-only="true" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
<tx:method name="update*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
<tx:method name="add*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
<tx:method name="delete*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
</tx:attributes>
</tx:advice>
</beans>
<jee:jndi-lookup id="myDataSource1" jndi-name="dsjndi1" />
<jee:jndi-lookup id="myDataSource2" jndi-name="dsjndi2" />
<bean id="mySessionFactory1"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="myDataSource1" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hiberante.format_sql">true</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>com.landor.test.entity.User</value>
</list>
</property>
<property name="annotatedPackages">
<list>
<value>com.landor.test.entity</value>
</list>
</property>
</bean>
<bean id="mySessionFactory2"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="myDataSource2" />
</property>
</bean>
<bean id="myTxManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
<!--如果默认id=transactionManager,那么可以有下面的标签,这样spring会自动寻找相应的jta的jndi并且注入
<tx:jta-transaction-manager/>-->
<tx:advice id="txAdvice" transaction-manager="myTxManager">
<tx:attributes>
<tx:method name="select*" read-only="true" propagation="REQUIRED"/>
<tx:method name="find*" read-only="true" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
<tx:method name="update*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
<tx:method name="add*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
<tx:method name="delete*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
</tx:attributes>
</tx:advice>
</beans>
ibatis:
ibatis与hibernate是一样的,只需要将hibernate的sessionFactory部分更换一下
......
<bean id="sqlMap1Client"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="myDataSource1" />
<property name="configLocation" value="xxx/SqlMapConfig.xml" />
</bean>
<bean id="sqlMap2Client"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="OssDS" />
<property name="configLocation" value="xxx/SqlMapConfig.xml" />
</bean>
......
<bean id="sqlMap1Client"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="myDataSource1" />
<property name="configLocation" value="xxx/SqlMapConfig.xml" />
</bean>
<bean id="sqlMap2Client"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="OssDS" />
<property name="configLocation" value="xxx/SqlMapConfig.xml" />
</bean>
......
相关推荐
4. **编程模型**:项目可能提供了示例代码,展示了如何在Java应用程序中使用JTA和XA进行事务管理。这通常涉及到声明事务边界(例如,使用`@Transactional`注解)、获取UserTransaction实例以及调用其start、commit和...
X/Open组织,现称为Open Group,于1994年提出了DTP模型,它包括四个核心组件:应用程序(AP)、事务管理器(TM)、资源管理器(RM)和通信资源管理器(CRM)。 1. **分布式事务处理**:事务是程序执行的一个逻辑...
除了通过标准的XA接口实现分布式事务外,MySQL还提供了内部的XA支持,这意味着开发者可以直接在MySQL服务器内部使用XA功能,而无需依赖外部的事务管理器。 #### 九、总结 本文详细介绍了MySQL如何通过XA协议实现...
Atomikos 提供了 XA 事务支持,这使得它可以协调来自不同数据源的事务,确保在整个分布式环境中的事务一致性。 在 Spring Boot 中集成 Atomikos,开发者需要配置 Atomikos 作为事务管理器,并为每个数据源设置相应...
在分布式系统中,MySQL支持通过X/Open XA协议实现的分布式事务,这允许跨越多个资源管理器(如不同的数据库实例)的事务一致性。分布式事务的处理分为两个主要阶段: 1. **预提交阶段(Prepare Phase)**:在这一...
使用Atomikos支持分布式事务,Spring+Mybatis+Druid+AtomikosDataSource 使用手册: https://www.yuque.com/itman/wosfkn/mreame
综上所述,"spring+mybatis+jta实现多数据源的分布式事物"项目为开发者提供了一个实用的示例,帮助他们了解和掌握在实际应用中如何处理复杂的事务场景。通过这个项目,开发者可以学习到Spring的事务管理、MyBatis的...
1. **XA协议**:由开放组制定的一种分布式事务标准,允许跨多个资源管理器(如数据库、消息队列等)的事务协调。 2. **补偿事务(TCC)**:Try-Confirm-Cancel模式,每个操作先尝试执行,然后确认,如果失败则执行补偿...
JTA定义了两个主要组件:Transaction Manager(事务管理器)和XAResource(事务资源)。事务管理器负责控制事务的生命周期,包括开始、提交、回滚等操作;而XAResource则代表可以参与事务的资源,如数据库连接、消息...
- **XA分布式事务协议**:定义了资源管理器(如数据库)与事务管理器之间的接口标准。MySQL 5.0.3及以上版本支持XA事务,InnoDB存储引擎提供支持。 - **Atomikos**:这是一个开源的Java事务管理器,支持JTA(Java ...
在现代企业级应用中,随着业务复杂性和规模的增加,多数据源分布式事务管理成为了一个不可或缺的话题。本调研报告深入探讨了如何在Java环境中有效地处理此类事务,旨在为开发人员和架构师提供实用的指导。 分布式...
在深入分析微服务分布式事务管理机制的基础上,我们将探讨如何在异步通信模式下实现微服务架构中的事务一致性,并深入理解与之相关的概念与技术。 首先,微服务架构是目前软件工程中一种流行的服务组织方式,其主要...
标题《MySQL 外部XA及其在分布式事务中的应用分析》指出了文章的核心议题,即分析MySQL数据库管理系统中外部XA事务的实现机制以及它在分布式事务环境中的应用。本文将深入讨论与理解分布式事务处理原理,MySQL XA...
在IT行业中,分布式事务管理是复杂且至关重要的一个领域,特别是在构建可扩展的、高可用性的企业级应用时。Spring框架作为一个广泛使用的Java应用程序开发框架,提供了多种支持事务管理的解决方案,其中包括集成JOTM...
通过这种方式,Seata AT模式简化了开发者的工作量,让他们只需关注业务逻辑,而分布式事务的管理和控制则交由Seata自动处理。 ### 总结 本文从分布式事务的基础概念出发,介绍了ACID特性和CAP理论,随后深入探讨了...
**EJB3-JBOSS7-分布式事务示例** EJB3(Enterprise JavaBeans 3.0)是Java EE平台中的一个核心组件,它提供了一种标准的方式来创建可部署在服务器上的分布式、面向服务的企业级应用程序。EJB3引入了许多改进,包括...
分布式一致性是分布式系统亟需解决的关键问题之一,根据过去一年的调查问卷,在微服务的实践中分布式事务是用户遇到的最大痛点。目前市面缺少经过洪荒流量验证的分布式事务组件,Seata 在阿里经济体内部经过了漫长的...
《X/Open分布式事务处理规范XA》是X/Open(现为The Open Group)发布的一个重要的技术标准,主要关注在分布式计算环境中如何协调多个资源管理器进行一致性的事务处理。该规范定义了一个接口,允许应用程序和资源管理...