`

Spring实现分布式事务处理(两阶段提交事务)

阅读更多

来自:http://www.iteye.com/topic/81912

 

需求背景: 
由于系统涉及到多个数据源,所以想用两阶段提交事务(分布式事务)来保证数据的一致性,完整性。 
测试环境: 
OS-->win2000 
DB-->sql server 2K 
j2ee容器和IDE-->WSAD 
开发框架:struts+spring+hibernate 
配置文件: 

Java代码 
  1. <bean id="dataSourcedgLabourDB" class="org.springframework.jndi.JndiObjectFactoryBean">  
  2.         <property name="jndiName" value="jdbc/dg_labour"/>  
  3.     </bean>  
  4.   
  5.    <bean id="sessionFactorydgLabourDB" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  6.         <property name="dataSource" ref="dataSourcedgLabourDB"/>  
  7.         <property name="mappingDirectoryLocations">  
  8.             <list>  
  9.                 <value>classpath:/com/legend/shipment/domain/dgLabour</value>  
  10.             </list>  
  11.         </property>  
  12.         <property name="hibernateProperties">  
  13.             <props>  
  14.                 <prop key="hibernate.dialect">${hibernate.dialect}</prop>  
  15.                 <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>  
  16.                 <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>  
  17.                 <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>  
  18.             </props>  
  19.         </property>  
  20.     </bean>  
  21.   
  22.     <bean id="wasTxMgr" class="org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean"/>  
  23.      
  24.    <bean id="transactionManagerdgLabourDB" class="org.springframework.transaction.jta.JtaTransactionManager">   
  25.         <property name="transactionManager">  
  26.             <ref local="wasTxMgr"/>  
  27.         </property>  
  28.    </bean>  
  29.   
  30.    <bean id="txProxyTemplatedgLabourDB" abstract="true"  
  31.         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
  32.         <property name="transactionManager"><ref bean="transactionManagerdgLabourDB"/></property>  
  33.         <property name="transactionAttributes">  
  34.             <props>  
  35.                 <prop key="save*">PROPAGATION_REQUIRED</prop>  
  36.                 <prop key="remove*">PROPAGATION_REQUIRED</prop>  
  37.                 <prop key="del*">PROPAGATION_REQUIRED</prop>  
  38.                 <prop key="update*">PROPAGATION_REQUIRED</prop>  
  39.                 <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>  
  40.             </props>  
  41.         </property>  
  42.     </bean>  



问题描叙: 
这几天我一直都在网上查找,自己实践摸索,确始终没有调试成功,希望那位能指点我一下谢谢! 
1) 使得SQL Server2K 有 XA能力。 
   下载sql Server2005 JDBC驱动程序( 
http://www.microsoft.com/downloads/details.aspx?FamilyID=E22BC83B-32FF-4474-A44A-22B6AE2C4E17&displaylang=zh-cn)。 
安照里面的指南安装好,也成功测试了中间的一个例子。 
2) 用WSAD JNDI的方式获取数据源。用WSAD中的XA方式配置数据源。 
按照IBM官方网上(http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0407_woolf/0407_woolf.html)的例子, 
建立了几个连接,也就是我的Spring配置文件中要使用的数据源。 

 

调试中的问题:

出现异常“未能找到存储过程 'master..xp_jdbc_open'”

解决:在Sql server中查找,确实没有那个存储过程。由于用的是sql server 2005 jdbc 驱动程序,而且WSAD5.1也只提供了sql server 2000 jdbc driver(XA),所以推断是不是版本不匹配。于是下载了sql server 2000 jdbc driver,这样成功了。

分享到:
评论

相关推荐

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

    7. **分布式事务原理**: 分布式事务通常采用两阶段提交(2PC)、三阶段提交(3PC)或者更高级的补偿事务(Saga)等算法来协调跨多个节点的事务。Atomikos通过JTA接口实现了这些机制,使得应用程序无需关心底层实现,...

    java分布式事务demo

    3. **两阶段提交(2PC)**:这是一种经典的分布式事务解决方案,包括准备阶段和提交阶段。所有参与者首先在准备阶段进行预提交,然后在提交阶段根据所有参与者的结果决定是否正式提交。然而,2PC存在单点故障、阻塞...

    基于Spring4.1.7+atomikos+mybaits 实现两阶段的分布式事务处理

    本文将深入探讨如何利用Spring 4.1.7、Atomikos以及MyBatis实现两阶段的分布式事务(2PC,Two-Phase Commit)。这是一套强大的解决方案,特别适用于处理跨多个数据库或服务的复杂业务逻辑。 首先,我们需要理解什么...

    springboot多数据源即分布式事务解决方案

    3. 跨服务事务协调:在微服务架构中,分布式事务可能涉及多个服务,需要使用如Saga、TCC(Try-Confirm-Cancel)或2PC(两阶段提交)等分布式事务协调算法。 4. 性能影响:分布式事务会增加系统的复杂性,可能导致...

    springcloud整合分布式事务框架TX-LCN

    但传统的两阶段提交(2PC)等方案在面对大规模分布式环境时性能瓶颈明显,因此诞生了如TX-LCN这样的新型分布式事务框架。 2. **TX-LCN组件介绍**: - **TC(Transaction Coordinator)**:事务协调器,负责全局...

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

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

    分布式事务视频教程

    在这样的背景下,分布式事务成为了处理跨服务数据一致性问题的关键技术。 **分布式事务**是指涉及两个或更多节点上的资源管理器的一组操作,这些操作要么全部完成,要么全部不完成。它确保了不同服务之间数据的一致...

    分布式事务实践 解决数据一致性

    还有XA以及两阶段提交,并通过实例演示了使用JTA,通过两阶段提交,实现多数据源的事务实现。... 4-1 Spring事务机制_基本接口 4-2 Spring事务机制_实现 4-3 Jpa事务实例 4-4 Jms事务原理 4-5 Jms-session事务实例 4...

    基于mysql,SpringBoot 分布式事务例子

    对于分布式事务,我们可以使用JTA(Java Transaction API)配合X/Open XA规范实现两阶段提交(2PC)。 MySQL作为广泛使用的SQL数据库,虽然默认不支持分布式事务,但可以通过InnoDB存储引擎启用行级锁和事务支持。...

    spring整合atomikos实现分布式事务的方法示例

    Atomikos 的主要功能在于支持分布式事务的两阶段提交(2PC)协议。在2PC中,事务的提交过程分为准备阶段和提交阶段。在准备阶段,事务协调者询问所有参与者的资源是否准备好提交,如果所有参与者都同意,那么在提交...

    spring hibernate atomikos 分布式事务

    在实际应用中,Atomikos能够处理复杂的分布式事务场景,如两阶段提交(2PC),以保证ACID(原子性、一致性、隔离性和持久性)特性。同时,由于其高度的定制性和性能优化,即使在高并发环境中也能保持良好的性能。 ...

    Spring3.0+Hibernate+Atomikos多数据源分布式事务管理

    **分布式事务的关键挑战**: 分布式事务处理面临的主要挑战包括两阶段提交(2PC)协议的性能瓶颈、事务的回滚与恢复、并发控制以及事务的隔离级别等。Atomikos通过优化的事务算法和智能的回滚策略,尽可能减少了这些...

    TCC实现分布式事物,java 源码

    每个操作都是本地事务,这样可以避免传统两阶段提交(2PC)带来的性能瓶颈。在Try阶段,业务逻辑执行初步操作,如果成功则进入Confirm阶段,确认这些操作;如果在Try阶段出现问题,则会执行Cancel操作,撤销已经完成...

    spring mybatis atomikos 多库分布式事务demo

    分布式事务的核心在于解决CAP(一致性、可用性、分区容错性)理论中的问题,而2PC(两阶段提交)或3PC(三阶段提交)协议常被用作分布式事务的解决方案。Atomikos通过内部实现这些协议,为开发者提供了透明的事务...

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

    XA事务是分布式事务的一种标准,通过两阶段提交(2PC)协议协调参与者,保证事务的正确性。 本案例中的关键步骤可能包括: 6. 配置Atomikos:在Spring配置文件中,你需要定义Atomikos的事务管理器,并配置相关的...

    分布式事务处理方案.docx

    除了LCN之外,还有其他的分布式事务处理协议,比如二阶段提交(2PC)和三阶段提交(3PC)。 - **二阶段提交**(2PC): - **准备阶段**:参与者将事务操作记录到日志中但不提交,等待协调者的指令。 - **提交阶段...

    分布式的事务处理、springcloud

    CTT模式(Correction Try Confirm)和Saga模式则是另外两种分布式事务处理方式,它们通常用于长事务,通过多个微服务间的协调来实现事务一致性。 CTT模式由Try、Confirm和Cancel三个阶段组成,Try阶段执行业务操作...

    分布式事务

    分布式事务是计算机科学中涉及数据库管理系统的一个重要概念,特别是在大型企业级应用和...Spring框架和WebLogic Server这样的工具为开发者提供了实现分布式事务的便利,使得在复杂的企业级环境中处理事务成为可能。

    springcloud集成分布式事务seata中的AT模式

    总结来说,Seata的AT模式为SpringCloud微服务提供了一种简便的分布式事务解决方案,通过自动化处理事务的提交和回滚,使得开发者可以更专注于业务逻辑的实现。但需要注意,实际使用时需要权衡其带来的性能影响和系统...

Global site tag (gtag.js) - Google Analytics