Figure 2: Interfaces of a WFMS

来源:百度文库 编辑:神马文学网 时间:2024/04/27 19:23:27
Figure 2: Interfaces of a WFMS

2007-03-14 13:46:48


定义:工作流系统的定义接口使流程开发人员能够部署流程定义。注意,这里的"流程开发人员"可以是业务分析师和软件开发人员的组合。 圈套(Pitfall)许多工作流管理系统的开发商想使你相信,通过使用他 们的图形化流程开发工具,只要业务分析师就可以生成流程定义。

 

这种幻想源于"编程很难"这样的事实。开发商的销售人员喜欢说"看,你不用写一行代码"。不用写代码是好事,可大部分开发商在这点上走的太远,忽略了在某些场合提供一种将代码集成到流程定义中的机制是很适合的。在将工作流系统作为EAI平台时,必须在流程中集成代码。开发流程定义需要业务分析师和软件开发人员的合作。一个好的图形流程设计工具应该能够支持这种合作。

 

执行:执行接口使用户和系统可以操作流程实例。流程实例是流程定义的执行。流程定义的控制流通过状态机描述。执行接口的两个主要方法是启动一个流程实例和通知工作流系统一个状态结束了。

 

应用:应用接口代表了由工作流系统发起的工作流系统和外部系统之间的交互。当一个用户或系统操作一个流程实例的运行时,会生成一些事件(如一个迁移的执行)。流程定义中可以指定一段响应一个事件的可执行代码逻辑,这段代码和组织内外部的其他系统打交道。
监控   管理人员通过监控接口获得流程运行的确切数据。有时,运行日志也可用于审计。
这些是WfMC参考模型(reference model of the WfMC)中定义的五个接口中的四个。

 

流程定义的四个层次

 

在下面这部分,我尝试回答这样的问题"什么是流程定义包括的内容?"。这是从各种规范和工具所使用模型的原则和概念中总结得来的,反映了大部分模型中通用的基本思想。流程定义的内容可以分为四个不同的层次:状态(state)、上下文(context)、程序逻辑(programming logic)和用户界面(UI)。
状态层
所有状态和控制流的表述,都属于业务流程的状态层。标准编程语言中的控制流来源于Von Neuman体系。控制流定义了必须被执行的指令的顺序,控制流由我们书写的命令、if语句、循环语句等确定。在业务流程中的控制流基本与此一致。但在业务流程中不是使用命令而是使用状态作为基本元素。

 

在流程中,状态 (或者说等待状态)代表了一种对外部参与者(actor)的依赖。状态的意思就像"现在X系统或某某人必须作某些事,在此等待直到参与者通知这些任务已完成"。状态定义了一种对外部提供结果的依赖。状态典型的例子是批准步骤(step)。

 

流程定义中的状态也指定了执行依赖于哪个参与者。在活动图中,泳道(swimlanes)的标注代表这些参与者的名字。工作流系统使用这些信息构建任务列表,这是一般工作流系统都有的功能。如前所述,参与者可以是人也可以是系统。对于需要人参与的状态,工作流系统必须在运行时计算出具体的个人。这样的计算使工作流系统必须依赖于组织结构信息。关于这方面的一篇非常有趣的文章是在further reading section提到的"工作流应用中的组织管理"( ‘Organizational Management in Workflow Applications‘)。

 

流程定义的控制流包含一组状态和它们之间的关系。状态之间的逻辑关系描述了哪些执行路径可以同时执行,那些不可以。同步执行路径用分叉(forks)和联合(joins)建模,异步执行路径用判断(decisions)和合并( merges)建模。注意在大多数模型中,在每个状态之前都有一个隐式合并。

 

UML活动图经常被用来做业务流程建模。作为一种直观和通用的表达,活动图在图形表述上有一个主要问题,就是没有区分状态和动作,它们都用活动来表示。缺少这种区分(导致状态概念的缺失)是学术派对UML活动图的主要批评。UML活动图的第二个问题是在UML2.0版中引入的。当多个迁移(transitions)到达一个活动时,以前的版本规定这是一个缺省合并(merge),在2.0版中规定这是一个需要同步的缺省联合(join)。在我看来,UML活动图的图形部分仍旧可以用来对业务流程状态层次建模,只要使用时对两条构建语义作如下的变化:

 

在用图形表述业务流程时,只建模状态层(状态和控制流),不要包括动作。这意味着图形中的矩形都是状态而不是活动

 

如果多个迁移到达一个状态,缺省定义为不需要同步的合并(merges)

 

在流程运行过程中,工作流系统用一个令牌(token)作为指针跟踪流程的状态。这相当于Von Neuman体系中的程序计数器。当令牌到达一个状态时,它被分配给工作流系统等待的外部参与者。外部参与者可以是个人、组织或者计算机系统。我们定义流程运行的执行人或系统为"参与者"(actor)。只有在工作流系统将令牌分配给一个参与者时,才需要访问组织结构信息。工作流系统通过分配令牌构建任务列表。

 

上下文层

 

流程上下文变量(process context variable) ,或简称变量,是与流程实例相关的变量。流程开发人员可以使用流程变量存储跨越流程实例整个生命周期的数据。一些工作流管理系统有固定数目的数据类型,另一些你可以定义自己的数据类型。

 

注意变量也可以用来存放引用( references)。一个变量可以引用如数据库中的记录、网络上的文件。什么时候使用引用,取决于使用引用数据的其他应用。

 

和流程变量相关的另一个令人感兴趣的方面是:工作流系统如何将数据转化为信息。工作流是用于组织内部跨越各种异构系统实现任务和数据协同的。对于业务流程中人工执行的任务,工作流系统负责从其他相关系统,如SAP、数据库、CRM系统、文档管理系统收集数据。在业务流程的每一个人工步骤,只有相关联的数据项被从异构系统中收集和计算。通过这种方式,从不同系统来的数据被转换并展现为信息。

 

程序逻辑层

 

如前所述,动作是在流程运行过程中,工作流系统响应指定的事件(event)执行的一段程序逻辑(programming logic)。程序逻辑可以是二进制或源代码形式的、用任何语言或脚本编写的软件。程序逻辑层是所有这些软件片断和关于在什么事件发生时调用它们的信息的组合。程序逻辑的例子包括发Email、通过消息代理发消息、从ERP系统中拿数据和更新数据库。

 

用户界面层

 

一个参与者通过向流程变量中填充数据的事件,来触发结束一个状态。比如,在请假的例子中,老板提供"同意"或"不同意"数据到流程中。某些工作流系统允许指定哪些数据可以填充到流程中,以及它们如何在流程变量中存储。通过这些信息,可以生成从用户收集信息的UI表单。基于流程定义生成用户提交表单的Web应用例子,可以访问the jBpm online demo。

 

工作流全景

 

可执行流程与工作流管理系统的比较(Executional processes versus a WFMS)
当前在BPM领域中,关于可执行业务流程的规范有趋向于统一集中的趋势。 XLANG, WSFL 和BPML合并为基于交互(消息交换)的BPEL。BPEL在面向服务体系结构(SOA)的大背景下定义。它的前提条件之一是涉及的服务必须用WSDL声明。BPEL规定了一套XML语法,这套语法可以看作一种编程语言,用来描述包括对WSDL定义的服务调用的控制流。
在可执行业务流程和基于状态的工作流管理系统所使用的方法中,我注意到了三点主要的区别:

 

基于状态与面向消息:基于状态的工作流系统以状态(或者活动)概念为中心。工作流引擎维护状态并计算从一个状态到另一个状态的迁移。另一方面,像BPEL这样的可执行流程以对输入消息响应的定义为中心。一组这些响应外加其他信息(other bells and whistles)可以看作一个业务流程。这也解释了为什么BPEL可以看作是对基于状态的工作流系统的某些方面的补充。一个响应输入消息的BPEL onMessage事件处理器,可以在工作流状态之间的迁移中执行。

 

流程实例ID与消息相关处理:可执行业务流程的复杂性之一来自消息相关性的处理。流程描述的一部分必须说明BPEL引擎如何从输入消息中确定具体流程的标识。这必须基于输入消息的一个数据项。而工作流系统在每个流程实例生成同时生成了实例ID,客户端在后续调用引擎API时使用这个ID。

 

工作流引擎API与抽象服务端点(endpoint):工作流系统提供一组集中的API,客户端通过调用API完成与所有流程实例的交互。在可执行业务流程中,每个流程表现为一个服务。这意味着对于每个流程定义都有一个不同的访问点。

 

学术界

 

学术界对工作流的研究可以回溯到上个世纪七十年代。在当前,研究领域趋向于认为petr 网是所有流程定义语言之母。关于petri网已有大量先进的分析技术,去年在 2003 conference on Business Process Management上我有幸会晤了Petri教授。对于大部分人能够访问和理解的有关Petyri网最好的研究之一是工作流模式(workflow patterns)。工作流模式比较了大量的工作流管理系统并以petri网的术语表述了通用流程建模概念。

 

开放源代码项目

 

最后我们看看真实世界中的工作流管理系统。选择一个工作流管理系统是一件困难的事情,但有选择总比没有选择好。:-) 本文阐述工作流基本概念的目的之一,就是使你能够作更好的选择。但我也意识到,对于现在的软件架构师来说,选择工作流系统是一件最具挑战性的工作。

 

下面的列表来源于三个地方:my previous article, the list of Carlos E Perez, 和 list by Topicus.
jBpm - jBpm是本文作者编写的一个灵活可扩展的工作流管理系统。作为jBpm运行时server输入的业务流程使用简单强大的语言表达并打包在流程档案中。jBmp将工作流应用开发的便利性和杰出的企业应用集成(EAI)能力结合了起来。jBmp包括一个Web应用程序和一个日程安排程序。jBmp是一组J2SE组件,可以作为J2EE应用集群部署。

 

OpenEbXML - OpenebXML项目致力于提供一个ebXML框架,主要支持不久将由 UN/CEFACT和OASIS发布的ebXML规范2.0版。

 

Werkflow - Werkflow是一个灵活可扩展的基于流程和状态的工作流引擎。它的目标是满足可以想象的所有工作流程,从企业级的业务流程到小范围的用户交互流程。通过使用可插拔和分层结构,可以方便地容纳各种工作流语义。

 

OSWorkflow - OSWorkflow最独到之处是绝对的灵活。 wfmOpen - WfMOpen是WfMC和OMG中所谓工作流设施(workflow facility) (工作流引擎)的J2EE实现。工作流通过扩展的XPDL描述。 OFBiz - OFBiz工作流引擎基于WfMC和OMG的规范,使用XPDL作为流程定义语言。 ObjectWeb Bonita - Bonita是一个符合WfMC规范、灵活的协同工作流系统。 对于各种动作如流程概念建模、定义、实例化、流程控制和用户交互等提供了全面的集成图形工具。 100% 基于浏览器、使用SOAP和XML数据绑定技术的Web Services封装了已有的工作流业务方法并将它们以基于J2EE的Web Service形式发布。基于活动预测模型的第三代工作流引擎。

 

Bigbross Bossa -速度非常快、轻量级的引擎,使用富有表达能力的Petri网定义工作流,不要求关系数据库,使用简单,能和Java应用集成。事实上,它是按嵌入式设计的。
XFlow - XFlow运行于EJB和servlet容器中。 Taverna - Taverna项目的目标是提供一种语言和软件工具,方便在eScience中使用工作流和分布计算技术。 Enhydra Shark - Shark完全基于WfMC和OMG标准,使用 XPDL作为工作流定义语言。流程和活动的存储使用Enhydra DODS。 PowerFolder - PowerFolder包括开发人员使用的studio,管理环境和一个运行时引擎。
Breeze - Breeze一个轻量级、跨平台、基于组件的工作流引擎原型。 Open Business Engine - Open Business Engine是一个开放源码的Java工作流引擎,支持WfMC规范,包括接口1(XPDL)、接口2/3(WAPI)和接口5。OBE为活动的运行提供了一个可控的集中环境。OBE主要基于J2EE实现。

 

OpenWFE - OpenWFE是一个开放源码的Java工作流引擎。 它包括可升级的三个组件:引擎、工作列表和Web界面。它的流程定义语言虽然使用XML格式,其灵感来源于 Scheme,一种Lisp方言。 Freefluo - Freefluo是一个使用Web Service的工作流协同工具,可以处理WSDL的Web Service调用。支持两种XML格式的工作流语言:IBM的WSFL和XScufl。Freefluo非常灵活,它的核心是不与任何工作流语言或执行架构关联的可重用协同框架。 Freefluo包括可执行使用WSFL一个子集描述的工作流的运行库。

 

ZBuilder - ZBuilder3是第二代工作流开发管理系统,也是一个开放源码产品。它为不同的工作流引擎和工作流定义了一组标准的JMX管理接口。

 

Twister - Twister的目标是提供新一代、易集成、应用Java领域中最新成果、面向B2B的工作流解决方案。流程引擎基于BPEL业务流程规范和Web Service标准。 Con:cern - con:cern工作流引擎基于扩展的案例(case)处理方法,流程由一组具有前后条件的活动组成。

 

商业软件提供商
Bea‘s WLI
Carnot
Dralasoft
Filenet
Fujitsu‘s i-Flow
IBM‘s holosofx tool
Intalio
Joinwork (译者加:-) )
Lombardi
Oakgrove‘s reactor
Oracle‘s integration platform
Q-Link
SAP‘s NetWeaver
Savvion
Seebeyond
Sonic‘s orchestration server
Staffware
Ultimus
Versata
WebMethod‘s process modeling
工具目录
http://dmoz.org/Computers/Software/Workflow/Products/
A collection of links to tools for modelling business processes and workflows maintained by Bart-Jan Hommes at TU Delft, the Netherlands.

 

规范
Michael zur Muehlen作了一个所有工作流相关规范的介绍性的幻灯片,很不错。
我同意John Pyke 和 Wil van der Aalst 的观点:工作流标准还处于制定阶段。现在存在大量相互丛叠的规范。

 

在我看来,导致规范如此之多而同时每个规范的应用又很有限的原因是,在工作流最基础概念上大家达成的共识很少。工作流是最容易让你感到心烦的话题,因为工作流本身的概念会和其他相关概念和技术混淆在一起。可以举一个具体的例子,比如说工作流完全是对Web Service的补充。你可以通过暴露接口以Web Service的方式访问一个工作流管理系统,但是不能假定总是必须通过Web Service接口访问工作流系统接口。一些规范造成了这样的假设。除了Web Service,其他容易混淆的概念和技术包括:Email、流程之间的通讯、Web应用和组织结构。

 

在工作流领域第一个致力于标准化工作的是Workflow Management Coalition (WfMC),开始于 1993。 WfMC发布的参考模型很不错,它定义了工作流管理系统和其他相关部分之间的接口。WfMC的另一项成果是XPDL规范。 XPDL定义了描述工作流声明部分(declarative part)的XML结构。我个人认为,参考模型和XPDL是目前最好的规范。

 

JSR 207: Java的流程定义 -是由Java Community Process (JCP) 发起,如何在J2EE应用服务器中实现业务流程自动化的标准。其基本模型是定义一个特殊类型的ejb session bean,作为一个业务流程的接口。JSR207标准化一组XML元标记(meta tags)作为JSR175元数据的一部分。JSR207 将session bean和元数据作为ejb容器的输入,然后生成绑定方法的代码,这些方法在元数据中描述。此规范还处于初级阶段,没有发布任何内容。专家小组成立于 March 2003.

 

WfMC‘s XPDL - WfMC是由约300家成员参加的组织,基于参考模型定义了一系列的标准。参考模型用用例(use case)的形式描述了工作流系统和其他相关部分之间的关系。XPDL是WfMC制定的描述业务流程控制流(control flow )的XML格式规范。

 

ebXML‘s BPSS - ebXML是协同流程的相关标准集,主要关注不同公司流程之间的通讯。可以看作EDI的继承者。 ebXML是由OASIS和UN/CEFACT联合发起。 BPSS 是ebXML的规范,其中的概念和本文阐述的很接近。

 

BPMI‘s BPML & WSCI - (Intalio, Sun, SAP, ...)BPMI 也定义了一个规范 (BPMN) ,描述如何将"可执行"业务流程可视化的表现。

 

BPEL - (Microsoft, BEA, IBM, SAP & Siebel) BPEL由一系列基于消息交换的规范( XLANG, WSFL, BPML)产生。还有一个将此规范引入到Java的提案: BPELJ。 此规范描述如何处理输入的消息,而不是对流程状态进行建模。就像本文提到的,它不是一个关于业务流程规格化定义的规范。简单的说,可以将它看作XML形式的编程语言,提供将WSDL-Services组合成控制流的能力。顾名思义,此规范重点在(也不只限于)Web Service。 OMG‘s Workflow management facility - 基于WfMC规范,定义如何向CORBA转换。

 

UML - UML定义了建模和设计软件系统的9类图。每类图包括可视化的表示和语义。其中活动图的目的就是要可视化的表现业务流程。 注意到在一个流程定义包含四个层次的内容,我想指出的是:一个流程定义包含的内容远远多于它的可视化部分。UML只涉及了可视化部分。

 

RosettaNet - RosettaNet主要定义了一组 Partner Interface Processes (PIP). 一个 PIP 描述了一个有两个交易参与者、包括消息格式的流程。 UBL - The Universal Business Language (UBL)定义了用于不同组织间通讯的XML文档标准库。可以看作是对ebXML的补充,因为ebXML只定义了建立组织间流程的基础。此规范的竞争对手是 RosettaNet标准中的一个子集。