热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spring的分布式事务,使用或不用XA-7

链接事务管理器(Chainingtransactionmanagers)在最大努力单阶段提交模式(BestEfforts1PCpatte

链接事务管理器(Chaining transaction managers)

在最大努力单阶段提交模式(Best Efforts 1PC pattern)的其他示范程序 (best-db-db 项目) 中,

一个事务管理器的原始实现只是把其它一些事务管理器链接起来以实现事务同步如果业务处理成功,它们都提交否则全部回滚

具体实现在ChainedTransactionManager中,接受一些其他的事务管理器作为注入的属性如清单8所示

列表8. ChainedTransactionManager的配置

                                                    

要对这个配置进行简单的测试只要插入一些数据到数据库中,回滚并检查两个操作没有留下任何痕迹这实现在MultipleDataSourceTests的一个单元测试中,和XA模式中的atomikos-db项目相同如果回滚不同步,恰巧提交成功,则测试失败

记住,资源的顺序很重要它们是嵌套的提交或回滚动作以与它们入列的顺序在配置中的顺序)相反的顺序来执行这使得其中一个资源是特殊的:如果有问题最外层的资源总是被回滚,即使只有该资源失败同时testInsertWithCheckForDuplicates()方法展示了一个幂等的业务流程防止系统出现部分失败这被实现为在内部资源业务处理中的防范性检查在这个案例中是otherDataSource

int count = otherJdbcTemplate.update("UPDATE T_AUDITS ... WHERE id=, ...?");if (count == 0) {  count = otherJdbcTemplate.update("INSERT into T_AUDITS ...", ...);}

这个更新语句首先尝试WHERE子句如果一切顺利你希望寻找的数据会被成功插入在这个案例中,正常情况下幂等处理的额外保护的成本一个额外的查询更新)在一个复杂的,每个事务都执行很多查询的业务过程中这个成本将低得多

其它选择(Other options)

例子中的ChainedTransactionManagerhas足够简单;它和许多可用的扩展和优化并不相干另一种方法是使用Spring中的TransactionSychronization API,为当前事务在第二个资源加入的时候注册一个回调这是best-jms-db示范项目中用到的方法,在那个例子中关键功能是把TransactionAwareConnectionFactory和一个DataSourceTransactionManager进行绑定这种特殊情况,可以扩大推广到包括使用TransactionSynchronizationManager的非JMS资源原理上好处是,只有这些加入事务的资源会加入队列而不是链中的所有资源然而配置仍然需要知道可能的事务中的参与者对应于哪个资源

同时Spring工程师团正在考虑把“最大努力单阶段提交(Best Efforts 1PC)事务管理器实现为Spring核心模块的一个功能。如果你喜欢这个模式,希望Spring对它有更明确的支持,你可以为这个任务的JIRA问题单(JIRA issue)投票。


by iefreer


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
author-avatar
西西为考研要拼命啦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有