使用JOTM实现分布式事务管理(多数据源)

使用spring和hibernate可以很方便的实现一个数据源的事务管理,但是如果需要同时对多个数据源进行事务控制,并且不想使用重量级容器提供的机制的话,可以使用JOTM达到目的.

JOTM的配置十分简单,spring已经内置了对JOTM的支持,
一.

<property name="userTransaction"><ref local="jotm"/></property>

首先定义如上的两个bean,利用spring对JOTM进行初始化.

二.接下来定义所需的数据源

oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@192.168.1.224:1521:speed

5
2
stms
speed

通过如上的两个bean定义一个数据源,所需的jar在下载的jotm的压缩包中都以自带.

三.如果还需要定义多个数据源的话,就照如上的格式定义即可.

四.定义好数据源后,我们再定义相应的sessionFactory

<property name="dataSource" ref="dataSource"/>
 <property name="mappingResources">
    <list>
      <value>com/vtradex/edi/example/om/oracle/Example.hbm.xml</value>
    </list>
 </property>
 <property name="hibernateProperties">
    <props>
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
    </props>
 </property>
<property name="jtaTransactionManager">

mySessionFactory使用dataSource这个数据源

五.定义一个进行事务控制的代理
<bean id=“abstractTransactionProxy” abstract=“true”

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
        <ref bean="transactionManager"/>
    </property>
    <property name="transactionAttributeSource">
        <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
    </property>
</bean>

六.以上都是一些准备工作,完成后,接下来就可以对我们自己的需要进行事务控制的bean进行定义了

<property name="sessionFactory" ref="mySessionFactory"/>
<property name="sessionFactory" ref="mySessionFactory2"/>
<bean id="tt" parent="abstractTransactionProxy">
    <property name="target">
        <bean class="com.vtradex.edi.server.service.Tt">
                <property name="hqlExec1" ref="hqlExecutor1"/>
                <property name="hqlExec2" ref="hqlExecutor2"/>
        </bean>
    </property>
</bean>

hqlExecutor1使用mySessionFactory来对数据源进行操作
而hqlExecutor2使用mySessionFactory2来对数据源进行操作

tt这个bean中使用了hqlExecutor1和hqlExecutor2来进行操作.

================================================================================

看一下配置实例

<property name="userTransaction"><ref local="jotm"/></property>

oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@192.168.1.224:1521:speed

5
2
stms
speed

<property name="dataSource" ref="dataSource"/>
 <property name="mappingResources">
    <list>
      <value>com/vtradex/edi/example/om/oracle/Example.hbm.xml</value>
    </list>
 </property>
 <property name="hibernateProperties">
    <props>
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
    </props>
 </property>
<property name="jtaTransactionManager">

oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@192.168.1.224:1521:speed

5
2
swms
speed

<property name="dataSource" ref="dataSource2"/>
 <property name="mappingResources">
    <list>
      <value>com/vtradex/edi/example/om/oracle/Message.hbm.xml</value>
    </list>
 </property>
 <property name="hibernateProperties">
    <props>
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
    </props>
 </property>
<property name="jtaTransactionManager">
<property name="sessionFactory" ref="mySessionFactory2"/>
<bean id="abstractTransactionProxy" abstract="true"
      class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
        <ref bean="transactionManager"/>
    </property>
    <property name="transactionAttributeSource">
        <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
    </property>
</bean>
<bean id="tt" parent="abstractTransactionProxy">
    <property name="target">
        <bean class="com.vtradex.edi.server.service.Tt">
        </bean>
    </property>
</bean>

使用JOTM实现分布式事务管理(多数据源)

时间: 2024-10-01 07:20:30

使用JOTM实现分布式事务管理(多数据源)的相关文章

Spring多数据源分布式事务管理/springmvc+spring+atomikos[jta]+druid+mybatis

项目进行读写分离及分库分表,在一个业务中,在一个事务中处理时候将切换多个数据源,需要保证同一事务多个数据源数据的一致性.此处使用atomikos来实现:最后附源码: 1:spring3.0之后不再支持jtom[jta]了,第三方开源软件atomikos(http://www.atomikos.com/)来实现. 2:org.springframework.transaction.jta.JotmFactoryBean类,spring-tx-2.5.6.jar中有此类,spring-tx-3.0.

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

背景: 1.系统采用SSM架构.需要在10多个MYSQL数据库之间进行切换并对数据进行操作,上篇博文<springMVC+Mybatis(使用AbstractRoutingDataSource实现多数据源切换时)事务管理未生效的解决办法> 2.第一步先通过AbstractRoutingDataSource实现了多数据源的灵活切换,但是后来发现事务不起作用: 3.发现问题是因为重复扫描service包导致第二次扫入容器的BEAN没有纳入事务管理,因此在springMVC的配置文件中排除了对Ser

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

本文转载于本人另一博客[http://blog.csdn.net/liaohaojian/article/details/68488150] 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做: 一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是应该处于正确

spring事务隔离级别、传播行为以及spring+mybatis+atomikos实现分布式事务管理

转载自:http://blog.csdn.net/liaohaojian/article/details/68488150 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做: 一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是应该处于正确的状态,即数据完整

Spring Cloud 分布式事务管理

Spring Cloud 分布式事务管理 在微服务如火如荼的情况下,越来越多的项目开始尝试改造成微服务架构,微服务即带来了项目开发的方便性,又提高了运维难度以及网络不可靠的概率. Spring Cloud 分布式事务管理 单体式架构 微服务架构 优点: 缺点: 分布式事务的引入 分布式事务解决方案 基于XA协议的两阶段提交 消息事务+最终一致性 TCC编程模式 具体实现 LCN ByteTCC 在说微服务的优缺点时,有对比才会更加明显,首先说一下单体式结构 单体式架构 在单体式架构中,系统通常采

ADO.NET中的TransactionScope何时需要启用MSTDC(分布式事务管理)

我们知道在ADO.NET中可以用TransactionScope来将多个SqlConnection(多个数据库连接)执行的Sql语句放入一个事物中提交或取消,但是使用TransactionScope的时候也要额外小心,因为当TransactionScope在特殊情况下需要启动MSTDC(分布式事务管理),那么我们来看看什么时候TransactionScope需要启动MSTDC呢? 首先来声明下本例中代码和数据库的环境,首先本例中C#代码运行的电脑和SqlServer数据库所在的电脑是局域网中的两

谈谈分布式事务之二:基于DTC的分布式事务管理模型[下篇]

[续上篇] 当基于LTM或者KTM的事务提升到基于DTC的分布式事务后,DTC成为了本机所有事务型资源管理器的管理者:此外,当一个事务型操作超出了本机的范 围,出现了跨机器的调用后,本机的DTC需要于被调用者所在机器的DTC进行协助.上级对下级(包括本机DTC对本机所有资源管理器,以及上下级DTC) 的管理得前提是下级在上级那里登记,即事务登记(Transaction Enlist).所有事务参与者,包括所有资源管理器和事务管理器(即DTC)在进行了事务等级完成之后形成了一个树形的层级结构,该结

已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。

已禁用对分布式事务管理器(MSDTC)的网络访问.请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问. 此错误好像只有sql server2005才有,2008数据库以后版本就没有此错误了. 与基础事务管理器的通信失败. .net 代码里 写事务代码 如: using System.Transactions; using (TransactionScope ts = new TransactionScope()) { } ts.Complete(); DTC登陆账户为

LCN分布式事务管理(一)

前言 好久没写东西了,9月份换了份工作,一上来就忙的要死.根本没时间学东西,好在新公司的新项目里面遇到了之前没遇到过的难题.那遇到难题就要想办法解决咯,一个请求,调用两个服务,同时操作更新两个数据库.这就带来事务不一致的问题了,分布式事务管理被强行拉出来了.导致原本两个springboot的单体项目,必须要协同管理起来.刚好微服务也接触过,小试牛刀咯. 框架介绍 LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果 核心步骤 创建事务组是指在事务发起方开始执行