工作流引擎内核入门

http://blog.csdn.net/vebasan/article/details/4505543

        1. 引言
        以WfMC,OASIS,OMG三大组织为代表的群体,围绕BPM相关规范,持续的争论。
        真是一流企业卖标准,二流企业卖技术。当新一轮技术浪潮围绕着BPM展开时,国际上相关厂商首先把眼光放在了“规范”上。这个规范最早是以WfMC为代表的“业务流程开发商”,他们主要拥护以XPDL作为描述语言来描述业务流程;之后是以OASIS组织为代表的,被IBM,MicroSoft,BEA所拥护的BPEL/BPEL4WS规范;之后向来以规范著称的OMG组织也不甘示弱,联合BPMI组织,独辟蹊径以Notation Specification为入口,首先推出了BPMN规范,进而推出了BPDM,也妄想分一杯业务流程描述规范。
        今年6月份,在OMG联合BPTrend、BPMI所发起的“BPM Think Tank Day”讨论会中,三大阵营代表及支持者是各不相让,当然作为主办方也借此机会大肆鼓吹其BPDM的统一设想。
        自从这个Think Tank Day之后,围绕着BPMN,BPDM,BPEL,XPDL之间的讨论在各大BPM相关站点上持续升温。毕竟这几个规范都相应的重量级组织在支持,也有相应的厂商在支持和实现。
        可惜这场“规范”之战,对国内来说,似乎远在天边,没有任何影响。
        国内的开发商依然习惯了泰然处之,既来之则安之——好像哪家规范都对,也都无所谓。早些年大家接受了XPDL;后来见IBM、BEA等大厂商大肆鼓吹BPEL,有些厂商也是蠢蠢欲动了。
        2. 什么是工作流管理系统(WFMS)
        2.1. 概述
        企业在进行业务处理时,政府在进行公文审批时,都是以流程形式而进行的,在信息化的过程中,企业、政府也将这些业务处理、公文审批的过程信息化了,早期通常是通过程序硬编码的方式来处理这些业务、公文的流转,随着业务、公文的复杂的处理情况不断出现以及需求的不断变更,这种硬编码的方式显然已无法应对,这个时候工作流管理系统应运而生,掀起了一股工作流管理系统的热潮。
        那么到底工作流管理系统能够带来什么好处?工作流管理系统通过对业务、公文流转进行分析以及抽象,将不变和变化的部分进行划分,用户可轻松的通过可视化的工具对事项的流程、流程环节涉及的人员(角色)、流程环节的表单、流程环节的操作进行修改,从而到达了应对不断变化的需求的目的,而工作流管理系统通常提供的流程监控、查询统计模块更是极大程度的为用户优化流程提供支持,以提高企业、政府的工作效率。
        本文主要描述工作流管理系统通常的结构、参考模型以及通常使用的调度算法。
        2.2. 构成
        工作流管理系统,简称WFMS,经过对业务、公文流转过程的分析以及抽象,工作流管理系统围绕业务交互逻辑、业务处理逻辑以及参与者三个问题进行解决,业务交互逻辑对应的为业务的流转过程,在工作流管理系统中对应的提出了工作流引擎、工作流设计器、流程操作来解决业务交互逻辑的问题,业务处理逻辑对应业务流转过程中的表单、文档等的处理,在工作流管理系统中对应的提出了表单设计器、与表单的集成来解决业务处理逻辑的问题,参与者对应到的为流转过程中环节对应的人或程序,在工作流管理系统中通过与应用程序的集成来解决参与者的问题。
        工作流管理系统为方便业务交互逻辑、业务处理逻辑以及参与者的修改,多数通过提供可视化的流程设计器以及表单设计器来实现,为实现工作流管理系统的扩展性,多数提供了一系列的API。
        一个完整的工作流管理系统通常由工作流引擎、工作流设计器、流程操作、工作流客户端程序、流程监控、表单设计器、与表单的集成以及与应用程序的集成八个部分组成。
        2.2.1. 工作流引擎 
        工作流引擎作为工作流管理系统的核心部分,主要提供了对于工作流定义的解析以及流程流转的支持。工作流定义文件描述了业务的交互逻辑,工作流引擎通过解析此工作流定义文件按照业务的交互逻辑进行业务的流转,工作流引擎通常通过参考某种模型来进行设计,通过调度算法来进行流程的流转(流程的启动、终止、挂起、恢复等),通过各种环节调度算法(SPLIT、AND、OR等)来实现对于环节的流转(环节的合并、分叉、选择、条件性的选择等)。
        2.2.2. 工作流设计器
        工作流设计器为可视化的流程设计工具,用户通过拖放等方式来绘制流程,并通过对于环节的配置来实现环节操作、环节表单、环节参与者的配置。
        工作流设计器为用户以及开发商提供了快速绘制、修改流程的方式,工作流设计器的好坏决定到工作流管理系统的易用性。
        2.2.3. 流程操作
        流程操作指所支持的对于流程环节的操作,如启动流程、终止流程、挂起流程、直流、分流(单人办理)、并流(多人同时办理)、联审等,象这些流程操作都是可直接基于引擎所提供的环节调度算法来直接支持的,而在实际的需求中,通常需要自由的对于流程进行干涉,如取回、回退、跳转、追加、传阅、传阅办理等,而这些流程操作对于工作流引擎来说是不合理的,因此必须单独的去实现。
        流程操作支持的好坏直接决定到一个工作流管理系统的实用性。
        2.2.4. 工作流客户端程序
        工作流客户端程序为工作流系统的表现形式,通常使用Web方式进行展现,通过提供待办列表、已办列表、执行流程操作、查看流程历史信息等来展现工作流系统的功能。
        2.2.5. 流程监控
        流程监控通过提供图形化的方式来对流程执行过程进行监控,包括流程运转状况,每个环节所耗费的时间等等,而通过这些可相应的进行流程的优化,以提高工作效率。
        2.2.6. 表单设计器
        表单设计器为可视化的表单设计工具,用户通过拖放的方式来绘制业务所需的表单,并可相应的进行表单数据的绑定。
        表单设计器为客户以及开发商提供了快速修改表单的方法,表单设计器的易用与否以及功能的完善与否影响到工作流管理系统的易用性。
        2.2.7. 与表单的集成
        通常业务流转需要表单来表达实际的业务,因此需要与表单进行集成来实现业务意义,与表单的集成通常包括表单数据的自动获取、存储、修改,表单域的权限控制、流程相关数据的维护以及流程环节表单的绑定。
        与表单的集成的好坏影响到工作流管理系统是否能提高开发效率。
        2.2.8. 与应用程序的集成
        通过与应用程序的集成来完善工作流管理系统的业务意义,主要涉及到的是与权限系统以及组织机构的集成。流程环节需要相应的绑定不同的执行角色,而流程操作通常需要与权限系统、组织机构进行关联。
        2.3. 参考模型
        工作流系统通常通过参考一些标准的模型来进行设计,主要的有WFMC和OMG,在这里主要介绍一下WFMC。
        2.3.1. WFMC
        WFMC是国际工作流管理联盟,它于1993年成立,发布了一系列的工作流定义、软件接口的草案文本,是目前世界上公认的最具权威性的工作流标准制定机构,得到了广泛的支持和应用。
        2002 年10月25日,WFMC发布了基于XML的流程定义语言1.0版的最终文本(Workflow Process Definition Interface----XML Process Definition Language 文档编号:WFMC-TC-1025),以及此前发布的工作流应用软件接口规范WFMC-TC-1009, WFMC-TC-1013等系列文件,构成了工作流定义及系统的设计标准。
        为了实现不同工作流产品之间的互操作,WfMC在工作流管理系统的相关术语、体系结构及应用编程接口等方面制定了一系列标准。工作流管理联盟给出的工作流定义是:工作流是指整个或部分经营过程在计算机支持下的全自动或半自动化。在实际情况中可以更广泛地把凡是由计算机软件系统(工作流管理系统)控制其执行的过程都称为工作流。
        一个工作流包括一组活动及它们的相互顺序关系,还包括过程及活动的启动和终止条件,以及对每个活动的描述。工作流管理系统指运行在一个或多个工作流引擎上用于定义、实现和管理工作流运行的一套软件系统,它与工作流执行者(人、应用)交互,推进工作流实例的执行,并监控工作流的运行状态。
        WFMC主要提出了五个接口与工作流执行服务一起共同组成了工作流系统:
        *接口一(工作流定义交换),用于在建模和定义工具与执行服务之间交换工作流定义。主要是数据交换格式和API。数据交换通过XPDL,API通过WAPI。
        *接口二(工作流客户端应用接口),用于工作流客户端应用访问工作流引擎和工作列表,通过WAPI完成。
        *接口三(被调用的应用接口),用于调用不同的应用系统。
        *接口四(工作流系统互操作接口),用于不同工作流系统之间的互操作。
        接口五(系统管理和监控),用于系统管理应用访问工作流执行服务。
        2.4. 核心调度算法
        通常流程引擎采用的核心调度算法主要有FSM以及PetriNet两种,基于调度算法来完成流程的流转。
        2.4.1. FSM(有限状态机)
        FSM 的定义为包含一组状态集(states)、一个起始状态(start state)、一组输入符号集(alphabet)、一个映射输入符号和当前状态到下一状态的转换函数(transition function)的计算模型。当输入符号串,模型随即进入起始状态。它要改变到新的状态,依赖于转换函数。在有限状态机中,会有有许多变量,例如,状态机有很多与动作(actions)转换(Mealy机)或状态(摩尔机)关联的动作,多重起始状态,基于没有输入符号的转换,或者指定符号和状态(非定有限状态机)的多个转换,指派给接收状态(识别者)的一个或多个状态,等等。
        遵循FSM流程引擎通过状态的切换来完成流程的流转。
        2.4.2. PetriNet
        信息流的一个抽象的、形式的模型。指出一系统的静态和动态性质。petrinet通常表示成图。遵循PetriNet流程引擎通过令牌来决定流程的流转。
        注1: 
        目前国外一些大规模、分布式的工作流系统的建模工具就采用的是基于Petri网的图形化建模方式。
        注2: 
        Petri网工具
        3. 透过XPDL来讲解什么是工作流描述语言和基本元素
        3.1. XPDL基本元素介绍
        Package元素
        DataField元素
        WorkflowProcess元素
        Activity元素
        Implementation元素
        Tool元素
        TransitionRestricti
        4. jPdl规范
        5. bpel规范
        5.1.1. 背景知识
        面向 Web 服务的业务流程执行语言(BPEL 或 BPEL4WS)是一种使用 Web 服务定义和执行业务流程的语言。BPEL 使您可以通过组合、编排和协调 Web 服务自上而下地实现面向服务的体系结构 (SOA)。BPEL 提供了一种相对简单易懂的方法,可将多个 Web 服务组合到一个新的复合服务(称作业务流程)中。
        本文将介绍如何创建一个将一系列虚拟的、与旅行相关的 web 服务结合起来的示例业务流程,然后将其部署到 Oracle BPEL Process Manager 运行时环境。
        首先,介绍一些背景知识。BPEL 基于 XML 和 Web 服务构建;它使用一种基于 Web 的语言,该语言支持 web 服务技术系列,包括 SOAP、WSDL、UDDI、Web 服务可靠性消息、Web 服务寻址、Web 服务协调以及 Web 服务事务。
        BPEL 流程指定参与的 Web 服务的确切调用顺序 - 顺序地或并行地。使用 BPEL,您可以表述条件行为。例如,某个 Web 服务的调用可以取决于上次调用的值。还可以构造循环、声明变量、复制和赋予值、定义故障处理程序等。通过组合所有这些构造,您可以以算法的形式定义复杂业务流程。实际上,由于业务流程本质上属于活动图,因此使用统一建模语言 (UML) 活动图表示它们可能很有用。
        通常情况下,BPEL 业务流程接收请求。为了满足请求,该流程调用相关的 Web 服务,然后响应原始调用方。由于 BPEL 流程与其他 Web 服务通信,因此它在很大程度上依赖于复合型 Web 服务调用的 Web 服务 的 WSDL
        5.1.2. 如何构建业务流程
        BPEL 流程指定参与的 Web 服务的确切调用顺序 - 顺序地或并行地。使用 BPEL,您可以表述条件行为。例如,某个 Web 服务的调用可以取决于上次调用的值。还可以构造循环、声明变量、复制和赋予值、定义故障处理程序等。通过组合所有这些构造,您可以以算法的形式定义复杂业务流程。实际上,由于业务流程本质上属于活动图,因此使用统一建模语言 (UML) 活动图表示它们可能很有用。
        通常情况下,BPEL 业务流程接收请求。为了满足请求,该流程调用相关的 Web 服务,然后响应原始调用方。由于 BPEL 流程与其他 Web 服务通信,因此它在很大程度上依赖于复合型 Web 服务调用的 Web 服务 的 WSDL 描述。
我们来看一个示例。一个 BPEL 流程由多个步骤组成,每个步骤称作“活动”。BPEL 支持基元活动和结构活动。基元活动表示基本构造,用于如下所示的常见任务:
        * 使用 调用其他 Web 服务
        * 使用 (接收请求)等待客户端通过发送消息调用业务流程
        * 使用 生成同步操作的响应
        * 使用 操作数据变量
        * 使用 指示故障和异常
        * 使用 等待一段时间
        * 使用 终止整个流程。
        然后,我们可以组合这些基元活动以及其他基元活动,以定义准确指定业务流程步骤的复杂算法。为组合基元活动,BPEL 支持几个结构活动。其中最重要的是:
        * 顺序 (),它允许定义一组将按顺序调用的活动。
        * 流 (),用于定义一组将并行调用的活动
        * Case-switch 构造 (),用于实现分支
        * While (),用于定义循环
        * 使用 能够选择多个替换路径之一。
        每个 BPEL 业务还将使用 定义合作伙伴链接,使用 声明变量。
        为了理解 BPEL 是如何描述业务流程的,我们将定义雇员出差安排的简化业务流程:客户端调用此业务流程,指定雇员姓名、目的地、出发日期以及返回日期。此 BPEL 业务流程首先检查雇员出差状态。我们将假设存在一个可用于进行此类检查的 Web 服务。然后,此 BPEL 流程将检查以下两家航空公司的机票价格:美国航空公司和达美航空公司。我们将再次假设这两家航空公司均提供了可用于进行此类检查的 Web 服务。最后,此 BPEL 流程将选择较低的价格并将出差计划返回给客户端。
        然后,我们将构建一个异步 BPEL 流程。我们将假设用于检查雇员出差状态的 Web 服务是同步的。由于可以立即获取此数据并将其返回给调用方,因此这是一个合理的方法。为了获取机票价格,我们使用异步调用。由于确认飞机航班时刻表可能需要稍长的时间,因此这也是一个合理的方法。为简化示例,我们假设以上两家航空公司均提供了 Web 服务,且这两个 Web 服务完全相同(即提供相同的端口类型和操作)。
        在实际情形下,您通常无法选择 Web 服务,而是必须使用您的合作伙伴提供的服务。如果您有幸能够同时设计 Web 服务和 BPEL 流程,则应考虑用哪个接口更好。通常,您将对持续时间较长的操作使用异步服务,而对在相对较短的时间内返回结果的操作使用同步服务。如果使用异步 Web 服务,则 BPEL 流程通常也是异步的。
        当您用 BPEL 定义业务流程时,您实际上定义了一个由现有服务组成的新 Web 服务。该新 BPEL 复合 Web 服务的接口使用一组端口类型来提供类似任何其他 Web 服务的操作。要调用用 BPEL 描述的业务流程,则必须调用生成的复合 Web 服务。 

posted on 2014-09-12 20:41  白乔  阅读(925)  评论(0编辑  收藏  举报

导航