网格环境下的补偿事务自动产生方法技术

技术编号:5015742 阅读:250 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及的是一种网络技术领域的网格环境下的补偿事务自动产生方法,补偿事务产生器始终监视着子事务的执行,首先根据影响事务系统状态的事件类型创建行级触发器,然后在子事务执行过程中,补偿事务产生器根据子事务中执行中的事件类型调用相应的行级触发器,自动产生补偿操作,最后当子事务提交时,将该子事务执行中所产生的补偿操作组合成补偿事务,这样就完成了自动产生补偿事务。本发明专利技术突破自治的网格服务提供者设置特殊补偿要求的限制,并大大减轻了开发事务性网格应用的工作量与复杂性。

【技术实现步骤摘要】

本专利技术涉及的是一种网络
的方法,具体是一种。
技术介绍
由于网络延迟和商业过程的交互,即使在没有并发事务的情况下,商业事务一般也会持续比较长的时间,因而也被称为长事务。为了减少资源被占用的时间,提高资源利用率和系统性能,组成长事务的子事务应该在全局事务结束之前提交并释放其占用的资源。如果某些子事务失败或用户需要选择提交结果时,对已提交子事务的撤销必须用执行相反任务的补偿事务来完成。 1987年Garcia-Molina等人在《Proceedings of International Conference onManagement of Data,ACM SIGMOD Record 16(3)》(ACM SIGMOD论文集16卷第3期)上发表了“Sagas(一种长事务模型)”,该文提出了一种减少长事务资源占用时间的方法,即将长事务拆分成一组预先定义好执行顺序的子事务Ti(1≤i≤n),并为每个子事务编写一个补偿事务Ci(1≤i≤n),每个补偿事务Ci能语义地撤消由Ti的提交对系统产生的影响。该方法中,每一个子事务被允许单独提交,并立即释放其占用的资源,以提高资源的利用率。基于该模型,有不少人对此作了进一步的改进。 经对现有技术文献的检索发现,Nodine等在《Proceedings of the Twenty-SeventhHawaii International Conference on System Sciences》(IEEE第27届Hawaii国际系统科学会议论文集)中基于Sagas的思想,提出了如何在多数据库事务中进行事务补偿,该方法通过步骤方法(step approach)将若干本地数据库集成为一个多数据库系统;每个本地数据库被封装成一组步骤(steps),每个步骤有一个关联的补偿步骤(compensating step),当事务需要补偿时,相关的补偿步骤被调用。上述方法的不足之处在于它们要求应用开发者在编写事务性应用程序时,必须为每一个子事务提供相应的补偿事务。这样的要求难以适应网格环境,主要原因是(1)网格服务具有自治性。服务提供者可以根据自身的商业模式设置特定的补偿要求,应用开发者在开发阶段无法知道在事务执行之前动态发现的网格服务具有哪些特殊的补偿要求。(2)大大增加了事务性网格应用的开发工作量与复杂性。与分布式数据库事务相比,网格服务涉及的操作及应用语义要复杂得多,编写补偿事务给可靠性网格应用的开发带来了很大的工程量和编程复杂性。
技术实现思路
本专利技术的目的在于克服上述现有技术中的不足,提供一种,它根据事务中的操作类型,在长事务执行过程中动态产生相应的补偿事务,为透明的事务补偿提供支持,同时,用户也可以使用自动产生的补偿事务对子事务的提交结果进行选择。 本专利技术是通过以下技术方案实现的,本专利技术包括如下步骤 首先根据影响事务系统状态的事件类型创建行级触发器; 然后在子事务执行过程中,补偿事务产生器根据子事务中执行中的事件类型调用相应的行级触发器,自动产生补偿操作; 最后当子事务提交时,将该子事务执行中所产生的补偿操作组合成补偿事务,这样就完成了自动产生补偿事务; 所述的补偿事务产生器始终监视着子事务的执行。 所述的补偿事务产生器,在事务执行过程中动态产生补偿事务,网格长事务由多个子事务组成,分别由处于不同网络节点上的网格服务来完成,补偿事务产生器被安装于实际执行子事务的每一个网格服务上。 所述的补偿事务,其补偿方法如下(1)在子事务从开始到被确认或撤销的整个过程中,补偿事务产生器监视各种影响系统状态的事件;(2)当影响系统状态的事件出现时,补偿事务产生器执行相应动作对于事务上下文消息,记录全局事务标识符和输入参数;预提交消息意味着事务中包含的数据修改操作开始被执行,因此,补偿事务产生器开始根据子事务中数据修改操作的类型调用相应的行级触发器,自动产生数据修改事件的补偿操作,并在子事务成功提交后使用定界符将补偿操作封装成补偿事务,然后存储在数据库中;对于撤销消息,调用存储在数据库中的补偿事务;对于确认消息,删除存储在数据库中的补偿事务。 所述的影响系统状态的事件,是指改变事务处理系统状态的各种外部操作事件,有三大类事务协调事件、数据修改事件和服务自定义事件 所述事务协调事件是指子事务从协调者收到了事务协调消息,包括事务上下文消息、预提交消息、撤销消息、确认消息,所述事务上下文消息用于协调者通知参加者事务开始、事务标识符、事务类型、协调者网络地址、事务执行有效期信息;所述预提交消息用于协调者通知参加者执行与提交子事务;所述确认和撤销消息分别用于用户确认和撤消已经提交的子事务; 所述数据修改事件是指子事务中包含的改变数据库中数据的操作,本专利技术针对关系型数据库,因而数据修改操作包括插入、删除和更新; 所述服务自定义事件是指网格服务提供者根据自身需要设置的对撤销订单的用户收到违约金的要求。 所述的行级触发器,是指基于数据库的触发器机制创建的针对数据修改事件而产生语义相反的补偿操作的三个存储过程模块,分别用于补偿更新、插入、删除三种语句,它们是补偿事务产生器的子模块。从功能上看,它们是补偿事务产生器的一部分。使用行级触发器,可以根据数据表中行的标识符方便地对被修改的所有行进行补偿,而不需要逐行匹配记录,从而加快补偿操作的产生速度,提高系统性能。 行级触发器的工作过程具体如下 行级触发器创建过程需要提供数据表的名字,根据名字可从用户表视图中获得数据表的结构信息,包括所有字段名称以及字段的数据类型,因为数据库的USER_TAB_COLUMNS视图提供了静态数据词典视图,它描述了视图的相关结构信息,每个数据表产生create_insert_trigger,create_update_trigger,create_delete_trigger三个存储过程,它们分别用于补偿插入、更新、删除语句,三个存储过程的输入参数都是其服务的数据表名称,当被调用时,它们产生补偿插入、更新、删除的补偿操作。 行级触发器负责动态产生数据修改事件的补偿操作,当数据修改事件出现时,补偿事务产生器根据事件类型调用相应的行级触发器,行级触发器生成具体的补偿操作,补偿操作是在子事务的执行过程中动态产生的,假如子事务失败了,则在该子事务执行过程中所产生的所有补偿操作也被放弃; 具体方法是,在插入事件出现时,产生相应的删除语句将插入的记录删除;在删除事件出现时,产生相应的插入语句将删除的记录再次插入;在更新事件出现时,需要将被改变的记录恢复成更新前的数据。在产生补偿操作的过程中,行级触发器通过数据表的结构信息,判断字段的数据类型;使用字符串拼接的方式,动态产生补偿操作。对于不同的数据类型,处理方式有所不同对数值型的数据,直接与补偿操作片断的字符常量连接;对字符串型的数据,则需要在这个值之前和之后,分别拼接一个单引号,作为补偿操作中字符串直接量的开始与中止符;对日期时间型的数据,需要首先将值转化为字符串,然后在产生的补偿操作中利用TO_DATE函数将字符串值重新转换为日期时间。 在插入事件出现时,行级触发器产生相应的删除语句将插入的记录删除;在删除事件出现时,行级触发器产本文档来自技高网
...

【技术保护点】
一种网格环境下的补偿事务自动产生方法,其特征在于,包括如下步骤:首先根据影响事务系统状态的事件类型创建行级触发器;然后在子事务执行过程中,补偿事务产生器根据子事务中执行中的事件类型调用相应的行级触发器,自动产生补偿操作;最后当子事务提交时,将该子事务执行中所产生的补偿操作组合成补偿事务,这样就完成了自动产生补偿事务;所述的补偿事务产生器始终监视着子事务的执行。

【技术特征摘要】

【专利技术属性】
技术研发人员:唐飞龙过敏意唐灿沈耀
申请(专利权)人:上海交通大学
类型:发明
国别省市:31[中国|上海]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1