[发明专利]智能启用分布式事务的方法有效
申请号: | 201210408530.0 | 申请日: | 2012-10-24 |
公开(公告)号: | CN102945264B | 公开(公告)日: | 2017-02-15 |
发明(设计)人: | 杨良;王延东 | 申请(专利权)人: | 浪潮通用软件有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 济南信达专利事务所有限公司37100 | 代理人: | 姜明 |
地址: | 250100 山东*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 智能 启用 分布式 事务 方法 | ||
技术领域
本发明涉及一种计算机技术,具体地说是一种智能启用分布式事务的方法。
背景技术
事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。对于一个分布式事务(Distributed Transaction)来讲,事务的参与者分布于网络环境中的不同的节点。参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。
由于分布式事务的逻辑更加复杂,涉及到更多组件。微软.NET框架对分布式事务提供了支持,包括显式事务、隐式事务、显式分布式事务、隐式分布式事务。微软的分布式事务基于MSDTC组件。该组件的稳定性、可用性受环境影响程度较高。
在一个业务软件系统中,包含许多业务组件,在运行期,这些业务组件可以对应不同的数据访问层组件实例。在一个业务处理中,这些业务组件按照一定的流程进行编排。这样多个数据访问层实例就需要协同工作,保证数据的完整、一致。要实现这个目标,数据库本地事务就无法满足需求。因为每个组件都处于一个“隐式”的调用环境中,组件的数据访问层不能与特定的调用场景耦合。因此必须采用分布式事务才能达到目标。这样,就带来一个问题:如果所有的组件的访问层都与同一个数据库通讯,那么实际的分布式事务可以简化为数据库、应用服务器两个参与者。
TransactionScope在文档中宣称只在“必要”情况下才提升事务级别(多数据库时才使用分布式事务,如果是同一个数据库,最好使用SqlTransaction),但是事实上不是这样。在TransactionScope内,只要你用不同的SqlConnection对象操作DB一次以上(不管你的目标是不是同一个实例、同一个库),都会提升事务级别到分布式事务,无疑会大大增加系统负担,降低服务器性能。
发明内容
本发明的技术任务是针对上述现有技术的不足,提供智能启用分布式事务的方法。利用该方法可以有效解决在单数据库场景下,因为使用分布式事务而带来的配置、部署的复杂性,并提升系统性能。
本发明的技术任务是按以下方式实现的:智能启用分布式事务的方法,对微软.NET的分布式事务接口进行透明封装,多个数据访问层协同工作时,如果后台数据库为同一实例时,自动启用数据库事务,若是多个数据库实例,则自动启用分布式事务,并且把已经启用的数据库事务与分布式事务融合。
上述方法的具体实现方法包含数据库连接管理及分布式事务代理两部分。
1)数据库连接管理:
实现一个数据库连接工厂GSPDatabaseFactory,以数据库连接工厂GSPDatabaseFactory实现对数据源创建的管理,创建数据库连接成功后放入内部连接池;
数据库连接工厂GSPDatabaseFactory根据连接字符串形成连接信息字段列表,再根据当前线程上下文Token形成一个索引值,根据这个索引值在内部连接池中检索可用的数据库连接;
数据库连接工厂GSPDatabaseFactory的GetDatabase方法返回一个接口IGSPDatabase有执行SQL语句的接口方法和开启、关闭数据库的方法,在不启用分布式事务的情况下,由数据库连接工厂GSPDatabaseFactory智能管理数据库连接的开启和关闭;
2)分布式事务代理:
实现一个虚拟分布式事务协调器:VirtualDTC,初次调用下述代码,初始化当前调用上下文中的虚拟分布式事务作用域,
VirtualTransactionScope scope1 = new
VirtualTransactionScope(TransactionScopeOption.Required);
当前调用堆栈继续调用上面代码,根据TransactionScopeOption参数的值来确定虚拟分布式事务如何融合,虚拟分布式事务协调器记录当前管理的数据库连接,如果后续创建的数据库连接与连接池中的连接信息相同,则直接使用连接池中的连接,接着比较当前正在使用的数据库连接是否就是匹配的连接:如果相同,并且事务属性是Required,则前后两次数据库连接进行合并,并且增加引用计数;外部调用代码后续试图关闭数据库时,由数据库连接管理器负责减少引用计数;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮通用软件有限公司,未经浪潮通用软件有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210408530.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种无纸化安全教学的实现方法
- 下一篇:一种基于8路服务器的散热除尘方法