首页> 中国专利> 通过工作流事务的批处理来同步运行库和应用状态

通过工作流事务的批处理来同步运行库和应用状态

摘要

用于通过批处理未提交的工作来跨通信组件维护持久状态的一致性的工作流管理。工作流组件定义包含要由服务提供者组件执行的工作项的工作流。工作流组件将工作项分配给服务提供者组件,且服务提供者组件确认所分配的工作项。工作流组件将所分配的工作项追加到批量工作。工作流组件创建包含批处理的工作项的事务。工作流组件通过请求服务提供者组件执行工作项来提交工作流。工作流组件检查工作项的执行状态,并在持久存储中储存该状态。

著录项

  • 公开/公告号CN1783132A

    专利类型发明专利

  • 公开/公告日2006-06-07

    原文格式PDF

  • 申请/专利权人 微软公司;

    申请/专利号CN200510127140.6

  • 申请日2005-11-22

  • 分类号G06Q10/00(20060101);

  • 代理机构31100 上海专利商标事务所有限公司;

  • 代理人张政权

  • 地址 美国华盛顿州

  • 入库时间 2023-12-17 17:20:52

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-05-20

    专利权的转移 IPC(主分类):G06F9/44 变更前: 变更后: 登记生效日:20150505 申请日:20051122

    专利申请权、专利权的转移

  • 2014-11-19

    授权

    授权

  • 2008-04-23

    实质审查的生效

    实质审查的生效

  • 2006-06-07

    公开

    公开

说明书

技术领域

本发明的实施例一般涉及工作流建模的领域,尤其涉及通过批处理未提交工作来跨通信组件维护持久状态的一致性。

背景技术

现有的软件系统试图通过对商业问题建模将商业问题映射到高级工作流。一般而言,工作流处理涉及一系列任务或动作、必须执行它们的顺序、定义谁能够执行它们的许可、以及对每一动作执行的脚本。工作流也可按照状态和事件来描述。工作流引擎可以是启用工作流的软件系统的组件,它实施工作流定义并执行工作流动作。

工作流引擎具有三个主要功能。首先,它验证改变对当前工作流状态是否有效。其次,它检查当前用户是否具有执行工作流事件的许可。第三,如果事件是有效的,且用户具有执行该事件的许可,则工作流引擎准许执行。例如,在管理诸如发布新闻文章所涉及的一系列任务时,必须执行一系列工作项。在本示例中,任务包括写文章、编辑所写的文章、审阅所编辑的文章、以及发布所编辑的文章。典型的工作流引擎可请求不同的服务提供者组件(例如,写组件、编辑组件、审阅组件和发布组件)执行这些工作项或任务。

软件系统的工作流引擎/组件有规律地与其它组件(例如,写组件、编辑组件等)进行通信,以监视各工作项的状态。同时,这些组件也可监视这些工作项的状态或对其设检查点。遗憾的是,这些组件没有用于保持其持久状态一致的机制。

例如,工作流引擎在执行工作流期间可调用不同的组件来执行多个工作项。工作流引擎可向这些组件发送若干消息,以确定工作项的状态。所发送的每一消息调用消息通信服务提供者组件。由于要求消息通信组件维护关于工作流的一致且持久的状态,因此除非可成功地持久保存工作流状态,否则不应当发送消息。

遗憾的是,这一类型的垂直集成的软件系统设计方法(即,实际上在数据到达之后执行工作流)具有许多缺点。例如,当一个组件正在执行特定的任务或工作项时,其它组件可能不知道该特定工作项的状态(例如,已完成、正在执行或已放弃)。另外,当在执行要执行的工作流中的一个或多个工作项时存在故障时,由于缺少状态知识,可能要求工作流引擎重新执行整个工作流。

因此,需要工作流管理中的改进来解决这些和其它缺点中的一个或多个,该改进通过一种机制来同步工作项的运行库和应用状态,该机制用于批处理工作流事务,以及用于通过批处理事务来使工作流引擎能够延迟工作项的执行并跨通信组件维护工作项的持久状态的一致性。

发明内容

本发明的实施例便于组件在持久事务中共享。换言之,这些实施例准许在单个事务中向持久存储提交工作流状态和未决的消息通信状态,这确保“设了检查点的”状态跨所有的组件是一致的。本发明的实施例包括一工作流组件,它在其对服务提供者组件的所有调用或分配的线程调用上下文中浮动批量工作对象。服务提供者组件可选择向该批量工作添加工作,该批量工作将在提交时将所有的动作作为单个事务来处理。

依照一方面,一种方法管理工作流中的状态。定义要执行的一个或多个工作项。该一个或多个定义的工作项被分配给一个或多个服务提供者组件用于执行。该一个或多个分配的工作项在稍后的时候由一个或多个服务提供者组件批处理。持久保存一个或多个批处理的工作项的状态。当一个或多个服务提供者组件执行这一个或多个提交的工作项时,一个或多个服务提供者组件提交执行一个或多个批处理的工作项。

依照另一方面,一个或多个计算机可读介质具有用于管理工作流中的状态的计算机可执行指令。工作流组件分配要执行的一个或多个工作项。工作流组件定义一个或多个工作项,并且工作流组件在稍后的时候批处理一个或多个分配的工作项。一个或多个服务提供者组件提交执行一个或多个批处理的工作项。

依照又一方面,一种系统维护服务的持久状态。工作流引擎分配要执行的一个或多个工作项。工作流引擎定义一个或多个工作项,并且工作流在稍后的时间批处理一个或多个分配的工作项。服务提供者提交执行一个或多个分配的工作项。

在再一方面,一种方法管理可由第一宿主环境执行的一个或多个工作项的工作流。在第一宿主环境处接收到执行一个或多个工作项的分配。一个或多个分配的工作项被追加到第一宿主环境处的批量工作,指示该一个或多个分配的工作项要由第一宿主环境在稍后的时间执行。在第一宿主环境处接收执行一个或多个分配的工作项的请求。第一宿主环境执行该一个或多个请求的工作项。

或者,本发明可包括各种其它方法和装置。

其它特征部分将变得显而易见,部分将在后文中指出。

附图说明

图1是依照本发明的一个实施例示出用于通过批处理未提交的工作来跨通信组件维护持久状态的一致性的系统的框图的一个示例性实施例。

图2是依照本发明的一个实施例示出通过服务提供者组件批处理工作项的示例性流程图。

图3是依照本发明的一个实施例示出对一个或多个追加的工作项的事务的示例性框图。

图4是依照本发明的一个实施例示出通过批处理未提交的工作来跨通信组件维护持久状态的一致性的操作的示例性流程图。

图5是示出其中可实现本发明的合适的计算系统环境的一个示例的框图。

贯穿附图,对应的参考标号表示对应的部分。

具体实施方式

首先参考图1,框图依照本发明的一个实施例示出了用于通过批处理未提交的工作来跨通信组件维护持久状态的一致性的系统100。系统100包括但不限于,工作流组件102、一个或多个服务提供者组件104以及持久存储106。在一个实施例中,系统100是由一个或多个组件(例如,工作流组件102、服务提供者组件104等)构成的软件系统。在另一实施例中,系统100是由包括本发明的实施例的一个或多个应用和/或软件系统构成的集成软件应用系统,如企业应用集成系统。

工作流组件102以由服务提供者组件104(例如,104-1到104-N)执行的任务的形式来管理工作。

图1中的服务提供者组件104-1到104-N是提供各种服务或工作项的组件。例如,服务提供者组件104-1可以是提供诸如接收用户搜索查询、接收在线产品定单等的Web服务的组件。在一个实施例中,服务提供者组件104是系统100(也称为宿主环境)的一部分,且服务提供者组件104是宿主。在另一环境中,服务提供者组件104的某些或全部在系统100之外。例如,服务提供者组件104-1可以在与服务提供者组件104-2分离的软件应用程序或系统中。在又一实施例中,由服务提供者组件104执行的工作项的示例可包括,但不限于,消息通信、实例、事务、持久性、线程化、定时器、角色、跟踪等。

尽管图1所示的工作流组件102和服务提供者组件104是系统100的一部分,然而可以理解,这些组件(即,工作流组件102、服务提供者组件104和/或持久存储106)可以是单独的系统(例如,单独的宿主环境)的一部分。例如,工作流组件102可以在独立的软件应用程序中,而服务提供者组件104-1和/或服务提供者组件104-2可以在诸如文字处理软件、电子表格软件等单独的软件中。

最初,工作流组件102具有要执行的一系列工作项。例如,在提供Web服务的系统中,可能需要一系列工作项来组成用于销售新产品的新网页。工作项或任务包括,但不限于,提供产品的图片、提供产品的描述、搜索产品可供性等等。在本实例中,服务提供者组件104-1到104-N提供了实现或执行这些工作项的全部或部分的服务。如图1所示,服务提供者组件104也可与持久存储106交互,而非仅与工作流组件102直接交互。

给定这一系列工作项,工作流组件102首先定义这些工作项的执行。在上述组成新网页的示例中,工作流组件102定义了工作项的执行顺序,诸如在提供产品描述之前提供产品图片等等。另外,工作流组件102定义了其它规则,诸如最终期限和/或其它业务规则。例如,工作流组件102可施加组成新网页的完成最终期限,和/或当新产品对在线顾客可用时施加头两天的折扣,等等。可以理解,可以向工作流组件102提供用于执行工作项的其它规则和/或定义。

一旦定义了这些工作项系列,工作流组件102将这些工作项分配给一个或多个服务提供者组件104。现在参考图2,流程图依照本发明的一个实施例示出了通过服务提供者组件104对工作项的批处理。例如,在调用服务提供者组件之前,工作流组件102在208对一系列工作项创建批量工作。在210-1,工作流组件102通过向服务提供者组件A(例如,服务提供者组件104-1)发送消息来分配工作项(例如,提供新产品的图片)。换言之,工作流组件102将批量工作附加到对服务提供者组件A的操作的调用上。服务提供者组件A进而创建第一工作项,并将其追加到批量工作。类似地,工作流组件102通过212-1向服务提供者组件B(例如,服务提供者组件104-2)分配另一工作(例如,提供新产品的描述)。在一个实施例中,工作流组件102通过请求服务提供者组件A延迟对工作项的执行来向服务提供者组件A分配工作项。例如,工作流组件102请求服务提供者组件A直到工作流组件102指令服务提供者组件A执行之后才执行工作项。在另一实施例中,工作流组件102可创建一个或多个批量工作,其每一个包含要由各服务提供者组件104执行的一系列工作项。

可以理解,工作流组件102可请求服务提供者组件A执行工作项,并且服务提供者组件A将所分配的工作项的一方面追加到批量工作,而非追加整个工作项。例如,由服务提供者组件A追加到批量工作的工作项可以是来自工作流组件102的请求的数据库元素。在另一示例中,由服务提供者组件B追加到批量工作的工作项可以是来自工作流组件102的同一请求的不同方面。

也可以理解,可以发生工作流组件102和每一服务提供者组件(例如,服务提供者组件A)之间的多个交互。例如,工作流组件102可通过210-2向服务提供者组件A(或通过212-2向服务提供者组件B)分配一个以上工作项,并且服务提供者组件A通过214-2将一个或多个分配的工作项追加到批量工作(或者服务提供者组件B通过216-2将一个或多个分配的工作项追加到批量工作)。

在另一示例中,工作流组件102创建与分配给特定服务提供者组件的工作项相关联的批量工作。例如,工作流组件102可对来自服务提供者组件A的工作项创建批量工作,并对来自服务提供者组件B的工作项创建另一批量工作。由此,工作流组件102按需对每一服务提供者组件创建批量工作。

服务提供者组件A经由214-1,通过向批量工作追加或添加所分配的工作项来响应于工作流组件102。类似地,服务提供者组件B通过216-1向批量工作追加工作项。例如,使用上述示例,服务提供者组件104-1向工作流102发送它能够提供用于组成新网络的新产品图片的消息。类似地,服务提供者组件104-2向工作流组件102发送它能够提供新产品描述的消息。可以构想,工作流组件102可能不知道特定服务提供者组件104如何执行特定工作项的细节。使用上述为新产品组成新网页的示例,可要求服务提供者组件104-1访问包含大量产品图片的数据库,以定位该新产品的图片。类似地,可要求服务提供者组件104-2访问包含产品描述的数据库,和/或如果数据库中没有产品描述可用,可要求服务提供者组件104-2让人工干预来提供新描述。

尽管图2中仅示出了两个服务提供者组件A和B,然而可以理解,可向这些和其它服务提供者组件分配额外的工作项。也可以理解,服务提供者组件104可拒绝执行从工作流组件102分配的工作项。

在从服务提供者组件104接收到消息之后,工作流组件102在226创建用于持久保存工作项状态的包含批处理的工作项的事务。例如,工作流组件102可在预定点或时间创建事务。在218-1,工作流组件102请求服务提供者组件A持久保存批处理的工作项(例如,提供新产品的图片)。换言之,工作流组件102向服务提供者组件A请求批处理的工作项的执行状态。服务提供者组件A在222-1通过指示批处理的工作项的状态,诸如“未执行”、“已完成”、“正在执行”、“已放弃”等来响应工作流组件102。可以理解,可向工作流组件102提供对应于特定工作项的一个或多个其它状态。类似地,工作流组件102在220-1请求服务提供者组件B(例如,服务提供者组件104-2)持久保存批处理的工作项(例如,提供新产品的描述)的执行状态,并且服务提供者组件B在224-1响应该请求。

也可以理解,工作流组件102可向服务提供者组件A发送关于另一批处理的工作项的执行状态的多个请求(例如,218-2)。同样,服务提供者组件A可响应工作流组件102(例如,在222-2),以指示另一所请求的批处理的工作项的状态。

依照本发明的一个实施例,工作流组件102创建事务来持久保存状态。工作流组件102在批量工作上迭代,并收集用于服务提供者组件A的所有工作项。在这一情况下,工作流组件102维护工作项之间的顺序,以创建特定的批量工作。在提交点,工作流组件102在调用服务提供者组件A的操作时传递事务和批量工作。服务组件A将批量工作中的工作项添加到事务。换言之,工作项被持久保存。可对具有批量工作中的项的所有组件重复这些过程。在提交通知或消息成功之后,工作流102提交该事务。然后,在成功地提交事务之后,工作流组件102在该批量工作上迭代,并收集每一组件(如上所述,对服务提供者组件A)的所有工作项。

工作流组件102下一步将工作项的状态储存在由服务提供者组件104提供的持久存储106中。例如,服务提供者组件104提供其整个资源环境,诸如持久存储106,以供工作流组件102储存工作项的状态。类似地,交互(例如,图1中服务提供者组件104-N和持久存储106之间的箭头)是示出服务提供者组件104-N访问工作流102的持久存储106来存储工作项的状态的示例。也可以理解,尽管在图1中仅示出了一个持久存储106,多个持久存储可以对工作流组件102可用,以储存工作项的状态。持久存储106可以是用于储存诸如计算机可读指令、数据结构、程序模块或其它数据的易失性和非易失性、可移动和不可移动介质(例如,图5中的系统存储器134)。有了储存的工作项的持久状态,工作流组件102能够维护工作项的一致性。换言之,工作流组件102规则地对工作项设检查点,并在检查点处储存工作项的状态,以维护所有工作项的持久状态。

在228,工作流组件102提交事务。换言之,工作流组件102请求服务提供者组件104提交批处理的工作项的执行。再次参考上文组成新产品的新网页的示例,在工作流组件102分配了完成任务所需的所有工作之后,工作流组件102请求服务提供者组件提供新产品的图片、提供新产品的描述等等。可以理解,通过工作流的这一分配、批处理和提交,工作流组件102有助于解决在分配之后执行/实现工作项的垂直集成模型的劣势和缺点。通过提供这一延迟的执行,工作流组件102在要求工作项用于执行/实现时进行管理,同时维护了工作项的一致状态。同时,每一服务提供者组件104也具有其它服务提供者组件104在特定的批量工作或事务中所具有的工作项的一致视图。

作为示例而非局限,消息通信服务提供者组件中的“Send(发送)”消息可导致对包含特别SQL(结构化查询语言)的对象的构造。在这一示例中,消息通信服务提供者组件向批量工作添加对象,即Work(工作)项。在由工作流组件确定的预定提交点,创建事务。此外,将所有未决的已分配工作项给予该事务,并且指令服务提供者组件提交执行/实现这些工作项。此时,例如,消息通信服务提供者组件执行适用于执行SQL的任何动作作为事务的一部分。然后提交该事务。

现在参考图3,框图依照本发明的一个实施例示出了具有一个或多个追加的工作项的事务304。如所讨论的,工作流组件102创建包含批处理的工作项的一个或多个批量工作的事务。在一个实施例中,事务304是包含一个或多个事务302(例如,302-1到302-N)且实际上花费长时间来完成(例如,几个月)的长期运行事务。换言之,事务302可被批处理成另一长期运行的事务,诸如事务304。每一事务302可依照事务边界来组织,如在单独的框中示出每一事务302的图3所描述的。例如,事务302-1(例如,原子事务1)具有与事务302-2(例如,原子事务2)分离的边界。通过用其单独的边界来定义事务302,工作流组件102可对事务302设检查点,以确定事务302的状况/状态。例如,工作流组件102在308检查或监视事务302-1的状态。类似地,工作流组件102在306检查事务302-2的状态。通过对事务302的状态设检查点,工作流组件102维护事务302中的工作项的持久状态。

在另一示例中,每一事务302包括包含一个或多个工作项的一个或多个批量工作。例如,原子事务302-1包括批量工作(或作用域批量工作)310,它包含一个或多个工作项(未示出)。类似地,原子事务302-2包括批量工作(或作用域批量工作)312,它包含一个或多个工作项。可以理解,尽管在图3中的原子事务302-1中仅示出了一个批301,然而每一事务302可包含一个或多个批量工作或内部作用域批量工作。

在另一实施例中,在一个或多个工作项或整个事务由于错误而未执行的情况下,工作流组件102只需放弃错误的事务中的工作项,而由于定义的事务边界,其它事务不受影响。工作流组件102首先标识与错误作用域(例如,原子事务302-1中的作用域批量工作310)有关的所有工作项,并构造错误批量工作。工作流组件102然后调用每一唯一的待决工作项的“完成”状态,并对错误批量工作中的所有工作将已完成状态设为“错误”。此外,工作流组件102放弃该批量工作中的所有工作。本实施例中的运行库在从错误中恢复之后维护对所有剩余批量工作项的引用。工作然后可在未来的持久保存点被提交。

在上述组成新网页的示例中,假定服务提供者组件104-1在提交执行事务中的工作项之后无法提供新产品的图片。在维护事务的持久状态时,工作流组件102确定特定的工作项(例如,提供新产品的图片)被放弃或未完成。工作流组件102接下来放弃该事务(即,组成新网页)中的部分或所有工作项,而其它事务(例如,对其它物品下定单等)不受这一错误事务的影响。在一个实施例中,在完成了其它事务中的其它工作项之后或从错误中恢复之后,工作流组件102可维护错误事务的引用(例如,批处理的工作项、工作项定义等),使得工作流组件102可请求服务提供者组件104在稍后的时间再次提交工作项。

在又一实施例中,服务提供者组件104-1可向工作流组件102通知或发送消息,指示它无法完成所提交的工作项的执行。结果,工作流组件102可响应于接收到的消息放弃该工作项。

图4是依照本发明的一个实施例示出通过批处理未提交的工作来跨通信组件维护持久保存的状态的一致性的操作的示例性流程图。最初,工作流组件102定义包含一组要实现/执行的工作项的工作流。在402,工作流组件102创建批量工作。工作流组件102在404向服务提供者组件(例如,服务提供者组件104-1)分配工作项。例如,工作流组件102向服务提供者组件104分配工作项(例如,提供新产品的图片)。在406,服务提供者组件104创建所分配的工作项,并将其追加到批量工作。工作流组件102在408确定是否还有更多的工作项要被追加到批量工作以完成工作流。如果确定是肯定的,则工作流组件102继续到404,以收集要追加到批量工作的其它工作项。

如果确定是否定的,则工作流组件102在410创建事务。或者,工作流组件102可在预定时间或点创建事务。在412,工作流组件102收集由事务批处理的工作项。在414,工作流组件102持久保存工作项的状态。工作流组件102下一步在416提交事务的执行。即,工作流102请求服务提供者组件104执行/实现所分配的工作。可以理解,在服务提供者组件104提交工作项的执行之后,工作流组件102通过在图1的持久存储106中储存工作项的状态继续持久保存工作项的状态。

在418,工作流组件102通过周期性地对工作项/事务的状态设检查点来确定在提交的工作项的执行期间是否发生任何错误。在另一实施例中,服务提供者组件104向工作流组件102发送消息或通知工作流组件102,指示发生了错误。如果工作流组件102确定没有执行错误,则工作流组件102在420继续完成事务的执行。

或者,如果工作流组件102确定存在执行错误,或者在另一实施例中,服务提供者组件指示存在执行错误,则工作流组件102在422放弃与错误工作项/事务相关联的批量工作。换言之,工作流组件102放弃(错误作用域的)内部批量工作中的所有项,且工作流组件102维护周围作用域中的工作项,用于本实施例中的稍后的提交点。在424,工作流组件102完成非错误工作项的执行。工作流组件102在426维护与错误工作项相关联的工作的引用,并可继续令服务提供者组件104在稍后的时间提交错误的工作项(如由虚线所示的)。附录A提供了用于工作流事务批处理的示例性协议。

本发明通过实现包含具体化本发明的至少某些特征的工作项的批量工作,提供了优于常规工作流系统设计和建模的优点。在操作中,包含一个或多个组件或软件系统的软件系统包括管理工作流的工作流组件。工作流组件最初定义要由一个或多个服务提供者组件执行的工作流(例如,组成新产品的新网页)。例如,用于组成新网页的工作流可包括诸如提供新产品的图片、提供新产品的描述、确定新产品的可供性等工作项。可以理解,服务提供者组件可以在与工作流组件分离的软件系统、应用程序或包中。

工作流组件创建批量工作,并发送向服务提供者组件分配工作项的消息。服务提供者组件确定所分配的工作项是否可被执行/实现。如果确定是肯定的,则服务提供者组件将工作项追加到批量工作中。可以理解,通过这一批处理过程,工作流组件延迟了分配的工作项的实际上同时的执行。

工作流组件接下来创建包含批处理的工作项的事务。工作流组件通过对事务/工作项设检查点并将工作项的状态储存在持久存储中,来周期性地持久保存工作项的状态。通过这样做,工作流组件维护了工作项在各事务中的持久状态的一致性。工作流组件通过请求服务提供者组件执行/实现工作项来提交事务。

在发生执行错误的情况下,工作流组件放弃错误的工作项。工作流组件继续完成非错误工作项的执行。在一个实施例中,服务提供者组件向工作流组件发送指示发生执行错误的消息。在从错误执行中恢复或完成了非错误工作项的执行之后,工作流组件可在稍后的时间提交错误的工作项。

图5示出了计算机130形式的通用计算设备的一个示例。在本发明的一个实施例中,诸如计算机130等计算机适用于此处所示和描述的其它附图。计算机130具有一个或多个处理器或处理单元132以及系统存储器134。在所示的实施例中,系统总线136将包括系统存储器134的各种系统组件耦合至处理器132。总线136表示若干种总线结构类型的一种或多种,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各类总线体系结构的处理器或局部总线。作为示例而非局限,这类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线以及外围部件互连(PCI)总线,也称为Mezzanine总线。

计算机130通常包括至少某一形式的计算机可读介质。计算机可读介质可以包括易失性和非易失性介质、可移动和不可移动介质,可以是可由计算机130访问的任一可用介质。作为示例而非局限,计算机可读介质包括计算机存储介质和通信介质。计算机存储介质包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性,可移动和不可移动介质。例如,计算机存储介质包括RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、盒式磁带、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机130访问的任一其它介质。通信介质通常具体化为诸如载波或其它传输机制的已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,并包括任一信息传送介质。本领域的技术人员熟悉已调制数据信号,它以对信号中的信息进行编码的方式设置或改变其一个或多个特征。如有线网络或直接连线连接等有线介质,以及如声学、RF、红外和其它无线介质等无线介质是通信介质的示例。上述任一的组合也应当包括在计算机可读介质的范围之内。

系统存储器134包括可移动和/或不可移动、易失性和/或非易失性存储器形式的计算机存储介质。在所示的实施例中,系统存储器134包括只读存储器(ROM)138和随机存取存储器(RAM)140。基本输入/输出系统142(BIOS)包括如在启动时帮助在计算机130内的元件之间传输信息的基本例程,通常储存在ROM 138中。RAM 140通常包含处理单元132立即可访问和/或当前正在操作的数据和/或程序模块。作为示例而非局限,图5示出了操作系统144、应用程序146、其它程序模块148和程序数据150。

计算机130也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。例如,图5示出了对不可移动、非易失性磁介质进行读写的硬盘驱动器154。图5还示出了对可移动、非易失性磁盘158进行读写的磁盘驱动器156以及对可移动、非易失性光盘162,如CD-ROM或其它光学介质进行读写的光盘驱动器160。可以在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,盒式磁带、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器154、磁盘驱动器156和光盘驱动器160通常通过非易失性存储器接口,如接口166连接到系统总线136。

上文讨论并在图5示出的驱动器及其关联的计算机存储介质为计算机130提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图5中,示出硬盘驱动器154储存操作系统170、应用程序172、其它程序模块174和程序数据176。注意,这些组件可以与操作系统144、应用程序146、其它程序模块148和程序数据150相同,也可以与它们不同。这里对操作系统170、应用程序172、其它程序模块174和程序数据176给予不同的标号来说明至少它们是不同的副本。

用户可以通过输入设备,如键盘180和定位设备182(例如鼠标、跟踪球或触摸板)向计算机130输入命令和信息。其它输入设备(未示出)可包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线136的用户输入接口184连接至处理单元132,但是也可以通过其它接口和总线结构连接,如并行端口、游戏端口或通用串行总线(USB)。监视器188或其它类型的显示设备也通过接口,如视频接口190连接至系统总线136。除监视器188之外,计算机通常可包括其它外围输出设备(未示出),如扬声器和打印机,它们通过输出外围接口(未示出)连接。

计算机130可以使用到一个或多个远程计算机,如远程计算机194的逻辑连接在网络化环境中操作。远程计算机194可以是个人计算机、服务器、路由器、网络PC、对等设备或其它普通网络节点,并通常包括许多或所有相对于计算机130所描述的元件。图5描述的逻辑连接包括局域网(LAN)196和广域网(WAN)198,但也可包括其它网络。LAN 196和/或WAN 198可以是有线网络、无线网络、其组合等等。这类网络环境常见于办公室、企业范围计算机网络、内联网以及全球计算机网络(例如,因特网)。

当在局域网网络环境中使用时,计算机130通过网络接口或适配器186连接至LAN 196。当在广域网网络环境中使用时,计算机130通常包括调制解调器178或用于通过WAN 198,如因特网建立通信的其它装置。调制解调器178可以是内置或外置的,通过用户输入接口184或其它适当的机制连接至系统总线136。在网络化环境中,相对于计算机130所描述的程序模块或其部分可储存在远程存储器存储设备(未示出)中。作为示例而非局限,图5示出了远程应用程序192驻留在存储器设备上。示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它手段。

一般而言,计算机130的数据处理器通过在不同的时刻储存在计算机的各种计算机可读存储介质中的指令来编程。程序和操作系统通常分布在例如软盘或CD-ROM上。从那里,它们被安装或加载到计算机的次级存储器中。在执行时,它们被至少部分地加载到计算机的主电子存储器中。当这些和其它各种类型的计算机可读存储介质包含下文结合微处理器或其它数据处理器描述的步骤的指令或程序时,此处所描述的本发明包括这类介质。当依照此处所描述的方法和技术来编程时,本发明也包括计算机本身。

为说明起见,诸如操作系统等程序和其它可执行程序组件此处被示为离散的框。然而,可以认识到,这些程序和组件在不同的时刻驻留在计算机的不同存储组件中,并由计算机的数据处理器来执行。

尽管结合了包括计算机130的示例性计算系统环境来描述,然而本发明可用众多其它通用或专用计算系统环境或配置来操作。该计算系统环境并不旨在对本发明的使用范围或功能提出任何局限。此外,该计算系统环境不应当被解释为对示例性操作环境中所示的组件的任一个或其组合具有任何依赖性或要求。适用于本发明的公知的计算系统、环境和/或配置的示例包括但不限于,个人计算机、服务器计算机、手持式或膝上设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费者电子设备、移动电话、网络PC、小型机、大型机、包括任一上述系统或设备的分布式计算环境等等。

本发明可在诸如由一个或多个计算机或其它设备执行的程序模块等计算机可执行指令的一般上下文环境中描述。一般而言,程序模块包括但不限于,例程、程序、对象、组件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。本发明也可以在分布式计算环境中实践,其中,任务由通过通信网络连接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质中。

软件体系结构环境中的接口包括软件模块、组件、代码部分、或其它计算机可执行指令序列。接口包括,例如访问第二模块来代表第一模块执行计算任务的第一模块。在一个示例中,第一和第二模块诸如由操作系统提供的应用程序编程接口(API)、组件对象模型(COM)接口(例如,用于对等应用程序通信)、以及可扩展标记语言元数据交换格式(XMI)接口(例如,用于Web服务之间的通信)。

接口可以是诸如Java 2平台企业版(J2EE)、COM或分布式COM(DCOM)示例中的紧耦合的同步实现。或者或除此之外,接口可以是诸如Web服务(例如,使用简单对象访问协议)中的松耦合的异步实现。一般而言,接口包括以下特征的任一组合:紧耦合的、松耦合的、同步和异步。此外,接口可符合标准协议、专有协议、或标准和专有协议的任何组合。

此处所描述的接口可以都是单个接口的一部分,或者可以被实现为单独的接口或其中的任何组合。接口可以本地或远程地执行以提供功能。此外,接口可包括比此处所示或所描述的更多或更少的功能。

此处所示且描述的方法的执行或实现顺序不是必要的,除非另外指定。即,方法的元素可以用任何顺序来执行,除非另外指定,且方法可包括比此处所揭示的更多或更少的元素。例如,可以构想,在另一元素之前、与其同时或之后执行或实现特定元素是在本发明的范围之内。

当介绍本发明或其实施例的元素时,冠词“一”、“一个”、“该”和“所述”意指存在一个或多个元素。术语“包括”、“包含”和“具有”旨在包含性的,且意味着除所列出的元素之外还可以有其它元素。

鉴于以上内容,可以看到,实现了本发明的若干目标并获得了其它有利结果。

由于可在不脱离本发明的范围的情况下在上述产品和方法中做出各种改变,因此包含在上述说明书并在附图中示出的所有内容都应当被解释为说明性而非限制性的。

附录A

工作流事务批处理

在示例性工作流的执行期间,运行库调用其服务来完成工作。例如,发送工作流活动是对消息通信服务的调用。消息通信服务处理发送请求,并维护与发送相关联的特定状态。事务/持久模型的要求之一是维护由不同服务维护的状态和工作流运行库之间的一致性。当工作流到达提交点时,运行库调用持久服务并分发其工作流实例状态。该实例状态和其它服务工作可以被批处理,并被提交给参与单个事务的持久资源管理器(RM)。

如果B0和B1是单独的批量工作(例如,见图3中的事务304和原子事务302-N),在提交点,整个工作集合{B0,B1}需要在事务中提交。在事务失败时,要求是与B0相关联的工作被丢弃。与B1相关联的工作应当对随后的点继续存在。

依照本发明的一个实施例,为便于提供者在同一事务中共享,运行库在对其服务的所有调用的线程调用环境中浮动WorkBatch(批量工作)对象。服务可选择向该批量工作添加工作。例如,消息通信服务中的Send(发送)方法可导致构造包含特别SQL的对象。消息通信服务然后可将对象添加到WorkBatch。在预定提交点,调用消息通信服务IPendingWork.Complete方法,并且其所有待决的工作被退还给它。服务然后可执行适用于执行SQL的任何动作作为事务的一部分。

例如,名字空间Microsoft.Workflow.Runtime:

public sealed class WorkBatch

{

       public void Add(IPendingWork work,obj ect workItem);

}

Add方法可用于向批量工作添加待决的工作项。提供者用对实现IPendingWork接口的对象的引用来对添加到批量工作的工作加标签。该对象将处理工作的最终提交。在以下示例中,持久提供者本身实现IPendingWork接口。

接口IPendingWork被定义为:

interface IPendingWork

{

       void Commit(ITransaction transaction,IList<object>items);

       void Complete(bool succeeded,IList<object>items);

}

在Commit方法中,使用事务对象将工作项列表提交给数据库。

Complete方法执行必要的清除。该方法由运行库在完成了项列表中的工作的处理时调用。如果工作被成功地完成,则succeeded=true,否则succeeded=false。

作为对该示例的补充,提交点的动作序列包括:

a.运行库调用PersistenceService∷Save方法。

b.运行库调用TransactionService∷Create方法,并获取System.ICommitableTransaction

c.运行库在其工作集合上迭代,并收集引用同一IPendingWork对象的所有项。它然后每次调用每一唯一IPendingWork对象的Commit方法,传递Transaction和所有其未决工作的列表。

d.在Commit通知成功之后,运行库调用ICommittableTransaction∷Commit

e.在事务成功之后,运行库每次调用每一唯一IPendingWork对象的Complete方法,传递succeeded=true以及其所有未决工作的列表。

在工作流错误时的示例性动作序列包括:

a.运行库基于工作流模型语义(原子作用域)决定放弃与错误作用域有关的IPendingWork对象。

b.运行库对所有放弃的工作调用每一唯一IPendingWork的Complete方法,其中完成状态=false。

c.运行库维护对其语义告知它在从错误中恢复之后仍然有效的任何工作的引用。该工作然后可在未来的持久保存点提交。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号