摘 要 本文主要讨论如何实现不同定义语言的兼容性,同时设计一个组件为特定的工作流管理系统提供演进支持。对于不同的元模型(定义语言),此组件具有较好的适应性和可重用性。
关键词 工作流;定义语言兼容性;动态演进;工作流管理系统
1 引言
所谓工作流,就是工作任务在多个人或多个单位之间的流转,在计算机网络环境下,这种流转表现为信息或数据在多个人之间的传送。工作流管理系统(Workflow Management System,WFMS)就是通过管理一系列的工作活动以及相关人员、资源、信息技术资料来提供业务处理程序上的自动控制,其最大优点就是实现具体应用逻辑和过程逻辑的分离,实现在不修改具体功能的情况下,通过修改业务流程模板来改变系统的功能,完成对组织生产经营过程的部分业务或全部业务的集成管理,有效地把人力资源、物质资源和信息组织在一起,发挥最大的效能。
对业务过程的强大支持是企业获得成功的一个关键因素,工作流管理系统正是用来调整业务流程及实现业务过程自动化的软件系统。工作流管理系统并不是企业的业务系统,其本身并不执行任何业务逻辑,它只为业务系统提供一个运行环境。工作流系统可分为业务过程定义和业务过程执行两部分,定义部分称为流原型(WFT),执行单元称为工作流实例(WFI),一组工作流原型称为工作流元模型(workflow meta-mode),可以通过工作流元模型来描述工作流模型。元模型用抽象的语义描述了WFT所需的上层实体,并定义了如何表示WFT,其中一种元模型可以看作是一种工作流定义语言。定义语言、WFT、WFI的概念比较难以理解,可分别同C语言、C程序、C程序进程进行类比。
业务流程是企业应用中最活跃的部分,很难在设计阶段就提供完美的WFT以适应各种情况,因此工作流管理系统必须具备演进的能力。也就是说,即使实例已经在运行当中,也可以修改其定义,但任何修改都要保证模型与实例的正确性。一般情况下,如果没有正在运行的实例,那么对WFT的改动将不会带来什么问题。但如果一个正在被其他WFT所引用的WFT被删除时,整个工作流模型便失效了;如果WFT的改变与正在执行实例发生冲突的话,实例也就无效了。在实际生产生活中,工作流实例经常有一个较长的运行周期,因此工作流管理系统必须支持运行实例的修改,也就是在运行期间动态演进WFT。
关于工作流的动态演进问题,目前提出的解决方案有工作原型版本化(WFT versioning)以及工作流实例迁移(migration of WFT)。一个版本代表了演进实体的一个状态,当流程发生改变时不是直接修改WFT,而是给出该WFT的一个新版本,通过运用一系列定义良好的修改操作,使新版本继承自源版本,然后通过迁移算法使正在执行中的实例依据WFT的新版本继续执行。这种方法虽然解决了动态演进问题,但修改操作及迁移算法都绑定于特定的工作流定义语言,这意味着一旦定义语言改变,则修改操作及迁移算法都不得不重新实现,因此工作流管理系统应具备处理不同定义语言的能力。
本文将首先讨论如何实现工作流管理系统的定义语言无关性,在此基础上提出了一个WFT动态演进的方案,并设计了一个组件,它为特定的工作流管理系统提供演进支持,同时可兼容于不同的元模型(定义语言)。
2 实现工作流管理系统的定义语言无关性
工作流是由工作流定义语言进行描述的,目前存在许多定义语言,各种语言对工作流中相同的语义有着不同的描述。由于缺乏统一的标准,很难使WFT在不同的WFMS之间移植。每种定义语言都有一套自己的概念和结构,由WFMS解释这些概念和结构,一旦改变定义语言,则WFMS的相当一部分都要重写。由于各种语言都有自己的特长,倚重或偏废任何一个都不利于技术的整体发展,因此作为独立的工作流管理系统必须具备处理各种定义语言的能力。
可以采用“加一层”的办法来解决这个问题。在工作流定义与工作流执行引擎之间加一层所谓的“后台定义”,这样一来,由各种定义语言所描述的WFT就成了“前台定义”。如此划分可以减小不同定义语言所带来的影响,以便在工作流执行引擎的级别上保持相同的数据结构,下面通过微型工作流(micro-workflow)体系结构,来解释前、后台定义及其转换。