spring+hibernate+JTA 分布式事务的例子

对于横跨多个Hibernate SessionFacotry的分布式事务,只需简单地将 JtaTransactionManager 同多个 LocalSessionFactoryBean 的定义结合起来作为事务策略。你的每一个DAO通过bean属性得到各自的 SessionFactory 引用。如果所有的底层JDBC数据源都是支持事务的容器,那么只要业务对象使用了 JtaTransactionManager 作为事务策略,它就可以横跨多个DAO和多个session factories来划分事务,而不需要做任何特殊处理。

 1 <beans>
 2
 3   <bean id="myDataSource1" class="org.springframework.jndi.JndiObjectFactoryBean">
 4     <property name="jndiName" value="java:comp/env/jdbc/myds1"/>
 5   </bean>
 6
 7   <bean id="myDataSource2" class="org.springframework.jndi.JndiObjectFactoryBean">
 8     <property name="jndiName" value="java:comp/env/jdbc/myds2"/>
 9   </bean>
10
11   <bean id="mySessionFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
12     <property name="dataSource" ref="myDataSource1"/>
13     <property name="mappingResources">
14       <list>
15         <value>product.hbm.xml</value>
16       </list>
17     </property>
18     <property name="hibernateProperties">
19       <value>
20         hibernate.dialect=org.hibernate.dialect.MySQLDialect
21         hibernate.show_sql=true
22       </value>
23     </property>
24   </bean>
25
26   <bean id="mySessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
27     <property name="dataSource" ref="myDataSource2"/>
28     <property name="mappingResources">
29       <list>
30         <value>inventory.hbm.xml</value>
31       </list>
32     </property>
33     <property name="hibernateProperties">
34       <value>
35         hibernate.dialect=org.hibernate.dialect.OracleDialect
36       </value>
37     </property>
38   </bean>
39
40   <bean id="myTxManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
41
42   <bean id="myProductDao" class="product.ProductDaoImpl">
43     <property name="sessionFactory" ref="mySessionFactory1"/>
44   </bean>
45
46   <bean id="myInventoryDao" class="product.InventoryDaoImpl">
47     <property name="sessionFactory" ref="mySessionFactory2"/>
48   </bean>
49
50   <!-- this shows the Spring 1.x style of declarative transaction configuration -->
51   <!-- it is totally supported, 100% legal in Spring 2.x, but see also above for the sleeker, Spring 2.0 style -->
52   <bean id="myProductService"
53       class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
54     <property name="transactionManager" ref="myTxManager"/>
55     <property name="target">
56       <bean class="product.ProductServiceImpl">
57         <property name="productDao" ref="myProductDao"/>
58         <property name="inventoryDao" ref="myInventoryDao"/>
59       </bean>
60     </property>
61     <property name="transactionAttributes">
62       <props>
63         <prop key="increasePrice*">PROPAGATION_REQUIRED</prop>
64         <prop key="someOtherBusinessMethod">PROPAGATION_REQUIRES_NEW</prop>
65         <prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>
66       </props>
67     </property>
68   </bean>
69
70 </beans>
时间: 2024-08-02 14:56:53

spring+hibernate+JTA 分布式事务的例子的相关文章

Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)

在本系列先前的文章中,我们主要讲解了JDBC对本地事务的处理,本篇文章将讲到一个分布式事务的例子. 请通过以下方式下载github源代码: git clone https://github.com/davenkin/jta-atomikos-hibernate-activemq.git 本地事务和分布式事务的区别在于:本地事务只用于处理单一数据源事务(比如单个数据库),分布式事务可以处理多种异构的数据源,比如某个业务操作中同时包含了JDBC和JMS或者某个操作需要访问多个不同的数据库. Java

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.

使用Atomikos实现JTA分布式事务

使用Atomikos实现JTA分布式事务 在这篇文章中: 1.1 JTA事务模型 2 JTA规范接口 3 Atomikos分布式事务 本文全面的介绍了JTA分布式事务模型和接口规范,以及开源的分布式事务解决方案Atomikos.笔者认同"talk is cheap,show me the code",因此在文章最后,给出一个完整的Atomikos与spring.mybatis整合的完整案例. 1 JTA规范 Java事务API(JTA:Java Transaction API)和它的同

使用Atomikos Transactions Essentials实现多数据源JTA分布式事务--转载

原文:http://www.ite/topic/122700 9.17 update:使用NonXADataSourceBean. Mysql在5.0版本和Connecter/J5.0版本后提供了XADatasource支持,如果使用了支持XADatasouce版本,可以参考2楼补充. 最近做的project中遇到要将数据库中的表分布到两台不同的服务器上的Mysql5.0中,project主要使用spring+ibatis.因此需要JTA的支持,但是tomcat不支持,所以就搜索开源的JTA实现

JTA 分布式事务

什么是JTA - 2009-07-25 18:31:06|  分类: 技术文章|举报|字号 订阅 什么是JTA?Java Transaction API(Java事务API) (JTA)Java Transaction API(Application Programming Interface)什么是JTA Transaction?它有怎样的特点呢?JTA Transaction是指由J2EE Transaction manager去管理的事务.其最大的特点是调用UserTransaction接

JTA分布式事务实战

spring3.0    分布式事务  jta  atomikos 1.使用如下jar包 atomikos-util.3.7.0.jar cglib-nodep-2.2.2.jar transactions-3.7.0.jar transactions-api-3.7.0.jar transactions-jdbc-3.7.0.jar transactions-jta-3.7.0.jar 2.spring配置文件如下: Xml代码   <?xml version="1.0" en

spring多数据源分布式事务的分析与解决方案

一.概述 1.业务背景 对老系统进行重构合并,导致新系统需要同时对3个数据库进行管理.由于出现跨库业务,需要实现分布式事务. 2.开发环境 spring框架版本  4.3.10.RELEASE 持久层为结合mybatis写的领域模型,如 每一个entity对应数据库的一张表,@DataSource注解(自定义)了对应数据源的key值.所以一个业务中可能存在数据源的切换. 事务采用注解@Transaction驱动. 二.spring对多数据源的支持 spring框架通过抽象类AbstractRou

(附源码gitHub下载地址)spring boot -jta-atomikos分布式事务

应用场景:双数据源,就是某些项目会涉及到两个数据源或者两个以上的数据源,这个多数据源的项目一般是数据同步,也就是把数据从另一个系统中,保存到另一个系统,两边的 数据库又不一样,比如一个Mysql.一个Sql Server.但是不管是什么类型的数据库,我们都不管,直接连接就是. 为什么要使用分布式事务:顾名思义,事务就是回滚,比如如果一个在保存数据的时候,在A数据库已经 保存,但是在保存数据在B的过程抛出异常,那么是不是应该全部回滚,把已经 保存了的A.B数据库的数据全部回滚?答案是确定的.下面就

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实现,它本身