`
ww2
  • 浏览: 401158 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

轻量级工作流引擎的设计与实现

阅读更多

第一章    <!----><o:p></o:p>

1.1 轻量级工作流引擎的概念 <o:p></o:p>

轻量级的工作流引擎指的是从够用、灵活和低成本的设计原则出发,不追求工作流引擎的功能的完备和复杂,只是实现其中必不可少的功能和特征。在设计工作流引擎时主要考虑对其数据模型的定义和解释、活动之间的协调以及任务的分配和控制等功能提供支持,而不支持诸如提供内建(built-in)的应用开发工具、对应用资料的定义和完整性维护、完善的异常处理以及长事务控制等功能。轻量级工作流引擎的概念的提出,给开发工作流管理系统的开发人员开辟了一条新的道路。工作流管理技术本身就是一项抽象复杂的技术,它致力追求从企事业各种各样的业务中抽取出一个通用的模型,由这个模型去描述所有业务的一致性,以达到“放之四海皆可用”的程度。不过,要把众多的而又错综复杂的业务都集中在这个模型中,这是一件非常困难的工作,要经过一段漫长的摸索历程。而轻量级的概念让我们认识到可以从一般性的而又简单的业务入手,为企事业快速的开发出一个适应他们本身业务需求的而又带有可扩展性可移植性的信息管理系统,为他们提高工作效率,并保证在一段很长的时间内满足不断增加的业务需求。<o:p></o:p>

1.2 工作流管理系统的分类及本文的侧重点<o:p></o:p>

       根据工作流过程本身的特点、系统建模的方式、所使用的底层支撑技术、以及工作流过程的执行方式等的不同而对工作流管理系统进行相应的分类。<o:p></o:p>

1.2.1 面向文档的与面向过程的<o:p></o:p>

       前者的侧着点在于将电子形式的文件、图像等在有关的人员之间进行分发,以便能够得到不同人的处理与审阅。现有的文件管理与映像管理系统均属此类。在面向过程的WFMS中,工作流被描述成一序列执行环节。与各环节相应都有待处理的资料对象。各环节的资料对象可以按不同的方式分发到其它环节中去,如可以将资料对象的值作为控制条件、或者依此资料对象组装成其它的资料对象等。高端的WFMS一般都属此类系统。<o:p></o:p>

1.2.2 结构化的与即席的<o:p></o:p>

    结构化工作流指的是在实际工作过程中会反复重复、严格按照某个固定的步骤进行的业务过程。定义此种工作流所需要的各种类型的信息可以通过对业务过程进行详细的分析而得到,从而得到完整的过程定义并在以后的应用过程中反复使用。大量的办公程序,如公文处理、审批等都属此类。即席工作流则是针对那些重复性不是很强或没有重复性的工作流程的,关于这类流程执行所需的有关参数(如参加者等)事先无法确定,而必须推迟到过程实例运行时才能确定,同时在执行过程中间还可能会发生一些意外的情况。这种动态多变的特点在提供更高灵活性的同时,也为过程的建模与执行带来更多的复杂性。<o:p></o:p>

1.2.3 基于邮件和基于数据库<o:p></o:p>

    前者使用电子邮件来完成过程实例执行过程中消息的传递、资料的分发与事件的通知。低端的系统所使用的经常就是此种方法,它可以充分发挥电子邮件系统在广域环境下的资料分发功能,但整个系统将运行于一种松散耦合的模式下。在基于数据库的WFMS中,所有的资料都保存在某种类型的DBMS中,过程的执行实际上就是对这些资料的查询与处理。高端的大规模系统所使用的一般都是此种方法。<o:p></o:p>

1.2.4 任务推动的与目标拉动的<o:p></o:p>

    前者指的是从过程的开始逐步地一个环节一个环节的执行,当某个活动实例被处理完之后,后续的有关活动将被创建并被激活,由此直至整个工作流程的完成。这是目前大多数面向过程的WFMS所使用的执行方式。而在目标拉动的WFMS中,一个业务流程被看成是一个目标。过程实例执行时,该目标将被分解得到多个相互之间按一定约束条件的关联起来的可执行的多个环节,其中各环节还可以当成是子目标而进一步进行分解。在各环节均执行完毕之后,整个过程也就完成了。目标拉动是一种全新的执行方式,下一代的WFMS将具有此种特征。应该说明的是:上述分类只是从不同的角度入手的。一般来说,后面那些特点将给WFMS带来更好的灵活性,同时也将成为那些能够支持跨机构的大规模复杂工作流管理、面向关键任务的WFMS不可缺少的特征。<o:p></o:p>

1.2.5 本文的侧重点<o:p></o:p>

    本文的侧重点不在于完全实现其中一种工作流管理系统的所有功能,更不在于实现所有种类的工作流管理系统的全部功能,前文已经说过,这是一件非常困难的事情。那么我们的侧重点在哪里呢?就在于综合以上四种工作流管理系统的主要特点,是一个面向文件的,基于数据库的,由目标拉动的结构化的工作流管理系统,并且由此去设计和实现工作流管理系统的核心――工作流引擎。从一般性来说,目前大多数的企事业的业务都是事务申请,公文流转,各项通知等等,这些业务或者需要查看,或者需要审批,而这些业务的资料基本上是以文件的形式保存在计算机上,而其中一些格式化的资料是保存在数据库中,所以面向文件和面向数据库是轻量级工作流引擎的一个重要特征。业务的发起和结束是一项过程化的任务,任务又可以分解成一个一个环节任务,而任务是带有目的性的,由这个目的去拉动这个过程中的一个一个的环节任务,促使环节任务的推进,最终达到任务完成的目的。这些业务的过程化不是随机的,而是已经严格规定好的,只有遵循这些过程化的规则和流程环节才能完成整个业务。轻量级的工作流引擎就组合了以上这些,不追求工作流引擎的功能的完备和复杂,以满足一般性业务为目的,为企事业快速开发出适合他们业务的工作流管理系统。<o:p></o:p>

第二章  工作流管理系统参考模型简介<o:p></o:p>

在阐述工作流引擎之前,我们来了解一下工作流技术的基本知识。早在几年前,为了建立工作流管理系统的相关标准,国际上成立了一个称为“工作流管理联盟”(简称WFMC)的国际组织。她提出了有关工作流管理系统的一些规范,定义了工作流管理系统的结构及其与应用、管理工具和其它工作流管理系统之间的应用编程接口,也就是工作流系统参考模型。<o:p></o:p>

       WFMC给出的工作流参考模型如下图:<o:p></o:p>

                                                                                           <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

                             <o:p></o:p>

<!----><v:group coordsize="8280,6864" id="_x0000_s1238" coordorigin="1980,1440" style="MARGIN-TOP: 0px; Z-INDEX: 11; LEFT: 0px; MARGIN-LEFT: 0px; WIDTH: 414pt; POSITION: absolute; HEIGHT: 343.2pt; TEXT-ALIGN: left"><v:group coordsize="8280,5772" id="_x0000_s1239" coordorigin="1980,2376" style="LEFT: 1980px; WIDTH: 8280px; POSITION: absolute; TOP: 1440px; HEIGHT: 5772px"><v:rect strokecolor="white" id="_x0000_s1240" style="LEFT: 3780px; WIDTH: 900px; POSITION: absolute; TOP: 6744px; HEIGHT: 468px"><v:textbox style="mso-next-textbox: #_x0000_s1240">

接口2<o:p></o:p>

</v:textbox></v:rect><v:rect strokecolor="white" id="_x0000_s1241" style="LEFT: 6660px; WIDTH: 900px; POSITION: absolute; TOP: 6744px; HEIGHT: 468px"><v:textbox style="mso-next-textbox: #_x0000_s1241">

接口3<o:p></o:p>

</v:textbox></v:rect><v:rect strokecolor="white" id="_x0000_s1242" style="LEFT: 7200px; WIDTH: 900px; POSITION: absolute; TOP: 4248px; HEIGHT: 468px"><v:textbox style="mso-next-textbox: #_x0000_s1242">

接口4<o:p></o:p>

</v:textbox></v:rect><v:rect strokecolor="white" id="_x0000_s1243" style="LEFT: 4500px; WIDTH: 900px; POSITION: absolute; TOP: 3000px; HEIGHT: 468px"><v:textbox style="mso-next-textbox: #_x0000_s1243">

接口1<o:p></o:p>

</v:textbox></v:rect><v:group coordsize="8280,5772" id="_x0000_s1244" coordorigin="1980,2376" style="LEFT: 1980px; WIDTH: 8280px; POSITION: absolute; TOP: 2376px; HEIGHT: 5772px"><v:rect strokecolor="white" id="_x0000_s1245" style="LEFT: 3060px; WIDTH: 900px; POSITION: absolute; TOP: 4248px; HEIGHT: 468px"><v:textbox style="mso-next-textbox: #_x0000_s1245">

接口5<o:p></o:p>

</v:textbox></v:rect><v:group coordsize="8280,5772" id="_x0000_s1246" coordorigin="1980,2376" style="LEFT: 1980px; WIDTH: 8280px; POSITION: absolute; TOP: 2376px; HEIGHT: 5772px"><v:rect id="_x0000_s1247" style="LEFT: 4500px; WIDTH: 1980px; POSITION: absolute; TOP: 2376px; HEIGHT: 468px"><v:textbox style="mso-next-textbox: #_x0000_s1247">

过程定义工具<o:p></o:p>

</v:textbox></v:rect><v:rect id="_x0000_s1248" style="LEFT: 4140px; WIDTH: 3060px; POSITION: absolute; TOP: 3468px; HEIGHT: 3120px"><v:textbox style="mso-next-textbox: #_x0000_s1248">

工作流API与交换格式<o:p></o:p>

</v:textbox></v:rect><v:rect id="_x0000_s1249" style="LEFT: 4320px; WIDTH: 2700px; POSITION: absolute; TOP: 4129px; HEIGHT: 2303px"><v:textbox style="mso-next-textbox: #_x0000_s1249">

工作流执行服务<o:p></o:p>

 <o:p></o:p>

</v:textbox></v:rect><v:group coordsize="1980,1092" id="_x0000_s1250" coordorigin="3420,4095" style="LEFT: 4500px; WIDTH: 2340px; POSITION: absolute; TOP: 4560px; HEIGHT: 1716px"><v:rect fillcolor="gray" id="_x0000_s1251" style="LEFT: 3780px; WIDTH: 1620px; POSITION: absolute; TOP: 4095px; HEIGHT: 780px"></v:rect><v:rect fillcolor="gray" id="_x0000_s1252" style="LEFT: 3597px; WIDTH: 1620px; POSITION: absolute; TOP: 4248px; HEIGHT: 780px"></v:rect><v:rect fillcolor="gray" id="_x0000_s1253" style="LEFT: 3420px; WIDTH: 1620px; POSITION: absolute; TOP: 4407px; HEIGHT: 780px"><v:textbox style="mso-next-textbox: #_x0000_s1253">

 <o:p></o:p>

</v:textbox></v:rect><v:rect id="_x0000_s1254" style="LEFT: 3600px; WIDTH: 1260px; POSITION: absolute; TOP: 4560px; HEIGHT: 468px"><v:textbox style="mso-next-textbox: #_x0000_s1254">

工作流机

(工作流引擎)

</v:textbox></v:rect></v:group><v:rect id="_x0000_s1255" style="LEFT: 1980px; WIDTH: 1080px; POSITION: absolute; TOP: 4248px; HEIGHT: 936px"><v:textbox style="mso-next-textbox: #_x0000_s1255">

工作流<o:p></o:p>

管理工具<o:p></o:p>

</v:textbox></v:rect><v:rect id="_x0000_s1256" style="LEFT: 8280px; WIDTH: 1980px; POSITION: absolute; TOP: 3780px; HEIGHT: 2028px"><v:textbox style="mso-next-textbox: #_x0000_s1256">

其它工作流<o:p></o:p>

执行服务<o:p></o:p>

</v:textbox></v:rect><v:line from="3060,4716" to="4140,4716" id="_x0000_s1257" style="POSITION: absolute"><v:stroke startarrow="block" endarrow="block"></v:stroke></v:line><v:line from="7200,4716" to="8280,4716" id="_x0000_s1258" style="POSITION: absolute"><v:stroke startarrow="block" endarrow="block"></v:stroke></v:line><v:group coordsize="1260,780" id="_x0000_s1259" coordorigin="8460,5184" style="LEFT: 8640px; WIDTH: 1260px; POSITION: absolute; TOP: 4872px; HEIGHT: 780px"><v:rect id="_x0000_s1260" style="LEFT: 8640px; WIDTH: 1080px; POSITION: absolute; TOP: 5184px; HEIGHT: 624px"></v:rect><v:rect id="_x0000_s1261" style="LEFT: 8460px; WIDTH: 1080px; POSITION: absolute; TOP: 5340px; HEIGHT: 624px"><v:textbox style="mso-next-textbox: #_x0000_s1261">

工作流机<o:p></o:p>

</v:textbox></v:rect></v:group><v:line from="5400,2844" to="5400,3468" id="_x0000_s1262" style="POSITION: absolute"><v:stroke startarrow="block" endarrow="block"></v:stroke></v:line><v:rect id="_x0000_s1263" style="LEFT: 3420px; WIDTH: 1800px; POSITION: absolute; TOP: 7368px; HEIGHT: 780px"><v:textbox style="mso-next-textbox: #_x0000_s1263">

工作流客户应用<o:p></o:p>

</v:textbox></v:rect><v:rect id="_x0000_s1264" style="LEFT: 6120px; WIDTH: 1800px; POSITION: absolute; TOP: 7368px; HEIGHT: 780px"><v:textbox style="mso-next-textbox: #_x0000_s1264">

工作流机直接调用<o:p></o:p>

的应用<o:p></o:p>

</v:textbox></v:rect><v:line from="4680,6588" to="4680,7368" id="_x0000_s1265" style="POSITION: absolute"><v:stroke startarrow="block" endarrow="block"></v:stroke></v:line><v:line from="6660,6588" to="6660,7368" id="_x0000_s1266" style="POSITION: absolute"><v:stroke startarrow="block" endarrow="block"></v:stroke></v:line></v:group></v:group></v:group><v:rect strokecolor="white" id="_x0000_s1267" style="LEFT: 4320px; WIDTH: 2700px; POSITION: absolute; TOP: 7680px; HEIGHT: 624px"><v:textbox style="mso-next-textbox: #_x0000_s1267">

2.1 工作流参考模型

</v:textbox></v:rect></v:group> <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>


         <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

从图中可以看出,参考模型包含了五类接口,分别是:<o:p></o:p>

⑴ 接口1:过程定义输入输出接口,这是工作流服务与工作流建模之间的接口,该接口提供的功能包括通信建立,工作流模型操作和工作流模型对象操作。<o:p></o:p>

⑵ 接口2:客户端函数接口,这是工作流服务与客户应用之间的接口,这是最主要的接口规范,它约定所有客户方应用与工作流服务之间的功能操作方式。包括通信建立,工作流定义操作(对过程模型定义操作),过程实例管理功能,过程状态管理功能,任务项列表/任务项处理功能,数据处理过程,过程监控功能,其它的管理功能,应用程序激活。<o:p></o:p>

    ⑶ 接口3:激活应用程序接口,这是工作流引擎和直接调用的应用程序之间的接口,包括通信建立,活动管理功能,数据处理功能。<o:p></o:p>

    ⑷ 接口4:工作流执行服务之间的互操作接口,这是工作流管理系统之间的互操作接口,包括连接的建立,对工作流模型和其中对象的操作,对过程实例的控制和状态描述,对活动的管理,对资料进行处理。<o:p></o:p>

    ⑸ 接口5:系统管理与监控接口,这是工作流服务和工作流管理工具之间的接口,包括资源控制,角色管理,用户管理,过程实例的管理,状态管理,审核管理。<o:p></o:p>

    五个接口以及对应的API函数囊括了工作流管理系统的全部功能。一个完整的工作流管理系统就是以工作流引擎为中心,向外部部件(应用程序或其它工作流引擎)提供这五个接口,提供其实现的所有功能。<o:p></o:p>

第三章  系统分析与设计<o:p></o:p>

在所有准备工作完成后,我们就开始进行系统设计和设计,构造一个轻量级的工作流引擎。轻量级的工作流引擎并不完全实现WFMC所提出的工作流模型包含的五个接口,特别是接口4,在分布式工作流管理系统才具有该接口。既然我们从轻量级的概念出发,我们就不再明显区分各个接口的界限以及其所具有的特定的功能,以够用、灵活和低成本的设计原则去设计出我们所理解的工作流引擎。我们运用了面向对象的方法,首先从众多的业务需求中抽取出工作流模型所包含的对象,再分析各个对象之间的逻辑关系,然后提出一个系统结构,再进行模块划分,数据库设计,最终完成类的设计。我们当中所用到的建模工具就是ROSE UML。<o:p></o:p>

3.1 工作流模型的设计<o:p></o:p>

    对工作流模型的设计是工作流引擎设计的重要组成部分。 <o:p></o:p>

3.1.1 工作流模型的对象<o:p></o:p>

    企事业经营过程就是一项项业务的实现过程,我们从一般业务入手,并对这些业务进行详细的分析,研究,其结果就是得到一般性的业务对象,从而抽象成工作流模型对象。<o:p></o:p>

3.1.1.1 从一个简单的业务实例看业务的需求<o:p></o:p>

    目前企事业的一项基本事务就是出差管理。它主要是对企事业的人员因为某种工作上的原因需要到别的地方出差进行的管理。我们可以列出出差的相关步骤:

       申请人需要出差,并且他(她)具有出差的权利;<o:p></o:p>

       申请人填写出差表格,说明因何事出差,出差何处,申请出差金额,何时回来等等和出差相关的情况;<o:p></o:p>

       申请人需要其它说明的话,可以将更具体的说明以文档的形式保存下来;<o:p></o:p>

       申请人确认申请无误后提交申请,等待申请的结果;<o:p></o:p>

       根据规定,该申请必须先让申请人的上一级审批,那么该申请就会以一项工作项的形式交给该级领导处理;<o:p></o:p>

       处理该申请的领导对该申请进行处理,他(她)会先查看该申请所有的资料,包括出差申请表和与之相关的其它文档,然后对其进行审批,审批的结果是同意那么该次申请会交给再下一级领导处理;审批的结果不同意,该申请被打回,通知申请人申请不通过的结果。等所有需要审批的领导都审批通过了,该申请就成功完成,通知申请人申请通过的结果;<o:p></o:p>

          申请人得到申请的结果,如果审批通过则准备出差,如果审批不通过则根据审批结果对该申请进行修改,重新提交申请;<o:p></o:p>

申请事务结束。<o:p></o:p>

这是一个简单的业务实例,对该实例进行分析我们可以得到该业务的一些对象:<o:p></o:p>

申请人:他(她)属于该企事业的某个部门的成员,并且具有启动该业务的权利;<o:p></o:p>

审批领导:他(她)也属于该企事业的某个部门的成员,并且具有对该业务进行处理的权利;<o:p></o:p>

出差表格:它是该业务规定的格式化资料,并且是必须的<o:p></o:p>

出差具体说明:它是该业务附加的资料,可以不要的<o:p></o:p>

申请人已经填写好的出差表格:它是出差表格的实例化,代表一个具体的应用<o:p></o:p>

审批同意和不同意:它们是对该业务的处理,遵循一定的业务规则<o:p></o:p>

申请:这是一个过程,不是一个动作,需要时间和人的活动才能完成<o:p></o:p>

审批:这是一个活动,是过程的一部分,并且可以向另外一个活动转化 <o:p></o:p>

其它应用程序:申请人要填写出差具体说明时要调用相应的外部应用程序编辑该说明并以一定的格式保存下来,审批领导要查看出差具体说明时也要调用相应的外部应用程序打开该说明并以一定的格式显示出来。<o:p></o:p>

从这些业务对象,再利用工作流技术,我们可以得到工作流模型的一些基本对象:<o:p></o:p>

用户:正如申请人,审批领导,他们就是工作流管理系统的用户,由他们去使用该系统的各种功能,并且直接参与业务活动,促使业务的完成。<o:p></o:p>

角色:有些人可以申请出差,有些人对出差

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics