法律状态公告日
法律状态信息
法律状态
2018-06-01
专利权人的姓名或者名称、地址的变更 IPC(主分类):H04L29/06 变更前: 变更后: 申请日:20061013
专利权人的姓名或者名称、地址的变更
2012-09-19
专利权的转移 IPC(主分类):H04L29/06 变更前: 变更后: 登记生效日:20120816 申请日:20061013
专利申请权、专利权的转移
2009-05-27
授权
授权
2007-06-13
实质审查的生效
实质审查的生效
2007-04-25
公开
公开
技术领域
本发明涉及Web服务领域的事务处理,具体涉及Web服务业务活动协同方法。
背景技术
将Web服务组合成新的业务活动时,需要Web服务事务处理技术的支持来保证结果的一致性。Web服务事务处理通过协同保证了Web服务执行结果的一致性,让构成业务活动的各个Web服务协同工作是Web服务事务处理的核心技术之一。Web服务事务分为原子事务和业务活动两类,WS-BA(参见引证文件)是一种用于协同Web服务业务活动的协同协议。WS-BA考虑了参与者运行出错的情况,但还不够全面,只涉及到参与者处于Active和Compensating状态时出错的情况。实际上,无论是参与者、协调者,无论它们处于什么状态,都有可能发生结点或通信等故障。在出现结点或通信故障时,为了提高WS-BA实际应用的容错能力,本发明对WS-BA在容错方面进行了扩展,分别通过内部事件F和T来触发协调者和参与者根据日志项进行状态恢复和报文重发处理。容错的Web服务业务活动协同方法包括容错的参与者完成协同方法FBAPC(Fault-tolerance BusinessAgreement with Participant Completion)和容错的协调者完成协同方法FBACC(Fault-tolerance Business Agreement with Coordinator Completion)。FBAPC是由参与者向协调者发送Completed报文,来触发协同结果一致性确认;而FBACC是由协调者发送Complete报文,来触发协同结果一致性确认。
在Web服务领域,通过工作流等技术将多个Web服务组合成新的业务活动,业务活动采用FBAPC或FBACC协同方法,来保证Web服务的执行结果的一致性。在业务活动协同过程中,即使出现结点或通信故障,FBAPC和FBACC也能保证结果一致性。
引证文件:由IBM和Microsoft等公司制定的WS-BusinessActivity(版本1.0),网址为:
http://www-128.ibm.com/developerworks/library/specification/ws-tx/#atom,发布日期为2005年8月。
发明内容
技术问题:本发明的目的在于提供一种容错的万维网服务业务活动协同方法,在协同Web服务业务活动的过程中,当出现结点故障或通信故障时,能保证协同结果一致性。
技术方案:本发明包括FBAPC和FBACC这两个协同方法,协同方法涉及协调者和参与者这两个参与方。FBAPC与FBACC相似,区别在于FBAPC是由参与者向协调者发送Completed报文,来触发协同结果一致性确认;而FBACC是由协调者发送Complete报文,来触发协同结果一致性确认。
FBAPC和FBACC分别由一个四元组(S,E,A1,A2)组成。其中,S表示协调者和参与者的状态集;E表示事件集;A1表示协调者协同过程;A2表示参与者协调协同过程。
本发明的容错的万维网服务业务活动协同方法按如下的步骤进行:
1.)在协同开始时,协调者和参与者被初始化为活动状态;
2.)协调者和参与者的状态集为:{活动状态,取消处理状态,取消处理状态2,退出处理状态,出错处理状态,出错处理状态2,完成处理状态,已完成状态,结束处理状态,补偿处理状态,结束状态};
3.)协调者和参与者的协同过程通过事件驱动,有三种类型的事件:①报文到达事件,②报文发送事件,③内部事件:包括定时器触发的事件T、系统重新启动触发的事件F;
4.)到达和发送的报文集为:{结束报文,取消报文,补偿报文,完成报文,已出错报文,已退出报文,已完成报文,出错报文,已补偿报文,已结束报文,已取消报文,退出报文,重发报文};
5.)当协调者报文到达事件发生时,FBAPC的协调者根据接收的报文内容分类处理。具体操作为:a.若为退出报文:若协调者状态为活动状态或取消处理状态,则写退出处理状态日志项,设置协调者状态为退出处理状态;若协调者状态为结束状态,则向参与者发送已退出报文;b.若为已完成报文:若协调者状态为活动状态或取消处理状态,则写已完成状态日志项,设置协调者状态为已完成状态;若协调者状态为结束处理状态,则向参与者发送结束报文;若协调者状态为补偿处理状态,则向参与者发送补偿报文;c.若为出错报文:若协调者状态为活动状态或取消处理状态,则写出错处理状态日志项,设置协调者状态为出错处理状态;若协调者状态为补偿处理状态,则写出错处理状态2日志项,设置协调者状态为出错处理状态2;若协调者状态为结束状态,则向参与者发送已出错报文;d.若为已取消报文:若协调者状态为取消处理状态,则写结束状态日志项,设置协调者状态为结束状态;e.若为已结束报文:若协调者状态为结束处理状态,则写结束状态日志项,设置协调者状态为结束状态;f.若为已补偿报文:若协调者状态为补偿处理状态,则写结束状态日志项,设置协调者状态为结束状态;g.若为重发报文:若协调者状态为取消处理状态,则向参与者发送取消报文;
6.)当协调者报文到达事件发生时,FBACC的协调者根据接收的报文内容分类处理。具体操作为:a.若为退出报文:若协调者状态为活动状态或取消处理状态或取消处理状态2或完成处理状态,则写退出处理状态日志项,设置协调者状态为退出处理状态;若协调者状态为结束状态,则向参与者发送已退出报文;b.若为已完成报文:若协调者状态为完成处理状态或取消处理状态2,则写已完成状态日志项,设置协调者状态为已完成状态;若协调者状态为结束处理状态,则向参与者发送结束报文;若协调者状态为补偿处理状态,则向参与者发送补偿报文;c.若为出错报文:若协调者状态为活动状态或取消处理状态或取消处理状态2或完成处理状态,则写出错处理状态日志项,设置协调者状态为出错处理状态;若协调者状态为补偿处理状态,则写出错处理状态2日志项,设置协调者状态为出错处理状态2;若协调者状态为结束状态,则向参与者发送已出错报文;d.若为已取消报文:若协调者状态为取消处理状态或取消处理状态2,则:写结束状态日志项,设置协调者状态为结束状态;e.若为已结束报文:若协调者状态为结束处理状态,则写结束状态日志项,设置协调者状态为结束状态;f.若为已补偿报文:若协调者状态为补偿处理状态,则写结束状态日志项,设置协调者状态为结束状态;g.若为重发报文:若协调者状态为取消处理状态或取消处理状态2,则向参与者发送取消报文;若协调者状态为完成处理状态,则向参与者发送完成报文;
7.)当参与者报文到达事件发生时,FBAPC的参与者根据接收的报文内容分类处理。具体操作为:a.若为取消报文:若参与者状态为活动状态,则写取消处理状态日志项,设置参与者状态为取消处理状态;若参与者状态为已完成状态,则向协调者发送已完成报文;若参与者状态为出错处理状态,则向协调者发送出错报文;若参与者状态为退出处理状态,则向协调者发送退出报文;若参与者状态为结束状态,则向协调者发送已取消报文;b.若为结束报文:若参与者状态为已完成状态,则写结束处理状态日志项,设置参与者状态为结束处理状态;若参与者状态为结束状态,则向协调者发送已结束报文;c.若为补偿报文:若参与者状态为已完成状态,则写补偿处理状态日志项,设置参与者状态为补偿处理状态;若参与者状态为出错处理状态2,则向协调者发送出错报文;若参与者状态为结束状态,则向协调者发送已补偿报文;d.若为已出错报文:若参与者状态为出错处理状态或出错处理状态2,则写结束状态日志项,设置参与者状态为结束状态;e.若为已退出报文:若参与者状态为退出处理状态,则写结束状态日志项,设置参与者状态为结束状态;f.若为重发报文:若参与者状态为已完成状态,则向协调者发送已完成报文;若参与者状态为出错处理状态,则向协调者发送出错报文;若参与者状态为退出处理状态,则向协调者发送退出报文;
8.)当参与者报文到达事件发生时,FBACC的参与者根据接收的报文内容分类处理。具体操作为:a.若为取消报文:若参与者状态为活动状态或完成处理状态,则写取消处理状态日志项,设置参与者状态为取消处理状态;若参与者状态为已完成状态,则向协调者发送已完成报文;若参与者状态为出错处理状态,则向协调者发送出错报文;若参与者状态为退出处理状态,则向协调者发送退出报文;若参与者状态为结束状态,则向协调者发送已取消报文;b.若为结束报文:若参与者状态为已完成状态,则写结束处理状态日志项,设置参与者状态为结束处理状态;若参与者状态为结束状态,则向协调者发送已结束报文;c.若为补偿报文:若参与者状态为已完成状态,则写补偿处理状态日志项,设置参与者状态为补偿处理状态;若参与者状态为出错处理状态2,则向协调者发送出错报文;若参与者状态为结束状态,则向协调者发送已补偿报文;d.若为已出错报文:若参与者状态为出错处理状态或出错处理状态2,则写结束状态日志项,设置参与者状态为结束状态;e.若为已退出报文:若参与者状态为退出处理状态,则写结束状态日志项,设置参与者状态为结束状态;f.若为重发报文:若参与者状态为出错处理状态,则向协调者发送出错报文;若参与者状态为退出处理状态,则向协调者发送退出报文;g.若为完成报文:若参与者状态为活动状态,则写完成处理状态日志项,设置参与者状态为完成处理状态;若参与者状态为已完成状态,则向协调者发送已完成报文;若参与者状态为出错处理状态,则向协调者发送出错报文;若参与者状态为退出处理状态,则向协调者发送退出报文;
9.)当协调者报文发送事件发生时,FBAPC的协调者根据发送的报文内容分类处理。具体操作为:a.若为取消报文:若协调者状态为活动状态,则写取消处理状态日志项,设置协调者状态为取消处理状态,设置定时器;b.若为结束报文:若协调者状态为已完成状态,则写结束处理状态日志项,设置协调者状态为结束处理状态,设置定时器;c.若为补偿报文:若协调者状态为已完成状态,则写补偿处理状态日志项,设置协调者状态为补偿处理状态,设置定时器;d.若为已出错报文:若协调者状态为出错处理状态,则写结束状态日志项,设置协调者状态为结束状态,设置定时器;e.若为已退出报文:若协调者状态为退出处理状态,则写结束状态日志项,设置协调者状态为结束状态,设置定时器;
10.)当协调者报文发送事件发生时,FBACC的协调者根据发送的报文内容分类处理。具体操作为:a.若为取消报文:若协调者状态为活动状态,则写取消处理状态日志项,设置协调者状态为取消处理状态,设置定时器;若协调者状态为完成处理状态,则写取消处理状态2日志项,设置协调者状态为取消处理状态2,设置定时器;b.若为结束报文:若协调者状态为已完成状态,则写结束处理状态日志项,设置协调者状态为结束处理状态,设置定时器;c.若为补偿报文:若协调者状态为已完成状态,则写补偿处理状态日志项,设置协调者状态为补偿处理状态,设置定时器;d.若为已出错报文:若协调者状态为出错处理状态,则写结束状态日志项,设置协调者状态为结束状态,设置定时器;e.若为已退出报文:若协调者状态为退出处理状态,则写结束状态日志项,设置协调者状态为结束状态,设置定时器;f.若为完成报文:若协调者状态为活动状态,则写完成处理状态日志项,设置协调者状态为完成处理状态,设置定时器;
11.)当参与者报文发送事件发生时,FBAPC的参与者根据发送的报文内容分类处理。具体操作为:a.若为退出报文:若参与者状态为活动状态,则写退出处理状态日志项,设置参与者状态为退出处理状态,设置定时器;b.若为已完成报文:若参与者状态为活动状态,则记录已完成状态日志项,设置参与者状态为已完成状态,设置定时器;c.若为出错报文:若参与者状态为活动状态,则写出错处理状态日志项,设置参与者状态为出错处理状态,设置定时器;若参与者状态为补偿处理状态,则写出错处理状态2日志项,设置参与者状态为出错处理状态2,设置定时器;d.若为已取消报文:若参与者状态为取消处理状态,则写结束状态日志项,设置参与者状态为结束状态,设置定时器;e.若为已结束报文:若参与者状态为结束处理状态,则写结束状态日志项,设置参与者状态为结束状态,设置定时器;f.若为已补偿报文:若参与者状态为补偿处理状态,则写结束状态日志项,设置参与者状态为结束状态,设置定时器;
12.)当参与者报文发送事件发生时,FBACC的参与者根据发送的报文内容分类处理。具体操作为:a.若为退出报文:若参与者状态为活动状态或完成处理状态,则写退出处理状态日志项,设置参与者状态为退出处理状态,设置定时器;b.若为已完成报文:若参与者状态为完成处理状态,则记录已完成状态日志项,设置参与者状态为已完成状态,设置定时器;c.若为出错报文:若参与者状态为活动状态或完成处理状态,则写出错处理状态日志项,设置参与者状态为出错处理状态,设置定时器;若参与者状态为补偿处理状态,则写出错处理状态2日志项,设置参与者状态为出错处理状态2,设置定时器;d.若为已取消报文:若参与者状态为取消处理状态,则写结束状态日志项,设置参与者状态为结束状态,设置定时器;e.若为已结束报文:若参与者状态为结束处理状态,则写结束状态日志项,设置参与者状态为结束状态,设置定时器;f.若为已补偿报文:若参与者状态为补偿处理状态,则写结束状态日志项,设置参与者状态为结束状态,设置定时器;
13.)结点故障恢复后,系统重新启动时,触发内部事件F;
14.)协调者和参与者在发送报文后,需要得到对方的应答时,通过设置定时器来判断是否发生通信故障;如果定时器触发的内部事件T发生,则说明可能由于通信故障,引起报文丢失,导致在规定的时间内未收到对方的应答;
15.)当内部事件即定时器触发的事件T或系统重新启动触发的事件F发生时,FBAPC的协调者根据日志项进行状态恢复和报文重发等处理。具体操作为:如果日志项为空,则向参与者发送重发报文,协调者状态恢复为活动状态;如果日志项为取消处理状态,则向参与者发送取消报文,协调者状态恢复为取消处理状态,设置定时器;如果日志项为退出处理状态,则协调者状态恢复为退出处理状态;如果日志项为出错处理状态,则协调者状态恢复为出错处理状态;如果日志项为出错处理状态2,则协调者状态恢复为出错处理状态2;如果日志项为已完成状态,则协调者状态恢复为已完成状态;如果日志项为结束处理状态,则向参与者发送结束报文,协调者状态恢复为结束处理状态,设置定时器;如果日志项为补偿处理状态,则向参与者发送补偿报文,协调者状态恢复为补偿处理状态,设置定时器:如果日志项为结束状态,则如果是系统重新启动触发的事件F,则协调者状态恢复为结束状态,如果是定时器触发的事件T,则结束。
16.)当内部事件(定时器触发的事件T或系统重新启动触发的事件F)发生时,FBACC的协调者根据日志项进行状态恢复和报文重发等处理。具体操作为:如果日志项为空,则向参与者发送重发报文,协调者状态恢复为活动状态;如果日志项为取消处理状态,则向参与者发送取消报文,协调者状态恢复为取消处理状态,设置定时器;如果日志项为退出处理状态,则协调者状态恢复为退出处理状态;如果日志项为出错处理状态,则协调者状态恢复为出错处理状态;如果日志项为出错处理状态2,则协调者状态恢复为出错处理状态2;如果日志项为已完成状态,则协调者状态恢复为已完成状态;如果日志项为结束处理状态,则向参与者发送结束报文,协调者状态恢复为结束处理状态,设置定时器;如果日志项为补偿处理状态,则向参与者发送补偿报文,协调者状态恢复为补偿处理状态,设置定时器;如果日志项为完成处理状态,则向参与者发送完成报文,协调者状态恢复为完成处理状态,设置定时器;如果日志项为取消处理状态2,则向参与者发送取消报文,协调者状态恢复为取消处理状态2,设置定时器;如果日志项为结束状态,则如果是系统重新启动触发的事件F,则协调者状态恢复为结束状态,如果是定时器触发的事件T,则结束。
17.)当内部事件(定时器触发的事件T或系统重新启动触发的事件F)发生时,FBAPC的参与者根据日志项进行状态恢复和报文重发等处理。具体操作为:如果日志项为空,则向协调者发送重发报文,参与者状态恢复为活动状态;如果日志项为已完成状态,则向协调者发送已完成报文,参与者状态恢复为已完成状态,设置定时器;如果日志项为出错处理状态,则向协调者发送出错报文,参与者状态恢复为出错处理状态,设置定时器;如果日志项为出错处理状态2,则向协调者发送出错报文,参与者状态恢复为出错处理状态2,设置定时器;如果日志项为退出处理状态,则向协调者发送退出报文,参与者状态恢复为退出处理状态,设置定时器:如果日志项为取消处理状态,则参与者状态恢复为取消处理状态;如果日志项为结束处理状态,则参与者状态恢复为结束处理状态;如果日志项为补偿处理状态,则参与者状态恢复为补偿处理状态;如果日志项为结束状态,则如果是系统重新启动触发的事件F,则参与者状态恢复为结束状态,如果是定时器触发的事件T,则结束。
18.)当内部事件(定时器触发的事件T或系统重新启动触发的事件F)发生时,FBACC的参与者根据日志项进行状态恢复和报文重发等处理。具体操作为:如果日志项为空,则向协调者发送重发报文,参与者状态恢复为活动状态;如果日志项为已完成状态,则向协调者发送已完成报文,参与者状态恢复为已完成状态,设置定时器;如果日志项为出错处理状态,则向协调者发送出错报文,参与者状态恢复为出错处理状态,设置定时器;如果日志项为出错处理状态2,则向协调者发送出错报文,参与者状态恢复为出错处理状态2,设置定时器;如果日志项为退出处理状态,则向协调者发送退出报文,参与者状态恢复为退出处理状态,设置定时器;如果日志项为取消处理状态,则参与者状态恢复为取消处理状态;如果日志项为结束处理状态,则参与者状态恢复为结束处理状态;如果日志项为补偿处理状态,则参与者状态恢复为补偿处理状态;如果日志项为完成处理状态,则参与者状态恢复为完成处理状态;如果日志项为结束状态,则如果是系统重新启动触发的事件F,则参与者状态恢复为结束状态,如果是定时器触发的事件,则结束。
附图说明
图1a是本发明的FBAPC协调者协同和报文到达事件处理流程图,
图1b是本发明的FBAPC协调者报文到达事件和报文发送事件处理流程图,
图1c是本发明的FBAPC协调者内部事件处理流程图,
图2a是本发明的FBAPC参与者协同和报文到达事件处理流程图,
图2b是本发明的FBAPC参与者报文到达事件和报文发送事件处理流程图,
图2c是本发明的FBAPC参与者报文发送事件和内部事件处理流程图,
图3a是本发明的FBACC协调者协同和报文到达事件处理流程图,
图3b是本发明的FBACC协调者报文到达事件和报文发送事件处理流程图,
图3c是本发明的FBACC协调者内部事件处理流程图,
图4a是本发明的FBACC参与者协同和报文到达事件处理流程图,
图4b是本发明的FBACC参与者报文到达事件和报文发送事件处理流程图,
图4c是本发明的FBACC参与者报文发送事件和内部事件处理流程图,
图5是本发明的FBAPC协调者状态图,
图6是本发明的FBAPC参与者状态图,
图7是本发明的FBACC协调者状态图,
图8是本发明的FBACC参与者状态图,
在图1a~图4e中,ev表示事件,MsgArrival表示报文到达事件,MsgSend表示报文发送事件,F表示在系统故障后,系统重新启动触发的事件,T表示定时器触发的事件,coordinator_state表示协调者状态,participant_state表示参与者状态,msg表示报文内容,NULL表示日志项为空。
在图5~图8中,有三种类型的弧线,分别为:
→:表示协调者发送的报文,
表示参与者发送的报文,
表示协调者或参与者内部产生的事件。
具体实施方式
一.状态集
FBAPC和FBACC中的状态集为:{Active,Canceling,Canceling2,Exiting,Faulting,Faulting2,Completing,Completed,Closing,Compensating,Ended}。其中,Active:活动状态,Canceling:取消处理状态,Canceling2:取消处理状态2,Exiting:退出处理状态,Faulting:出错处理状态,Faulting2:出错处理状态2,Completing:完成处理状态,Completed:已完成状态,Closing:结束处理状态,Compensating:补偿处理状态,Ended:结束状态。
二.事件集
FBAPC和FBACC中的事件分为三类,分别为:①报文到达事件、②报文发送事件和③内部事件。
FBAPC和FBACC中的报文到达事件和报文发送事件中到达和发送的报文集为:{Close,Cancel,Compensate,Complete,Faulted,Exited,Completed,Fault,Compensated,Closed,Canceled,Exit,Replay}。其中,Close:结束报文,Cancel:取消报文,Compensate:补偿报文,Complete:完成报文,Faulted:已出错报文,Exited:已退出报文,Replay:重发报文,Completed:已完成报文,Fault:出错报文,Compensated:已补偿报文,Closed:已结束报文,Canceled:已取消报文,Exit:退出报文。
内部事件集为:{F,T}。其中,F:在系统故障后,系统重新启动触发的事件;T:定时器触发的事件。
三.协调者协同过程
(一).FBAPC协调者协同过程
FBAPC协调者参照图1a~图1c所示执行相应协同过程。
第一步:协调者进入活动状态Active;
第二步:协调者等待触发事件;
第三步:如果触发事件为报文到达事件,则根据到达的报文分类处理:
(1)若为Exit报文:若协调者状态为Active或Canceling,则写Exiting日志项,设置协调者状态为Exiting;若协调者状态为Ended,则向参与者发送Exited报文;转第二步;
(2)若为Completed报文:若协调者状态为Active或Canceling,则写Completed日志项,设置协调者状态为Completed;若协调者状态为Closing,则向参与者发送Close报文;若协调者状态为Compensating,则向参与者发送Compensate报文;转第二步;
(3)若为Fault报文:若协调者状态为Active或Canceling,则写Faulting日志项,设置协调者状态为Faulting;若协调者状态为Compensating,则写Faulting2日志项,设置协调者状态为Faulting2;若协调者状态为Ended,则向参与者发送Faulted报文;转第二步;
(4)若为Canceled报文:若协调者状态为Canceling,则写Ended日志项,设置协调者状态为Ended;转第二步;
(5)若为Closed报文:若协调者状态为Closing,则写Ended日志项,设置协调者状态为Ended;转第二步;
(6)若为Compensated报文:若协调者状态为Compensating,则写Ended日志项,设置协调者状态为Ended;转第二步;
(7)若为Replay报文:若协调者状态为Canceling,则向参与者发送Cancel报文;转第二步。
第四步:如果触发事件为报文发送事件,则根据发送的报文分类处理:
(1)若为Cancel报文:若协调者状态为Active,则写Canceling日志项,设置协调者状态为Canceling,设置定时器;转第二步;
(2)若为Close报文:若协调者状态为Completed,则:写Closing日志项,设置协调者状态为Closing,设置定时器;转第二步;
(3)若为Compensate报文:若协调者状态为Completed,则写Compensating日志项,设置协调者状态为Compensating,设置定时器;转第二步;
(4)若为Faulted报文:若协调者状态为Faulting,则写Ended日志项,设置协调者状态为Ended,设置定时器;转第二步;
(5)若为Exited报文:若协调者状态为Exiting,则写Ended日志项,设置协调者状态为Ended,设置定时器;转第二步;
第五步:如果触发事件为内部事件T或F,则根据该事务的最后一项日志进行分类处理:
(1)若为Canceling,则向参与者发送Cancel报文,设置协调者状态为Canceling,设置定时器,转第二步;
(2)若为Exiting,则设置协调者状态为Exiting,转第二步;
(3)若为Faulting,则设置协调者状态为Faulting,转第二步;
(4)若为Faulting2,则设置协调者状态为Faulting2,,转第二步;
(5)若为Completed,则设置协调者状态为Completed,转第二步;
(6)若为Ended,则如果触发事件为F,则设置协调者状态为Ended,转第二步:如果触发事件为T,则结束;
(7)若为Closing,则向参与者发送Close报文,设置协调者状态为Closing,设置定时器,转第二步;
(8)若为Compensating,则向参与者发送Compensate报文,设置协调者状态为Compensating,设置定时器,转第二步;
(9)若为空,则向参与者发送Replay报文,设置协调者状态为Active,转第二步。
(二).FBACC协调者协同过程
FBACC协调者参照图3a~图3c所示执行相应协同过程。
第一步:协调者进入活动状态Active;
第二步:协调者等待触发事件;
第三步:如果触发事件为报文到达事件,则根据到达的报文分类处理:
(1)若为Exit报文:若协调者状态为Active或Canceling或Canceling2或Completing,则写Exiting日志项,设置协调者状态为Exiting;若协调者状态为Ended,则向参与者发送Exited报文;转第二步;
(2)若为Completed报文:若协调者状态为Completing或Canceling2,则写Completed日志项,设置协调者状态为Completed;若协调者状态为Closing,则向参与者发送Close报文;若协调者状态为Compensating,则向参与者发送Compensate报文;转第二步;
(3)若为Fault报文:若协调者状态为Active或Canceling或Canceling2或Completing,则写Faulting日志项,设置协调者状态为Faulting;若协调者状态为Compensating,则写Faulting2日志项,设置协调者状态为Faulting2;若协调者状态为Ended,则向参与者发送Faulted报文;转第二步;
(4)若为Canceled报文:若协调者状态为Canceling或Canceling2,则:写Ended日志项,设置协调者状态为Ended;转第二步;
(5)若为Closed报文:若协调者状态为Closing,则写Ended日志项,设置协调者状态为Ended;转第二步;
(6)若为Compensated报文:若协调者状态为Compensating,则写Ended日志项,设置协调者状态为Ended;转第二步;
(7)若为Replay报文:若协调者状态为Canceling或Canceling2,则向参与者发送Cancel报文;若协调者状态为Completing,则向参与者发送Complete报文;转第二步;
第四步:如果触发事件为报文发送事件,则根据发送的报文分类处理:
(1)若为Cancel报文:若协调者状态为Active,则写Canceling日志项,设置协调者状态为Canceling,设置定时器;若协调者状态为Completing,则写Canceling2日志项,设置协调者状态为Canceling2,设置定时器;转第二步;
(2)若为Close报文:若协调者状态为Completed,则写Closing日志项,设置协调者状态为Closing,设置定时器;转第二步;
(3)若为Compensate报文:若协调者状态为Completed,则写Compensating日志项,设置协调者状态为Compensating,设置定时器;转第二步;
(4)若为Faulted报文:若协调者状态为Faulting,则写Ended日志项,设置协调者状态为Ended,设置定时器;转第二步;
(5)若为Exited报文:若协调者状态为Exiting,则写Ended日志项,设置协调者状态为Ended,设置定时器;转第二步;
(6)若为Complete报文:若协调者状态为Active,则写Completing日志项,设置协调者状态为Completing,设置定时器;转第二步;
第五步:如果触发事件为内部事件T或F,则根据该事务的最后一项目志进行分类处理:
(1)若为Canceling,则向参与者发送Cancel报文,设置协调者状态为Canceling,设置定时器,转第二步;
(2)若为Exiting,则设置协调者状态为Exiting,转第二步;
(3)若为Faulting,则设置协调者状态为Faulting,转第二步;
(4)若为Faulting2,则设置协调者状态为Faulting2,转第二步;
(5)若为Completed,则设置协调者状态为Completed,转第二步;
(6)若为Ended,则如果触发事件为F,则设置协调者状态为Ended,转第二步;如果触发事件为T,则结束;
(7)若为Closing,则向参与者发送Close报文,设置协调者状态为Closing,设置定时器,转第二步;
(8)若为Compensating,则向参与者发送Compensate报文,设置协调者状态为Compensating,设置定时器,转第二步;
(9)若为空,则向参与者发送Replay报文,设置协调者状态为Active,转第二步;
(10)若为Completing状态,则向参与者发送Complete报文,设置协调者状态为Completing,设置定时器,转第二步;
(11)若为Canceling2,则向参与者发送Cancel报文,设置协调者状态为Canceling2,设置定时器,转第二步。
四.参与者协同过程
(一).FBAPC参与者协同过程
FBAPC参与者参照图2a~图2c所示执行相应协同过程。
第一步:参与者进入活动状态Active;
第二步:参与者等待触发事件;
第三步:如果触发事件为报文到达事件,则根据到达的报文分类处理:
(1)若为Cancel报文:若参与者状态为Active,则写Canceling日志项,设置参与者状态为Canceling;若参与者状态为Completed,则向协调者发送Completed报文;若参与者状态为Faulting,则向协调者发送Fault报文;若参与者状态为Exiting,则向协调者发送Exit报文;若参与者状态为Ended,则向协调者发送Canceled报文;转第二步;
(2)若为Close报文:若参与者状态为Completed,则写Closing日志项,设置参与者状态为Closing;若参与者状态为Ended,则向协调者发送Closed报文;转第二步:
(3)若为Compensate报文:若参与者状态为Completed,则写Compensating日志项,设置参与者状态为Compensating;若参与者状态为Faulting2,则向协调者发送Fault报文;若参与者状态为Ended,则向协调者发送Compensated报文;转第二步;
(4)若为Faulted报文:若参与者状态为Faulting或Faulting2,则写Ended日志项,设置参与者状态为Ended;转第二步;
(5)若为Exited报文:若参与者状态为Exiting,则写Ended日志项,设置参与者状态为Ended;转第二步;
(6)若为Replay报文:若参与者状态为Completed,则向协调者发送Completed报文;若参与者状态为Faulting,则向协调者发送Fault报文;若参与者状态为Exiting,则向协调者发送Exit报文;转第二步;
第四步:如果触发事件为报文发送事件,则根据发送的报文分类处理:
(1)若为Exit报文:若参与者状态为Active,则写Exiting日志项,设置参与者状态为Exiting,设置定时器;转第二步;
(2)若为Completed报文:若参与者状态为Active,则写Completed日志项,设置参与者状态为Completed,设置定时器;转第二步;
(3)若为Fault报文:若参与者状态为Active,则写Faulting日志项,设置参与者状态为Faulting,设置定时器;若参与者状态为Compensating,则写Faulting2日志项,设置参与者状态为Faulting2,设置定时器;转第二步;
(4)若为Canceled报文:若参与者状态为Canceling,则写Ended日志项,设置参与者状态为Ended,设置定时器;转第二步;
(5)若为Closed报文:若参与者状态为Closing,则写Ended日志项,设置参与者状态为Ended,设置定时器;转第二步;
(6)若为Compensated报文:若参与者状态为Compensating,则写Ended日志项,设置参与者状态为Ended,设置定时器;转第二步;
第五步:如果触发事件为内部事件T或F,则根据该事务的最后一项日志进行分类处理:
(1)若为Completed,则向协调者发送Completed报文,设置参与者状态为Completed,设置定时器,转第二步;
(2)若为Faulting,则向协调者发送Fault报文,设置参与者状态为Faulting,设置定时器,转第二步;
(3)若为Faulting2,则向协调者发送Fault报文,设置参与者状态为Faulting2,设置定时器,转第二步;
(4)若为Exiting,则向协调者发送Exit报文,设置参与者状态为Exiting,设置定时器,转第二步;
(5)若为Canceling,则设置参与者状态为Canceling,转第二步;
(6)若为Closing,则设置参与者状态为Closing,转第二步;
(7)若为Compensating,则设置参与者状态为Compensating,转第二步;
(8)若为Ended,则如果触发事件为F,则设置参与者状态Ended,转第二步;如果触发事件为T,则结束;
(9)若为空:则向协调者发送Replay报文,设置参与者状态为Active,转第二步。
(二).FBACC参与者协同过程
FBACC参与者参照图4a~图4c所示执行相应协同过程
第一步:参与者进入活动状态Active;
第二步:参与者等待触发事件;
第三步:如果触发事件为报文到达事件,则根据到达的报文分类处理:
(1)若为Cancel报文:若参与者状态为Active或Completing,则写Canceling日志项,设置参与者状态为Canceling;若参与者状态为Completed,则向协调者发送Completed报文;若参与者状态为Faulting,则向协调者发送Fault报文;若参与者状态为Exiting,则向协调者发送Exit报文;若参与者状态为Ended,则向协调者发送Canceled报文;转第二步;
(2)若为Close报文:若参与者状态为Completed,则写Closing日志项,设置参与者状态为Closing;若参与者状态为Ended,则向协调者发送Closed报文;转第二步;
(3)若为Compensate报文:若参与者状态为Completed,则写Compensating日志项,设置参与者状态为Compensating;若参与者状态为Faulting2,则向协调者发送Fault报文;若参与者状态为Ended,则向协调者发送Compensated报文;转第二步;
(4)若为Faulted报文:若参与者状态为Faulting或Faulting2,则写Ended日志项,设置参与者状态为Ended;转第二步;
(5)若为Exited报文:若参与者状态为Exiting,则写Ended日志项,设置参与者状态为Ended;转第二步;
(6)若为Replay报文:若参与者状态为Faulting,则向协调者发送Fault报文;若参与者状态为Exiting,则向协调者发送Exit报文;转第二步;
(7)若为Complete报文:若参与者状态为Active,则写Completing日志项,设置参与者状态为Completing;若参与者状态为Completed,则向协调者发送Completed报文;若参与者状态为Faulting,则向协调者发送Fault报文;若参与者状态为Exiting,则向协调者发送Exit报文;转第二步;
第四步:如果触发事件为报文发送事件,则根据发送的报文分类处理:
(1)若为Exit报文:若参与者状态为Active或Completing,则写Exiting日志项,设置参与者状态为Exiting,设置定时器;转第二步;
(2)若为Completed报文:若参与者状态为Completing,则写Completed日志项,设置参与者状态为Completed,设置定时器;转第二步;
(3)若为Fault报文:若参与者状态为Active或Completing,则写Faulting日志项,设置参与者状态为Faulting,设置定时器;若参与者状态为Compensating,则写Faulting2日志项,设置参与者状态为Faulting2,设置定时器;转第二步;
(4)若为Canceled报文:若参与者状态为Canceling,则写Ended日志项,设置参与者状态为Ended,设置定时器;转第二步;
(5)若为Closed报文:若参与者状态为Closing,则写Ended日志项,设置参与者状态为Ended,设置定时器;转第二步;
(6)若为Compensated报文:若参与者状态为Compensating,则写Ended日志项,设置参与者状态为Ended,设置定时器;转第二步;
第五步:如果触发事件为内部事件T或F,则根据该事务的最后一项日志进行分类处理:
(1)若为Completed,则向协调者发送Completed报文,设置参与者状态为Completed,设置定时器,转第二步;
(2)若为Faulting,则向协调者发送Fault报文,设置参与者状态为Faulting,设置定时器,转第二步;
(3)若为Faulting2,则向协调者发送Fault报文,设置参与者状态为Faulting2,设置定时器,转第二步;
(4)若为Exiting状态,则向协调者发送Exit报文,设置参与者状态为Exiting,设置定时器,转第二步;
(5)若为Canceling,则设置参与者状态为Canceling,转第二步;
(6)若为Closing,则设置参与者状态为Closing,转第二步;
(7)若为Compensating,则设置参与者状态为Compensating,转第二步;
(8)若为Ended,则如果触发事件为F,则设置参与者状态为Ended,转第二步;如果触发事件为T,则结束;
(9)若为空,则向协调者发送Replay报文,设置参与者状态为Active,转第二步;
(10)若为Completing,则设置参与者状态为Completing,转第二步。
FBAPC的容错情况示例如图5和图6所示,FBACC的容错情况示例如图7和图8所示。
1.FBAPC的协调者处于活动状态容错示例
当FBAPC的协调者处于Active状态发生故障时,故障恢复后,协调者还处于Active状态,并向FBAPC的参与者发送Replay报文,了解参与者的状态。参与者可能处于Active、Completed、Exiting或Faulting状态。当参与者处于Active状态,接收到Replay报文后还处于Active状态,到某一时刻会由参与者发送Completed、Exit或Fault报文,或由协调者发送Cancel报文,驱动协同过程走向Ended;当参与者处于Exiting状态,在接收到Replay报文后,向协调者重发Exit报文,通知协调者,它已退出,让协调者忘记该参与者,驱动协同过程走向Ended;当参与者处于Faulting状态,在接收到Replay报文后,向协调者重发Fault报文,通知协调者,它遇到了错误情况,让协调者忘记该参与者,驱动协同过程走向Ended;当参与者处于Completed状态,在接收到Replay报文后,向协调者重发Completed报文,通知协调者,它已完成了业务活动相关任务的执行,等待协调者的结束或补偿指令。
2.FBAPC的参与者处于已完成状态容错示例
当FBAPC的参与者处于Completed状态发生故障时,故障恢复后,参与者还处于Completed状态,并向FBAPC的协调者发送Completed报文,要求协调者重发由于参与者故障而未能接收到的报文。此时协调者可能处于Active、Canceling、Completed、Closing或Compensating状态。如果协调者处于Active状态,则接收到重发的Completed报文后,状态转换为Completed;如果协调者处于Canceling状态,则接收到重发的Completed报文后,状态转换为Completed;如果协调者处于Completed状态,则接收到Completed报文后,状态还处于Completed,到某一时刻,协调者会发送Close报文或Compensate报文驱动协同过程走向Ended;如果协调者处于Closing状态,接收到Completed报文后,重新向参与者发送Close报文;如果协调者处于Compensating状态,接收到Completed报文后,重新向参与者发送Compensate报文,驱动协同过程走向Ended。
3.FBACC的协调者处于完成处理状态容错示例
当FBACC的协调者处于Completing状态发生故障时,FBACC的参与者可能处于Active、Completing、Completed、Faulting或Exit状态。故障恢复后,协调者还处于Completing状态,由于协调者不记得参与者是否做出响应,因此向参与者重发Complete报文。如果参与者处于Active状态,则接收到Complete报文后进入Completing状态;如果参与者处于Completing状态,则接收到Complete报文后,还处于Completing状态,到某一时刻,参与者会发送Completed报文,驱动协同过程走向Ended;如果参与者处于Completed状态,则接收到Complete报文后向协调者重发Completed报文;如果参与者处于Faulting状态,则接收到Complete报文后向协调者重发Fault报文;如果参与者处于Exiting状态,则接收到Complete报文后向协调者重发Exit报文。
4.FBACC的参与者处于结束处理状态容错示例
当FBACC的参与者处于Closing状态发生故障时,FBACC的协调者也处于Closing状态。故障恢复后,参与者还处于Closing状态,。参与者会在某一时刻向协调者发送Closed报文,驱动协同过程走向Ended。
机译: 一种在群众参与活动中向参与者自动显示个性化的第三方品牌视频和照片图像的系统和方法,以及在事件发生后在万维网上记录,测量和显示与这些视频和照片图像的电子交互的方法
机译: 一种活动容错存储电路的方法和装置
机译: 一种用于从数据库,特别是万维网上的特征短数据刻蚀中产生数据库数据集的方法,一种用于为预定搜索查询确定数据库中相关数据集的过程以及一种搜索系统用于执行该方法