本发明专利技术公开了一种智能启用分布式事务的方法,属于计算机领域。该方法对微软NET的分布式事务接口进行透明封装,多个数据访问层协同工作时,如果后台数据库为同一实例时,自动启用数据库事务,若是多个数据库实例,则自动启用分布式事务,并且把已经启用的数据库事务与分布式事务融合。与现有技术相比,本发明专利技术的智能启用分布式事务的方法具有结构清晰、应用方便、兼容标准事务接口等特点,广泛应用于分布式数据访问架构之中,具有很好的推广应用价值。
【技术实现步骤摘要】
智能启用分布式事务的方法
本专利技术涉及一种计算机技术,具体地说是一种智能启用分布式事务的方法。
技术介绍
事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。对于一个分布式事务(DistributedTransaction)来讲,事务的参与者分布于网络环境中的不同的节点。参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。由于分布式事务的逻辑更加复杂,涉及到更多组件。微软.NET框架对分布式事务提供了支持,包括显式事务、隐式事务、显式分布式事务、隐式分布式事务。微软的分布式事务基于MSDTC组件。该组件的稳定性、可用性受环境影响程度较高。在一个业务软件系统中,包含许多业务组件,在运行期,这些业务组件可以对应不同的数据访问层组件实例。在一个业务处理中,这些业务组件按照一定的流程进行编排。这样多个数据访问层实例就需要协同工作,保证数据的完整、一致。要实现这个目标,数据库本地事务就无法满足需求。因为每个组件都处于一个“隐式”的调用环境中,组件的数据访问层不能与特定的调用场景耦合。因此必须采用分布式事务才能达到目标。这样,就带来一个问题:如果所有的组件的访问层都与同一个数据库通讯,那么实际的分布式事务可以简化为数据库、应用服务器两个参与者。TransactionScope在文档中宣称只在“必要”情况下才提升事务级别(多数据库时才使用分布式事务,如果是同一个数据库,最好使用SqlTransaction),但是事实上不是这样。在TransactionScope内,只要你用不同的SqlConnection对象操作DB一次以上(不管你的目标是不是同一个实例、同一个库),都会提升事务级别到分布式事务,无疑会大大增加系统负担,降低服务器性能。
技术实现思路
本专利技术的技术任务是针对上述现有技术的不足,提供智能启用分布式事务的方法。利用该方法可以有效解决在单数据库场景下,因为使用分布式事务而带来的配置、部署的复杂性,并提升系统性能。本专利技术的技术任务是按以下方式实现的:智能启用分布式事务的方法,对微软.NET的分布式事务接口进行透明封装,多个数据访问层协同工作时,如果后台数据库为同一实例时,自动启用数据库事务,若是多个数据库实例,则自动启用分布式事务,并且把已经启用的数据库事务与分布式事务融合。上述方法的具体实现方法包含数据库连接管理及分布式事务代理两部分。1)数据库连接管理:实现一个数据库连接工厂GSPDatabaseFactory,以数据库连接工厂GSPDatabaseFactory实现对数据源创建的管理,创建数据库连接成功后放入内部连接池;数据库连接工厂GSPDatabaseFactory根据连接字符串形成连接信息字段列表,再根据当前线程上下文Token形成一个索引值,根据这个索引值在内部连接池中检索可用的数据库连接;数据库连接工厂GSPDatabaseFactory的GetDatabase方法返回一个接口IGSPDatabase有执行SQL语句的接口方法和开启、关闭数据库的方法,在不启用分布式事务的情况下,由数据库连接工厂GSPDatabaseFactory智能管理数据库连接的开启和关闭;2)分布式事务代理:实现一个虚拟分布式事务协调器:VirtualDTC,初次调用下述代码,初始化当前调用上下文中的虚拟分布式事务作用域,VirtualTransactionScopescope1=newVirtualTransactionScope(TransactionScopeOption.Required);当前调用堆栈继续调用上面代码,根据TransactionScopeOption参数的值来确定虚拟分布式事务如何融合,虚拟分布式事务协调器记录当前管理的数据库连接,如果后续创建的数据库连接与连接池中的连接信息相同,则直接使用连接池中的连接,接着比较当前正在使用的数据库连接是否就是匹配的连接:如果相同,并且事务属性是Required,则前后两次数据库连接进行合并,并且增加引用计数;外部调用代码后续试图关闭数据库时,由数据库连接管理器负责减少引用计数;如果连接信息相同,但是事务属性是RequiredNew,则内部创建一个显式的分布式事务,并且把管理的内部数据库连接登记到该显式事务中;如果与堆栈上连接信息不同,则直接启动显式分布式事务,并把现有数据库连接登记到分布式事务。与现有技术相比,本专利技术的智能启用分布式事务的方法解决了在单一数据库的环境下,由于各个数据访问层为了保证数据的一致,而必须使用分布式事务带来的性能损失问题。在升级为多数据库实例时,各个数据访问层的事务处理无需任何修改,即可自动启用分布式事务。这样,在单一数据库部署架构下,就大大降低了对MSDTC组件的依赖,大大提高系统的稳定性、可靠性。附图说明附图1是本专利技术智能启用分布式事务的方法中虚拟分布式事务的算法逻辑图。具体实施方式参照说明书附图以具体实施例对本专利技术的智能启用分布式事务的方法作以下详细地说明。实施例:本专利技术智能启用分布式事务的方法的具体实现方案包括:1)数据库连接管理、2)分布式事务代理。1、数据库连接管理。通常的数据库连接创建代码如下:DBConnectionmyConnection=newSqlConnection(myConnString);本方法实现一个数据库连接工厂GSPDatabaseFactory,实现对数据源创建的管理,创建数据库连接成功后放入内部连接池。IGSPDatabase=GSPDatabaseFactory.GetDatabase(myConnString);这个GSPDatabaseFactory根据连接字符串形成连接信息字段列表,再根据当前线程上下文Token形成一个索引值,根据这个索引值在内部连接池中检索可用的数据库连接。工厂类GSPDatabaseFactory的GetDatabase方法返回一个接口IGSPDatabase有执行SQL语句的接口方法和开启、关闭数据库的方法。在不启用分布式事务的情况下,由GSPDatabaseFactory智能管理数据库连接的开启和关闭。2、分布式事务代理。分布式事务代理实现一个虚拟分布式事务协调器:VirtualDTC。初次在调用下面代码,初始化当前调用上下文中的虚拟分布式事务作用域。VirtualTransactionScopescope1=newVirtualTransactionScope(TransactionScopeOption.Required);如附图1所示,当前调用堆栈继续调用上面代码,则会根据TransactionScopeOption参数的值来确定虚拟分布式事务如何融合。虚拟分布式事务协调器记录当前管理的数据库连接,如果后续创建的数据库连接与连接池中的连接信息相同,则直接使用连接池中的连接,接着比较当前正在使用的数据库连接是否就是匹配的连接:如果相同,并且事务属性是Required,则前后两次数据库连接进行合并,并且增加引用计数。外部调用代码后续试图关闭数据库时,由数据库连接管理器负责减少引用计数;本文档来自技高网...

【技术保护点】
智能启用分布式事务的方法,其特征在于:对微软.NET的分布式事务接口进行透明封装,多个数据访问层协同工作时,如果后台数据库为同一实例时,自动启用数据库事务,若是多个数据库实例,则自动启用分布式事务,并且把已经启用的数据库事务与分布式事务融合。
【技术特征摘要】
1.智能启用分布式事务的方法,其特征在于:对微软.NET的分布式事务接口进行透明封装,多个数据访问层协同工作时,如果后台数据库为同一实例时,自动启用数据库事务,若是多个数据库实例,则自动启用分布式事务,并且把已经启用的数据库事务与分布式事务融合,具体实现方法包含数据库连接管理及分布式事务代理两部分:数据库连接管理:实现一个数据库连接工厂GSPDatabaseFactory,以数据库连接工厂GSPDatabaseFactory实现对数据源创建的管理,创建数据库连接成功后放入内部连接池;数据库连接工厂GSPDatabaseFactory根据连接字符串形成连接信息字段列表,再根据当前线程上下文Token形成一个索引值,根据这个索引值在内部连接池中检索可用的数据库连接;数据库连接工厂GSPDatabaseFactory的GetDatabase方法返回一个接口IGSPDatabase有执行SQL语句的接口方法和开启、关闭数据库的方法,在不启用分布式事务的情况下,由数据库连接工厂GSPDatabaseFactory智能管理数据库连接的开启和关闭;分布式事务代理:实现...
【专利技术属性】
技术研发人员:赵启杰,
申请(专利权)人:浪潮集团山东通用软件有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。