专利名称:过程中心的程序中的异步故障处理的制作方法
过程中心的程序中的异步故障处理
背景
面向过程或过程中心的程序已发展成能够处理对现实事件建模的复杂指 令。过程中心的程序反映了现实过程并反映了现实实体之间的交互。现有的系 统通过对商业问题建模来试图将商业问题映射为高级工作流。然而,现实工作
流在各个方面有所不同,诸如(a)执行和建模的复杂性、(b)在设计时对流 程的结构的了解、(c)静态定义或自组织/动态的、(d)在其生命周期的各个 时间创作和编辑流程的容易程度以及(e)商业逻辑与核心工作流过程之间弱 或强的关联。现有的模型不能适应所有这些因素。
此外,大多数现有工作流模型是基于以下中任一的基于语言的方法(例 如,BPEL4WS、 XLANG/S以及WSFL)或基于应用程序的方法。基于语言的 方法是具有帮助向用户/编程员对工作流过程建模的预定义构造的闭集的高级
工作流语言。工作流语言携带允许用户构建工作流模型的构造的闭集的所有语 义信息。然而,语言不是可由开发员扩展的,且表示构成工作流模型的原语的 闭集。语言被绑定至由工作流系统厂商装运的语言编译器。仅工作流系统产品 厂商可通过用产品将来版本中的一组新构造扩展语言来扩展模型。这通常要求 升级与该语言相关联的编译器。此外,语言通常不会声明性地展示或定义可由 其它程序容易且高效使用的功能或操作。
基于应用程序的方法是在应用程序内具有解决域专用问题的工作流能力 的应用程序。这些应用程序不是真正可扩展的,它们也不具有可编程模型。
此外,采用现有的方法,复杂性、预知、动态工作流、创作容易程度以及 与业务逻辑和核心工作流的关联的强度的问题未被充分解决。不存在构建可视 工作流设计器以对不同类的工作流建模的可用的可扩展、可定制且可重新主宿 的工作流设计器框架。现有的系统缺乏快速应用程序开发(RAD)样式的工作 流设计体验,该体验允许用户用图形设计工作流过程并用开发员选择的编程语 言关联业务逻辑。而且,工作流过程横跨工作流过程模型多步处理交叉切割互不相关且纠缠 的问题。例如,尽管工作流过程的一部分被设计为参与长期运行的事务,而同 一过程的其它部分被设计用于并发执行或访问共享资源。由于设计缺陷,现有 的系统不能提供执行线程的交错,而线程的交错允许用户设计活动的同步或交 错执行。同一工作流过程的另外其它部分要求跟踪,而其它部分处理商业或应 用级异常。需要对工作流过程的一个或多个部分应用某些行为。
某些工作流建模方法是不实际的,因为它们要求对整个商业过程包括异常 和人类干预在内的完整的基于流的描述。这些方法中的某些在异常发生时提供 附加的功能,而其它方法排他地采用基于约束的方法而非基于流的方法来对商 业过程建模。现有的系统或者实现基于流的方法或者实现基于约束的方法。这 样的系统对于对众多常见的商业情形建模而言太不灵活。这些系统也缺乏异步 处理异常或取消的能力。概述。
本发明的实施例通过在定义工作流中的活动的执行生存周期的状态自动 机中具有正发生故障状态来允许异步故障或异常处理。通过具有正发生故障状 态,本发明的各方面允许开发员或程序声明性地设计用于异常或故障处理的程 序,使得程序或活动的部分可在正发生故障状态中进行故障处理,而程序或活 动的其它部分可不受异常或故障事件的影响。
本发明的替换实施例允许传播或传输故障处理的通知。在其它替换实施例 中,可抑制或禁止这样的通知传播或传输。此外,另外的实施例响应于来自用 户的用于对处理故障后或异常后操作的输入。
提供本概述以便以简化的形式介绍将在以下详细描述中进一步描述的一 些概念。该概述不旨在标识所要求保护的主题的关键特征或必要特征,也不旨 在用于帮助确定所要求保护的主题的范围。
其它特征的一部分将是显而易见的, 一部分将在下文中指出。
附图简述
图1是示出现有编程范例的框图。图2是示出根据本发明的实施例的工作流设计框架的虚拟化的示例性框图。
图3是示出根据本发明的实施例的示例性工作流的示例性示意图。
图4是示出根据本发明的实施例的用于处理工作流活动的系统的示例性
计算环境的示意图。
图5是示出根据本发明的实施例的工作流活动的分层结构的示意图。 图6是示出根据本发明的实施例描述活动的执行生存周期的示例性状态 自动机的示意图。
图7A到7E是示出根据本发明的实施例对工作流的故障事件异步处理的 框图。
图8是示出根据本发明的实施例用于对工作流的活动的故障事件进行异 步处理的方法的流程图。
图9是示出可在其上存储本发明的各方面的示例性计算机可读介质的框图。
附图A示出根据本发明的实施例声明性提出异常的示例性实现。 相应的参考字符在各附图中指示相应的部分。
详细描述
首先参考图1,框图示出了用于对诸如工作流的过程中心活动设计程序的 现有的编程范例。例如,示意图示出现有的程序范例的三级虚拟化模型,托管 执行环境级是最高级,处理单元是最低级。在该编程设计系统中,即使在托管 执行环境级处,程序尤其是处理工作流过程的过程中心程序,缺乏适应工作流 中各过程之间的复杂交互的能力和效率。
本领域的技术人员已知,某些约束与设计软件或应用程序相关联。在这些 示例中,当编写操作系统软件程序104时,程序代码或例程是根据处理单元102 的类型或配置的、对一类计算体系结构(例如,IBM⑧可兼容、APPLE⑧计算 机或其它系统)专用或其它约束。此外,编程语言通常需要准确标识和利用数 据结构,诸如堆栈、堆、线程库或其它硬件专用结构以便操作系统104能正确运作。当处理复杂工作流过程时,现有应用程序使用托管执行环境106 (例如, 其中程序可共享功能或通用的面向对象类的运行时环境)的概念,其中由一种 编程语言编写的程序可调用用不同的编程语言编写的其它程序中的功能。在这 样的执行环境中,采用不同编程语言的这些程序被编译成中间语言,使得托管
执行环境106可展示不同程序的参数、自变量或模式或功能,使得程序可彼此交互。
尽管该执行环境106在程序之间创建通用的通信环境,但执行环境106 包括可能不适于处理过程中心程序的复杂程度和容量的各种严格要求。例如, 执行环境106要求程序被确认为特定文件格式。执行环境106也要求程序中的 功能或操作使用由执行环境106定义的固定的一组功能或一类功能。
本发明的实施例在图2中的可扩展基础或框架202上构建,以克服现有编 程模型的缺点。通过允许以任何编程语言编写并以任何文件格式编排程序,本 发明的各方面允许程序开发员设计具有特定功能的程序,而不损害其功能和细 节。通过将诸如工作流任务或过程的活动定义为要在工作流框架中执行的基 类,开发员可容易且高效地构建域专用(例如,诸如卫生保健行业、金融行业 等中的程序的特定执行环境)的操作代码(后文中称为"操作代码"),而无需 依附现有执行环境中的刚性、硬编码、不灵活且固定的一组功能或活动类。此 外,体现本发明各方面的工作流基础是层叠在任何现有框架(例如,托管执行 环境、操作系统环境或硬件处理单元级)上方的基于延续的运行时环境。
本发明的各方面通过允许按照任何方式或表示(例如,流程图、示意图、 编号描述等)进行工作流设计免除按照特定文件格式定义活动的约束,只要工 作流中的活动可根据工作流设计的表示构造。
此外,工作流框架或基础能够处理从较低级(例如,OS)提出的故障或 异常,或提出以其它格式(例如,中间语言)编写的功能的异常。
图3示出根据本发明的实施例的工作流300的简单视图。例如,工作流 300可以是用于处理购买定单的工作流,且该购买定单工作流300可包括诸如 接收购买定单、向顾客发送确认、由管理员批准购买定单等的过程或活动。
工作流300可从起始点302开始。例如,购买定单工作流的起始点302 可以是从顾客接收定单。工作流300也可包括条件语句304 (诸如"IF语句"或"WHILE语句"),它可被细分成附加条件语句306和308。工作流300也可包 括并行结构310,后者进一步包括一个或多个序列或活动312。例如,并行结 构310包括诸如检查存货并更新可用发货者的并行处理的活动。在所示示例中, 诸如"发送电子邮件"和"获得批准"的活动可并行处理。在"此处丢弃活动"316, 用户可进一步将更多活动添加或补充到工作流300中。为了完成工作流300, 过程或活动将在完成步骤或点314结束。
在一个实施例中,活动可被分层安排成树结构(见图5) 500或其它执行 序列。例如,活动可以是合成活动,其中活动包括与之相关联的一个以上的工 作项目。在另一实施例中,活动的集合可以是合成活动。活动方法或操作可位 于具有两个子或叶节点504和506的根节点502中。子节点504和506中的活 动方法或操作(例如,分别为工作项目—1和工作项目—2)可根据分层结构执行。 此外,子节点504和506也可包括具有要执行的相应工作项目的其它子节点。
在另一实施例中,活动包括以下类型中的一个或多个简单活动、容器活 动和根活动。在此实施例中,在模型中有一个根活动,根活动内有零个或任何 数量的简单活动或容器活动。容器活动可包括简单或容器活动。整个工作流过 程可用作构建较高级工作流过程的活动。此外,活动可以是可中断或不可中断 的。不可中断的合成活动不包括可中断活动。不可中断活动没有可使活动阻塞 的服务。
而且,当执行活动以及包括在活动中的工作项目时,工作流框架或执行上 下文或环境为每一工作项E定义范围或边界。该范围或边界包括并展示了诸如 要由工作项目访问的共享数据或资源、相关联的属性、处理程序、约束以及自 治代理之间的交互等的信息(例如,以数据、元数据等的形式)。而且,每一 活动可由采用任何编程语言的用户代码配置。例如,用户代码可表示在特定域 或执行环境中编写的业务或应用程序逻辑或规则。每一活动可支持对用户代码 中的执行的截取前挂钩和截取后挂钩。每一活动具有相关联的运行时环境执行 语义和行为(例如,状态管理、事务、事件处理和异常处理)。活动可与其它 活动共享状态或资源。此外,活动可以是原语活动,或归组成合成活动。原语
或基本活动不具有子结构(例如,子活动)且因此是树结构中的叶节点。合成 活动包含子结构(例如,它是一个或多个子活动的父活动)。图4是示出根据本发明的实施例的用于处理工作流活动的系统400的示意 图。系统400包括处理器402,它可以是处理单元或处理单元的集合。系统400 也包括用于存储可由处理器402访问的数据的存储或存储器区404。在一个实 施例中,系统400可以是具有一个或多个处理器或处理单元(例如,处理器402) 以及系统存储器(例如,存储器区404)并具有将包括系统存储器的各种系统 组件耦合到处理器402的其它组件的计算机。
在一个示例中,存储器区404可包括计算机可读介质(易失性、非易失性、 可移动或不可移动介质),它们以用于存储诸如计算机可读指令、数据结构、 程序模块或其它数据这样的信息的任何方法或技术来实现。例如,计算机存储 介质包括RAM、 ROM、 EEPROM、闪存或其它存储器技术、CD-ROM、数字 多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其他磁存储设 备、或可以用于存储所需信息并可由系统400访问的任何其它介质。存储器404 也包括具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读 指令、数据结构、程序模块或其它数据的通信介质,且包含任何信息传递介质。 本领域技术人员熟悉己调制数据信号,其一个或多个特征以将信息编码在该信 号中的方式来设置与改变。诸如有线网络或直接线连接等有线介质,以及如声 学、RF、红外线及其它无线介质等无线介质都是通信介质的示例。以上的任一 的组合也包括在计算机可读介质的范畴内。
例如,存储器区404存储用于在工作流(例如,工作流300)中处理的多 个活动406。多个活动406中的每一个包括一个或多个工作项目,且工作项目 可在诸如树结构(见图5)的分层结构中组织。当处理多个活动406时,处理 器402访问或执行调度器408,它被配置成设置有组织的活动集。
例如,处理器408经由组件或一组计算机可执行指令诸如调度器408访问 多个活动406中的工作项目以使工作项目422入队或存储到队列410。可由处 理器402访问的分派器412分派工作项目422以便执行。例如,工作项目422-1 可包括活动方法或活动操作424、例程或用于执行"向用户请求输入"的功能的 代码的集合。 一个或多个其它活动方法、活动操作、例程或代码可被包括在每 一工作项目422中,而不背离本发明的范围。
一旦由分派器412分派了工作项目422,处理器402在414执行工作项目422中的每一方法424。在工作项目422-1的示例中,处理器402可允许用户 经由用户界面(UI)输入所请求的信息或数据。在另一实施例中,处理器402 可连接或访问外部数据源以便向用户请求输入。在完成活动方法或活动操作 424之后,处理器402在416结束工作项目422的执行。在一个实施例中,处 理器402在418将工作项目的正在执行状态钝化(passivate)到数据存储420。
在另一实施例中,处理器402根据诸如图6中所示的自动机的状态自动机 执行工作项目422,图6是示出根据本发明的实施例描述与活动相关联的工作 项目的处理状态的示例性状态自动机600的示意图。在一个实施例中,状态自 动机600定义活动的执行生存周期。在一个示例中,状态自动机600可包括已 初始化状态、正在执行状态以及已关闭状态(如图4中所示)。在另一实施例 中,状态自动机600包括己初始化状态602、正在执行状态604、正在取消状 态606、正发生故障状态608、正在补偿状态610和已关闭状态612。
例如,状态自动机600描述工作流活动中工作项目(例如,工作项目422) 的执行的过程流。如图4中所示的工作项目422-l当它在队列410中入队时首 先被初始化。接着,工作项目422-1在正在执行状态(例如,图6中的正在执 行状态604)中执行之前从队列410中出队或移除到分派器412。根据工作项 目422-1的执行期间的参数或条件,工作项目422-1可前进到正在取消状态606 (例如,图4的正在取消状态426)或正发生故障状态608。在一个实施例中, 工作项目422-1可从正在取消状态606前进到正发生故障状态608。在替换实 施例中,正在补偿状态610描述当发生故障或异常时要执行的一组操作或功能。
例如,假定在工作项目(例如,工作项目422-1)的执行期间发生异常, 诸如函数的参数遗失。系统400将工作项目422-1转移到正发生故障状态608。 这样做,系统400也在将工作项目422-1转移到已关闭状态612之前在正在补 偿状态610中执行垃圾收集(例如,将操作中之前执行的部分从高速缓存或存 储器中移除、使参数值复位等)。例如,正在补偿状态610中的工作项目可触 发诸如恢复之前用于执行其它工作项目的数据的操作。已关闭状态612指示活 动(例如,图5中的活动500)的执行已完成。
在一个实施例中,状态自动机600在合成活动的工作项目之间建立关系。 例如,关系规则之一可包括,在将活动树的根节点中的方法或工作项目转移到己关闭状态612之前,子节点中的所有工作项目应处于已初始化状态602或已 关闭状态612。另一规则可要求,为了将活动树的子节点中的工作项目转移到 正在执行状态604,根节点中的工作项目必须已经处于正在执行状态604。
在另一实施例中,可在状态自动机600中定义一个或多个附加状态,而不 背离本发明的实施例的范围。
接着参考图7A到7E,框图示出了根据本发明的实施例对工作流中的故障 事件的异步处理。为简单起见且并非限制,图7A示出包括按照树结构组织的 三个子工作项目的合成活动702:事务—1 704、事务—2 706以及事务—3 708。如 图所示,根活动702包括"在显示上写文本"的方法。以上工作项目的活动方法 或操作也包括以下 事务一l 704: {插入文本("1和2");
HANDLEFAULT()(处理故障);
事务—2 706: { 插入文本("3和4"); HANDLEFAULT();
事务_3 708:
{插入文本("5和6");
暂停180秒;
插入文本("结束");
在图7B中,事务—1 704、事务_2 706以及事务_3 708转移到正在执行状 态710。如图所示,事务一l 704通过在对用户430的显示(例如,用户界面428) 上插入文本("1和2")来执行所包括的操作。
尽管处于正在执行状态710中,但发生了故障事件722或异常。故障事件 722可包括对遗失数据、执行故障、对数据存储的不准确访问等的警告通知。 在此示例中,事务一l 704包括用于处理故障事件722的handleFault()(故障处理)函数716。在一个实施例中,handleFault函数716类似于诸如操作系统或 托管执行环境的其它执行环境中用于故障处理的"捕捉"函数。因此,对 handleFault函数716或其它"捕捉"处理器的故障传播或分派是异步的。
当出现故障事件722时,事务—1 704转移到正发生故障状态712,且事务 —1 704转移到已关闭状态714。在一个实施例中,响应于故障事件722, handleFault()函数716被调用,并被置于队列(未示出)用于处理。
采用用于异常传播和处理的该良好定义的协议,替换实施例可处理多个异 常,且可在异常的传播与正常程序执行交错时调度多个异常。
在图7中,事务_2 706和事务708处于正在执行状态710中。类似于执行 事务_1 704,事务_2 706执行所包括的操作。在此示例中,将文本("3和4") 插入到显示上。此外,事务—2 706也包括与事务一l 704用于处理故障事件722 的handleFault()函数716相似的handleFault()函数。
在替换实施例中,handleFault()函数716可根据活动的执行层次或执行分 层结构将通知720传播或转送到处于正在执行状态710中的其余工作项目。例 如,当事务_1 704处于正发生故障状态712中时,handleFault()函数712可传 播通知720 (例如,"抛出"函数),使得父活动_1 702的handleFault()函数可如 同通知720是故障事件或异常一样来处理它。在一个实施例中,子活动可将抛 出函数的目标限于其活动树中的父活动。在另一实施例中,异常处理可与活动 的树形结构高度关联或连系。
通过建立用于处理故障事件的正发生故障状态712,本发明的实施例允许 异步的故障处理或异常处理,且处于正在执行状态710中的其余工作项目或活 动可继续执行。此外,另一替换实施例允许调度处理故障事件。例如,在响应 于通知720时,事务—2 706可在转移到正发生故障状态712之前被置于调度器 队列718中。在另一实施例中,通知720可被抑制,使得处于正在执行状态710 中的其它工作项目或活动继续执行。在一个实施例中,事务一1 704在传播或传 送通知720之后转移到已关闭状态714。在又一实施例中,故障传播和处理存 活,并横跨钝化周期。
在图7D中,事务_3 708在正在执行状态710中执行。例如,事务—3 708 所包括的操作在将文本("结束")插入到显示上之前插入文本("5和6")并暂停180秒。然而,所包括的操作不包括用于故障处理的函数。因此,在完成所
包括的操作之后,在图7E中事务一3 708被转移到已关闭状态714。此外,事 务_2 706在从调度器队列718出队到正发生故障状态712之后也转移到已关闭 状态714。
不作为限制,附图A示出根据本发明的实施例声明性提出异常的示例性 实现。在一个实施例中,程序员或开发者可设计用于处理特定类型的故障事件 或异常的故障处理器。在又一实施例中,工作流中的工作项目或活动可能不包 括函数或不能够处理故障事件。在此实施例中,工作流执行环境处理故障事件。 在又一实施例中,可经由图4中对用户430的UI 429向用户提供一个或多个 故障处理后操作。
尽管图7A到7E顺序示出了 (即,事务是顺序执行的)状态自动机的正 在执行状态或部分的屏幕截图,但处于正在执行状态中的工作项目可同时处理 或基本上同时处理,而不背离本发明的范围。
图8是示出根据本发明的实施例用于对工作流的活动的故障事件进行异 步处理的方法的流程图。例如,图8中所示的方法可被表示为存储在计算机可 读介质中的计算机可执行指令,如图9所示。例如,状态机902在802为活动 定义状态自动机(例如,状态自动机600),且状态自动机至少包括正在执行 状态、正发生故障状态和已关闭状态。活动组件904在804将活动定义为包括 多个工作项目。所定义的活动具有用于多个工作项目的执行分层结构或执行序 列(例如,树结构)。每一工作项目包括用于执行活动的一部分的操作。
调度器组件卯6在806将每一工作项目转移到正在执行状态。执行组件在 808执行处于正在执行状态中的所转移工作项目的所包括操作。在810,标识 组件910基于执行分层结构和所包括的操作响应于故障事件标识所转移的工作 项目中的一个或多个。在812,故障处理器912通过调用一个或多个所标识工 作项目中的故障处理操作(例如,handleFault()函数716)以将这一个或多个所 标识的工作项目转移到正发生故障状态,同时执行未由标识组件响应于故障事 件标识的其余转移工作项目所包括的操作,来异步处理故障事件。在一个实施 例中,故障处理器912通过将一个或多个所标识工作项目转移到正发生故障状 态来异步处理故障事件。在又一实施例中,故障处理器912通过使一个或多个所标识的工作项目入队到调度器队列(例如,调度器队列718)中来异步处理 故障事件。
在替换实施例中,计算机可读介质900还包括故障传播组件914,它用于 根据活动的执行分层结构将通知从一个或多个所标识的工作项目传送到其余 所转移的工作项目。通知720指示所标识的一个或多个工作项目处于正发生故 障状态中。在又一实施例中,计算机可读介质900还包括转移组件916,用于 响应于所传送的通知将其余的所转移的工作项目从正在执行状态转移到正发 生故障状态。
在另一替换实施例中,计算机可读介质也可包括补偿组件918,用于根据 异步处理故障事件恢复或补偿与活动相关联的数据。禁止组件也可以是计算机 可读介质900的一部分,用于抑制通知对其余所转移的工作项目的传送。
尽管结合诸如图4的系统400的示例性计算系统环境进行了描述,但本发 明的实施例可用于众多其它通用或专用计算系统环境或配置。计算系统环境不 旨在对本发明的任何方面的使用范围或功能提出任何限制。而且,计算系统环 境不应被解释为对在示例性操作环境中所示组件的任何一个或组合有任何依 赖性或要求。适用于本发明各方面的公知的计算系统、环境和/或配置的示例包 括,但不限于个人计算机、服务器计算机、手持式或膝上型设备、多处理器 系统、基于微处理器的系统、机顶盒、可编程消费者电子产品、移动电话、网 络PC、小型机、大型机、包括上述系统或设备中的任一个的分布式计算机环 境等。
本发明的各实施例可以在由一个或多个计算机或其他设备执行的诸如程 序模块等计算机可执行指令的通用上下文中描述。 一般而言,程序模块包括但 不限于执行特定的任务或实现特定的抽象数据类型的例程、程序、对象、组 件和数据结构。本发明的各方面也可以在分布式计算环境中实现,其中任务由 通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序模块可以 位于包括存储器存储设备在内的本地和远程计算机存储介质中。
在操作中,系统400执行如在诸如图8的各附图中所示出的计算机可执行 指令来实现本发明的各方面。
除非另有指定,否则此处所示和所述的本发明各实施例的操作的执行或进行的次序不是必需的。也就是说除非另有指明,否则各操作可按照任何次序执 行,且本发明的实施例可以包括比本文所公开的或多或少的操作。例如,构想 了在另一操作之前、同时或之后执行或进行某一操作是在本发明各方面的范围 之内的。
本发明的各实施例可以用计算机可执行指令来实现。计算机可执行指令可 以被组织为一个或多个计算机可执行组件或模块。本发明的各方面可以用任何 数量的这些组件或模块及其任何组织来实现。例如,本发明的各方面不限于在 各附图和本文中示出的特定的计算机可执行指令或者特定的组件或模块。本发 明的其他实施例可以包括具有比在本文中示出和描述的或多或或少的功能的 不同计算机可执行指令或组件。
当介绍本发明或其实施例的各方面的各元素时,冠词"一"、"一个"、"该" 和"所述"指的是存在该元素的一个或多个。术语"包括"、"包含"、"具有"旨在 是包括性的并且指的是可以有除所列元素之外的其它元素。
尽管详细描述本发明的各方面,但显然修改和变化是有可能的,而不背离 所附权利要求书中定义的本发明各方面的范围。在不背离本发明各方面的范围 的情况下,可对以上构造、产品和方法进行各种改变,以上描述中所包含的以 及在附图中所示出的所有一切旨在应被解释为说明性并且没有限制意义。附录A
<myActivities:Sequence x:Name="myWorkflow" x:Class="myApp,myWorkflow' xmlns:myActivities="http:〃schemas.com/myActivities" xmlns:x="http:〃schemas.microsoft.com/winfx/2006/xamr' xmlns="http:〃schemas.microsoft.com/winfx/2006/xaml/workflow"> <myActivities:WriteLine Text="One"/〉 <myActivities:WriteLine Text="Two7> <ThrowActivity FaultType=', (x:Type InvalidOperationException} 7>
<myActivities:WriteLine Text="Unreachable code"/〉 <FaultHandlersActivity> <FaultHandlerActivity FaultType=" (x:Type InvalidOperationException}">
<myActivities:WriteLine Text="Three7> </FaultHandlerActivity> <FaultHandlerActivity FaultType="(x:Type AppDomainUnloadedException}"〉
<myActivities:WriteLine Text="Four"/> </FaultHandlerActivity> </FaultHandlersActivity> </myActivities:Sequence> <myActivities:Sequence x:Name="myWorkflow" x:Class="myApp.myWorkflow'
xmlns:myActivities="http:〃schemas.com/myActivities"
xmlns:x="http:〃schemas,microsoft.com/winfx/2006/xamr xmlns="http:〃schemas,microsoft.com/winfx/2006/xamlAvorkflow"><myActivities:WriteLine Text="Hello World7> <ThrowActivity FaultType-"(x:Type InvalidOperationException}" /〉 <myActivities:WriteLine Text="Unreachable Code'V〉 </myActivities:Sequence>
权利要求
1. 一种用于为工作流的活动异步处理故障事件(722)的方法,所述方法包括为活动(702)定义状态自动机(600),所述状态自动机(600)至少包括正在执行状态(604)、正发生故障状态(608)和已关闭状态(612),所述状态自动机(600)对活动(702)的执行生存周期分类;将所述活动(702)定义为包括多个工作项目(422),所定义的活动(702)具有用于多个工作项目(422)的执行分层结构(500),每一工作项目(422)包括用于执行活动(702)的一部分的操作;将每一工作项目(422)转移到正在执行状态(604);执行处于正在执行状态(604)中的转移工作项目(422)所包括的操作;根据所述执行分层结构(500)和所包括的操作,响应于所述故障事件(722)标识所转移工作项目中的一个或多个;以及通过将所述一个或多个标识工作项目(422)转移到所述正发生故障状态(608),同时执行未响应于故障事件(608)标识的其余转移工作项目所包括的操作来异步处理所述故障事件(722)。
2. 如权利要求1所述的方法,其特征在于,异步处理所述故障事件(722) 包括调用所述一个或多个标识的工作项目(422)中的故障处理操作。
3. 如权利要求2所述的方法,其特征在于,调用所述故障处理操作包括 使所述一个或多个所标识工作项目入队到调度器队列(718)中。
4. 如权利要求1所述的方法,其特征在于,还包括根据所述活动(702) 的执行分层结构(500)将通知(720)从所述一个或多个所标识的工作项目(422) 传播到所述其余的转移工作项目(422),所述通知(720)指示所标识的一个 或多个工作项目(422)正处于正发生故障状态(608)。
5. 如权利要求4所述的方法,其特征在于,还包括响应于所传播的通知 (720)将其余转移的工作项目(422)从所述正在执行状态(604)转移到所述正发生故障状态(608)。
6. 如权利要求4所述的方法,其特征在于,还包括抑制所述通知(720) 对其余转移的工作项目(422)的传播。
7. 如权利要求1所述的方法,其特征在于,还包括响应于所述一个或多 个所标识的工作项目(422)被转移到所述正发生故障状态(608)向用户提供 用于故障后处理的操作。
8. 如权利要求l所述的方法,其特征在于, 一个或多个计算机可读介质 具有用于执行如权利要求1所述的方法的计算机可执行指令。
9. 一种用于异步处理工作流中的故障事件(722)的系统(400),所述 系统(400)包括用于存储与工作流中的活动(406)的工作项目相关联的数据的存储 (404),所述活动(406)具有用于工作项目(422)的执行分层结构(500), 每一工作项目(422)包括用于执行活动(406)的一部分的操作;被配置为执行计算机可执行指令的处理器(402),所述指令用于 为活动(406)定义状态自动机(600),所述状态自动机(600)至少包 括正在执行状态(604)、正发生故障状态(608)和已关闭状态(612),所 述状态自动机(600)对活动(406)的执行生存周期分类; 将每一工作项目(422)转移到正在执行状态(604); 执行处于正在执行状态(604)中的转移工作项目(422)所包括的操作; 基于所述执行分层结构(500)和所包括的操作,响应于故障事件(608) 标识所转移工作项目(422)中的一个或多个;以及通过将所述一个或多个标识的工作项目(422)转移到所述正发生故障状 态(608),同时执行未响应于故障事件(722)标识的其余转移工作项目(422)所包括的操作来异步处理所述故障事件(722)。
10. 如权利要求9所述的系统(400),其特征在于,所述处理器(402) 被配置为使用以下方法中的一个或多个来异步处理所述故障事件(722):通 过调用所述一个或多个所标识的工作项目(422)中的故障处理操作,以及通 过使所述一个或多个所标识的工作项目(422)入队到调度器队列(718)中。
11. 如权利要求9所述的系统(600),其特征在于,还包括用于根据所 述活动(406)的执行分层结构(500)将通知(720)从所述一个或多个所标 识的工作项目传播到所述其余的转移工作项目(422)的组件,所述通知(720) 指示所标识的一个或多个工作项目(422)正处于正发生故障状态(608)。
12. 如权利要求11所述的系统(400),其特征在于,还包括响应于所 传播的通知(720)将其余转移的工作项目从所述正在执行状态(604)转移到 所述正发生故障状态(608)的组件。
13. 如权利要求9所述的系统(400),其特征在于,还包括用于根据所 述处理器(402)对所述故障事件(722)的异步处理补偿以便从所述存储(404) 恢复与所述活动相关联的数据的组件。
14. 如权利要求9所述的系统(400),其特征在于,还包括抑制所述通 知(720)对其余转移的工作项目(422)的传播的组件。
15. —个或多个具有用于异步处理工作流中的故障事件(722)的计算机 可执行组件的计算机可读介质(900),所述计算机可执行组件包括为活动(406)定义状态自动机(600)的状态机(卯2),所述状态自动 机(600)至少包括正在执行状态(604)、正发生故障状态(608)和已关闭 状态(612),所述状态自动机(600)对活动(406)的执行生存周期分类;将所述活动(406)定义为包括多个工作项目(422)的活动组件(904),所定义的活动(406)具有用于多个工作项目(422)的执行分层结构(500), 每一工作项目(422)包括用于执行活动(406)的一部分的操作;将每一工作项目(422)转移到正在执行状态(604)的调度器组件(906);执行处于正在执行状态(604)中的转移工作项目(422)所包括的操作的 执行组件(908);基于所述执行分层结构(500)和所包括的操作,响应于故障事件(722) 标识所转移工作项目中的一个或多个的标识组件(910);以及通过调用一个或多个所标识工作项目(422)中的故障处理操作以将所述 一个或多个所标识的工作项目(422)转移到所述正发生故障状态(608),同 时执行未由标识组件(910)响应于故障事件(722)标识的其余转移工作项目 所包括的操作来异步处理故障事件(722)的故障处理器(912)。
16. 如权利要求15所述的计算机可读介质(900),其特征在于,所述 故障处理器(912)使所述一个或多个所标识的工作项目(422)入队到调度器 队列(718)中以将所述一个或多个所标识的工作项目转移到所述正发生故障 状态(608)。
17. 如权利要求15所述的计算机可读介质(900),其特征在于,还包 括根据所述活动(406)的执行分层结构(500)将通知(720)从所述一个或 多个所标识的工作项目(422)传输到所述其余的转移工作项目(422)的故障 传播组件(914),所述通知(720)指示所标识的一个或多个工作项目(422) 正处于正发生故障状态(608)。
18. 如权利要求17所述的计算机可读介质(900),其特征在于,还包 括响应于所传输的通知(720)将其余转移的工作项目从所述正在执行状态(604)转移到所述正发生故障状态(608)的转移组件(916)。
19. 如权利要求15所述的计算机可读介质(900),其特征在于,根据 所述异步处理故障事件(608)恢复与所述活动(406)相关联的数据的补偿组件(918)。
20.如权利要求15所述的计算机可读介质(900),其特征在于,还包 括抑制所述通知(720)对其余转移的工作项目的传输的禁止组件(920)。
全文摘要
工作流的异步故障处理。定义了工作流中活动的状态自动机。状态自动机至少包括正在执行状态、正发生故障状态和已关闭状态,并对活动的执行生存周期分类。将活动定义为包括工作项目,且包括工作项目的执行分层结构。每一工作项目包括用于执行活动的一部分的操作。每一工作项目被转移到正在执行状态。转移的工作项目所包括的操作在正在执行状态中执行。根据执行分层结构和所包括的操作,响应于故障事件标识所转移工作项目中的一个或多个。通过将一个或多个所标识的工作项目转移到正发生故障状态同时执行其余转移工作项目所包括的动作来异步处理故障事件。
文档编号G06F9/44GK101416156SQ200780012353
公开日2009年4月22日 申请日期2007年2月21日 优先权日2006年3月30日
发明者A·J·沙加, B·施米特, D·舒克拉, K·拉曼, M·梅达, N·塔尔伯特 申请人:微软公司