在项目中对于事务控制有如下3种:
1.简单的单项目,单服务,单数据源事务控制,如图:
2.单项目,单服务,多数据源事务控制,如图:
这种方式如果我们使用了spring容器的话,那么jta的支持会很好的解决此类事务问题.
3.多项目,多服务,多数据源间的事务控制,如图:
这个需要支持分布式事务,如果采用的是ejb的话,能够得到很好的解决,大家统统在以个事务中. 但是如果是项目采用的是spring作为容器或者多服务组件是以webService的方式调用的话,一般采用的事务处理方式是这样的,让我们看个实例:
假设核心系统中提供了转账服务,而自动柜员机(毫无疑问相对核心系统来讲是一个外围应用)和个人网银(也是一个外围应用)都需要提供转账服务,开发人员当然可以在自动柜员机和个人网银这两个应用中分别根据核心系统中转账的逻辑重新实现一遍转账逻辑,但这样做实在是挫了,如果转账逻辑有变动,那么则需要变动核心系统、自动柜员机和个人网银3个应用,这当然不是我们想要的;那我们再进一步思考下,既然核心系统已经提供了转账服务,那自动柜员机系统和个人网银系统就直接调用转账服务就好了,对,这样的方案解决了之前维护复杂的问题,但其他问题接踵而来,可能自动柜员机在转账过程中,除了要调用核心系统的转账服务外,还需要完成自身的一些操作,比如记录ATM操作日志等,那如果调用转账服务成功,而记录ATM操作日志失败,那这种情况下该怎么处理?首先可用从ATM操作角度,必须告诉客户这次ATM转账操作失败了(因为ATM操作日志没有记录),但调用核心系统的转账服务已经成功,也就意味着资金已经从A账户流转到B账户了,一个选择就是做一个反操作(事务补偿),从B账户转账同样的金额给A账户,这个选择有两个有待思考的地方:如果反操作失败怎么办?就算反操作成功但有了两笔转账的操作记录,如果将操作记录暴露给客户查询,那客户肯定会投诉,至少不爽吧;另一个选择那就是将客户操作ATM机上的转账放入一个事务中(也就是将核心系统调用转账服务和ATM记录操作日志放入同一个事务中处理),这样如果全部成功则一起提交,有一个失败则全部回退,可以解决上面提到的所有的麻烦。
最后一个方案在相比下效果是最好的,如果核心系统提供的转账服务是EJB服务,那么可以按照最后一个方案来实现(具体可以参考J2EE分布式事务管理中的跨服务器事务管理);如果核心系统提供的转账服务是web service服务(按照soap协议),在网上看到过有webservice的事务管理规范,可以让webservice之间的调用纳入全局事务的范畴,但目前不清楚was是否实现了对此的支持;如果是以一个servlet或网页的形式提供的转账服务,那么基本可以确定无法使用最后一个方案,根据实际情况再做选择,或许事务补偿的做法会是一个不错的选择。
- 大小: 15 KB
- 大小: 22.7 KB
- 大小: 41.8 KB
分享到:
相关推荐
以下是关于DRDS跨库事务文档的详细知识点。 ### 柔性事务 柔性事务是DRDS支持的一种事务模式,它实现了补偿型事务模型,其核心思想是将事务拆分为三个阶段:Try、Confirm和Cancel。 - **Try阶段**:尝试执行业务...
本文将深入探讨如何使用JTA来实现跨库事务,确保数据的一致性和完整性。 首先,我们需要理解JTA的核心概念。JTA提供了一个统一的API,使得应用程序可以透明地处理分布式事务,而无需关心底层的事务管理细节。它定义...
通过上述配置,我们可以看到如何在一个Spring应用程序中配置多个数据源,并使用JTA进行跨数据源的事务管理。这种配置方式非常灵活,可以适应复杂的企业级应用需求。在实际应用中,根据具体的应用场景和性能需求,还...
- **性能考量**:尽管自动化事务处理简化了分布式事务的管理,但在不需要跨多个资源管理器的情况下,手工事务处理往往具有更好的性能,因为它避免了与DTC(Distributed Transaction Coordinator)的不必要的交互。...
分布式事务是数据库事务处理的一种形式,它涉及在一个分布式计算环境中,跨多个数据库或计算节点的事务操作。分布式事务需满足ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性...
《Sharding-JDBC分布式事务应用》是一篇关于Java领域中如何利用Sharding-JDBC实现分布式事务的专题讨论。Sharding-JDBC是阿里巴巴开源的一款轻量级数据库中间件,它为Java开发者提供了一种透明化的数据分片解决方案...
在大规模的企业级应用中,常常涉及到多个数据库系统的交互,这就需要实现跨数据库的分布式事务处理。Java Transaction API(JTA)是Java平台上的标准,用于管理和协调跨多个数据源的分布式事务。JTA在J2EE环境中提供...
在大型应用中,由于数据的逻辑划分,往往需要在一个操作中同时更新多个数据库,这就需要用到跨库事务。MySQL支持分布式事务,主要通过X/Open XA(eXtended Architecture)协议来实现。 **什么是X/Open XA?** X/...
分布式事务的应用场景包括跨库事务和跨服务事务。跨库事务涉及一个应用操作多个数据库,而跨服务事务涉及一个服务调用多个服务或操作多个数据源。在这些场景中,事务模型如X/Open DTP模型被采用,它包括应用程序、...
该模型定义了应用程序如何使用事务管理器来协调跨多个资源管理器的分布式事务。具体组成部分包括: - **应用程序(Application)**:发起事务请求。 - **资源管理器(Resource Manager)**:管理特定类型的资源,如...
《基于Web服务的分布式应用事务处理探讨》这篇文章主要讨论了在网络环境下,如何利用Web服务进行分布式应用的事务处理。随着信息技术的快速发展,企业应用逐渐转向网络化,分布式应用成为主流。Web服务作为面向服务...
在.NET开发环境中,C#语言提供了强大的工具和框架来处理分布式事务,这使得开发者能够构建高效、可扩展的多数据库应用。本主题将深入探讨C#中的分布式事务处理类及事件使用,帮助你理解如何在分布式系统中实现一致性...
在现代企业级应用开发中,数据源的多样化和分布式事务的处理是常见需求。Spring Boot作为Java领域的一个轻量级框架,提供了强大的支持来解决这些问题。本教程将深入探讨如何在Spring Boot环境下实现多数据源操作及...
然而,对于多个数据源,我们需要更复杂的策略,比如使用JtaTransactionManager,它支持JTA(Java Transaction API),可以跨多个数据源进行事务管理。 接下来,我们讨论如何利用注解来实现多数据源事务。Spring的@...
本篇将深入探讨C#中的事务处理,以及如何在实践中应用这些知识。 首先,我们需要理解什么是事务。事务是数据库操作的一个逻辑单元,它包含一组相关的SQL语句,这些语句要么全部执行成功,要么全部回滚不执行。事务...
它提供了一整套服务,包括事务处理、安全、数据库访问、Web服务等,旨在简化多层架构的应用开发。通过使用J2EE,开发者可以构建后端服务,处理数据存储、业务逻辑和与其他系统的集成,同时保持与J2ME客户端的通信。 ...
JDBC事务局限于单个数据库连接,无法处理跨数据库的事务。 **JTA(Java Transaction API)事务**:JTA提供了一种更高级的事务管理,允许执行分布式事务,覆盖多个数据库。它需要一个支持X/Open XA协议的JDBC驱动,...
10. **智能分布式数据感知缓存**:在多节点环境中,IRIS能够感知并优化跨节点的数据处理,提高复杂查询性能和可靠性,并能在处理分析型工作负载时,不影响事务处理性能。 11. **集成机器学习(IntegratedML)**:这...
- **事务管理**:处理跨平台应用中的事务管理问题,以确保数据操作的原子性、一致性、隔离性和持久性(ACID属性)。 综上所述,跨平台云原生应用以其独特的特性和优势正在成为现代软件开发的标准之一。通过对这些核心...