基于J2EE的工作流引擎调度器的分析与设计

2011-11-02 02:34李政仪王
长沙民政职业技术学院学报 2011年1期
关键词:结点调用引擎

李政仪王 平

(1.长沙民政职业技术学院软件学院,湖南 长沙 410004;2.长沙拓维有限公司,湖南 长沙 410005)

基于J2EE的工作流引擎调度器的分析与设计

李政仪1王 平2

(1.长沙民政职业技术学院软件学院,湖南 长沙 410004;2.长沙拓维有限公司,湖南 长沙 410005)

工作流技术是计算机应用领域的一个较新的研究方向,引擎调度器是工作流管理系统的核心。文中以某通信公司的办公自动化系统为背景,从体系结构、系统功能和关键类的设计思想等方面对其中的引擎调度器进行分析,并给出了引擎调度器的核心算法。

工作流技术;工作流管理系统;引擎调度器

1.引言

工作流技术是实现企业业务过程建模、业务过程仿真分析、业务过程优化、业务过程管理与集成,从而最终实现业务过程自动化的核心技术[1]。工作流引擎是工作流管理系统的核心,是一个为工作流实例提供运行执行环境的软件服务或“引擎”,它是企业经营过程的任务调度器,在某种程度上还是企业资源的分配器。如何完成对工作流的管理是工作流管理的核心问题。工作流引擎可以为一个工作流实例提供执行环境。提供的服务包括:过程模型的解释、过程实例的控制、在过程各活动之间的游历、生成工作项、通知用户进行处理、工作流控制数据和工作流相关数据的维护、调用外部应用和访问工作流相关数据等[2]。可见,工作流引擎也是实现工作流管理的唯一通道。工作流引擎可以分为消息队列组件、XML解析组件、引擎调度器、条件规则组件、数据库组件、异常处理组件和脚本解释组件。其中,引擎调度器是工作流引擎的调度和处理入口,是工作流引擎中的核心部件。本文将从体系结构、功能和算法等几个方面对引擎调度器进行分析与设计,该引擎调度器具有良好的可扩展性,可在一般的企业中应用,改善了企业办公环境,提高了企业业务水平。

2.引擎调度器的体系结构

本文设计的工作流引擎调度器用J2EE架构实现,其核心用EJB和JSP编写。J2EE表现层技术包括servlets,JSP pages,and JSF组件,客户将通过浏览器与WEB容器交互。用这种方式可以实现基于Web的管理,从而简化工作流引擎的配置。由于EJB具有一定的事务处理能力,因此用这种方法实现的工作流引擎调度器也具有一定的事务处理能力,从而可以使数据的一致性得以保证。再加上EJB服务器配置灵活并能进行安全管理,也使得工作流引擎调度器具有了上述特性。同时此调度器的设计是以数据库管理系统为核心的,数据库的访问效率直接关系到工作流引擎的效率。由于EJB服务器可以提供数据库连接池的功能,可以提高数据库的访问效率。因此,用EJB实现工作流引擎可以改善它的效率。对于企业原有的信息系统,通过Java-Com Bridge或CORBA/RMI IIOP接入系统,成为一个可为系统管理的对象,由对象管理器控制,而EJB Server由一系列企业Beans组成,完成对工作流的各种控制。系统的核心部分用EJB编写,因此可以利用EJB服务器的一些特性进行系统的有效管理。对于小型系统可以只配置一个服务器,对于大型系统可以将EJB服务器集群,并可将EJB分发到不同的服务器上,再加上服务器提供的连接池以及事务处理能力,提高了系统的处理性能。引擎调度器的结构如图1所示。

图1 引擎调度器结构

2.1 引擎调度中心

引擎调度中心的功能在于接受从外部接口发送过来有关流程控制的请求(如业务初始化、获取任务以及结束任务等),然后根据不同的请求类型调用相应的处理组件完成与本次请求相关的操作,并返回操作结果。由于是在数据库管理系统(DBMS)内部实现工作流引擎的控制模型,因此,有关请求的并发处理等问题完全可以由DBMS完成,也不需要诸如请求队列等形式的数据结构。所以实际上可以将调度中心看成一个多线程的并发服务器,它可以对多个外部请求提供并发服务[4-5]。对外部请求的处理过程中肯定会涉及到对内部数据结构中有关数据的读写和更改操作,这些数据的完整性和互斥操作则可以通过DBMS提供的各种加锁机制来实现,从而实现了多个外部请求之间的独立性。

2.2 任务管理

主要根据调度中心的指示完成诸如任务创建、任务状态的转换以及相关数据的维护等工作。

2.3 任务指派

任务指派处理只是针对常规交互活动,通常情况下,在任务状态由Pending切换到Waiting过程中完成任务的指派工作,即处于就绪状态的任务在通常情况下都确定了其执行者。任务指派过程首先根据任务指派基准确定可以执行此任务的群体人员,通常情况下这是一个包含多个人员的集合;然后根据任务指派方法确定由这个群体中的哪些个体来执行任务。

2.4 路由控制

路由选择器的功能是选择后继活动。由于一个过程定义相当于一张有向图,为了简化对工作流的控制,要在活动表中记录每个“活动”结点的入度与出度,通过结点的入度与出度进行同步、选择与并行控制。为了对结点状态进行控制,引入一个同步计数器Num,它的初值设为0。如果一个结点的输入变迁条件为True,则Num加1。若该结点的入度为1,则转变该结点的状态为“就绪”状态。否则再由结点类型来判断。若该结点类型为XOR-Join,则转变该结点的状态为“就绪”状态;若该结点类型为AND-Join,如果Num的值与结点入度相等,则转变该结点的状态为“就绪”状态,否则结点状态不变。通过此种方式实现了对结点的选择与同步控制。

2.5 转发控制

当应用发出“结束任务”的外部请求时,该请求将触发引擎调度中心启动“转发控制”。

2.6 启动控制

负责常规自动活动的所对应的自动执行体的启动并对其活动进行监控。

2.7 外部接口

外部接口是用户使用、查看、管理工作流引擎的通道,包括:

(1)数据接口。与工作流管理系统进行数据交互,包括工作流运转过程中数据信息、交互信息和控制信息;

(2)管理接口。用于系统管理员查看工作流引擎的状态、控制工作流引擎的启动、暂停、继续、停止等,以及工作流引擎发生灾难性异常时,负责相关数据的导入、导出;

(3)日志接口。提供工作流引擎的运转情况信息和异常信息等,便于管理员查看维护。

2.8 Web服务器

采用Jsp和JavaBean来实现最终的Web页面,包括分类显示可启动的业务流程、待处理的任务列表、待领取的任务列表、图形化显示工作流的处理进度、多条件组合查询、工作流进度管理。

3.引擎调度器的主要功能

引擎调度器是整个工作流引擎的核心组件,主要功能包括:

(1)解释流程定义:流程的定义以特有的形式存放于数据库之中,为了驱动流程的运行,必须从数据库中取出定义,转换为可理解的形式,供其它组件参考,即提取出实例文档中的元素、属性和数据,以便对这些信息进行操作。解析XPDL文档必须严格遵守语法规范,格式良好是对文档最基本的要求。解释器通过工作流模型ID在工作流模型库中查找相应的过程定义,并利用XML绑定技术解析出其中的“活动”与“变动”信息,存入相应的流程定义表(该表存储与活动相关的信息,其中起始活动必须进行标识)。解析是用某种方法在分析XML文档的组成结构上采用两种模型:线性模型(SAX模型)和树模型(D0M模型)。SAX是针对XML的简单API,采用基于事件的顺序执行机制;而DOM则提供了一种通过分层对象模型访问XML文档的信息,这正与XML的分层结构相吻合,给随机访问带来了方便。在流程定义表中,由于从起始活动开始,在“变动”表中可以找到所有的后继活动,因此可以遍历所有活动,它相当于有向图的一种表示方法。

(2)控制过程实例(创建,激活,流转,终止等):客户端对流程的操作,基本上都可以分割为创建、激活、流转和终止等几个方面,针对这几类操作,再加上一些辅助的信息,引擎调度器要求能够将以上所有的操作转换为对数据库的逻辑操作。

(3)过程控制管理[3],它负责以下工作:初始化工作流引擎,生成工作流模型;启动工作流引擎,从过程实例库中读取处于运行状态的过程实例,与条件判定器交互获取条件判定结果,并且生成过程实例,存储在过程实例库中;从事件处理库中读取事件处理方法,与条件判定器交互获取条件判定结果,并且生成事件处理程序,存储在事件处理库中等。

(4)按照过程定义已确定的业务逻辑调用各项活动:在流程的每一步流转的过程中,流程定义中可能还包含了很多额外的业务逻辑调用设定,比如特定的脚本、特定的附加组件等,在每一次的操作中一旦这些设定被激活,引擎调度器将要根据事先的设定,正确而又及时的调用这些逻辑活动。

4.引擎调度器的设计

4.1 引擎调度器的用例分析

引擎调度器的用例图如图2所示。

图2 工作流引擎的引擎调度器用例图

活动者包括工作流监控端、工作流定义数据库、工作流运行数据库及组织机构数据库。其中,工作流客户端作为接受用户交互的界面部分,将用户所作的行为,按照固定的规则,通过其他模块将请求交给引擎调度器。流程监督者作为接收系统管理员交互的界面部分会对系统做出调整,然后发送给具体的处理模块进行处理。其余的工作流定义数据库等活动者,负责将引擎调度器每一步的操作与状态记录到数据库中,以便永久保存。用例包括资源定位、引擎容器、定义装载、流程监督。其中,引擎容器通过资源定位系统所用到的资源表,引擎容器用例使用资源定位用例。引擎容器不直接与用户交互,活动者对工作流的参与都是通过流程监督这个工作流执行模块的入口来进行。引擎容器通过定义装载将现有的工作流定义装入,这样才能运行该工作流,引擎容器用例与资源定位用例之间是使用关系。

4.2 引擎调度器的类图设计

根据以上引擎调度器用例的分析得出:所有的流程运转都将在引擎调度器上进行,因此,引擎调度器应该有自己的状态,并且外界可以对该调度器进行操作。基于这一点,此处将引擎调度器这个实体建模为WorkFlowIns类。由于引擎调度器需要根据不同的用例达到对各个流程实例的控制,因此添加WorkEngineCntrls类,表示引擎调度管理器。同时,由于工作流引擎中有许多类型的实体,如流程定义、流程实例、活动和相关数据等,根据面向对象的设计原则[6],将这些实体的操作封装在这个实体内部。在系统中,由于有多个WorkFlowDefine类和WorkFlowIns类的实例在运行,因此WorkEngineCntrls类与WorkFlowDefineCls等类的关系应该是一对多的关系,也就是关联。在WorkFlowIns类中除了基本的工作流属性标识id与名称name,还需增加相应的对应工作流的url、初始状态state、前一个状态prestate、下一个状态nextstate,主要方法包括设置工作流地址seturl()、获取工作流地址geturl()以及工作流初始控制flowInsCtrol()。WorkContrl工作控制类是引擎调度器最重要的类之一,其中的4个方法主要应用在调度过程中。Data类是为了获取相应的数据或设置数据。另外,由于引擎调度器在执行时可能产生错误,为了将这些错误捕获,设置了相应的异常类O-prationException。综合以上分析,引擎调度器的类图如图3所示。

图3 工作流引擎调度器的类图

4.3 引擎调度器的核心算法

每次引擎调度器开始工作时,必须要先调用start()方法,使引擎调度器开始自动运行,引擎调度器的算法步骤为:

Step1.执行引擎。注册执行引擎启动时,通过EJB远程调用主控引擎的引擎管理器,将自身注册到主控引擎的主控状态机上;

Step2.当主控引擎收到客户启动流程的请求后,引擎调用过程实例加载器,将需要启动的流程定义加载到运行库;然后由过程实例加载器调用过程定义解释器,将XML流程定义转化为Process流程定义对象。同时建立流程实例列表。

*加入第一个流程实例;

*依次加入流程实例;

*加入最后一个流程实例;

Step3.初始活动执行。主控引擎调用活动执行处理器,执行流程的第一个初始活动;

*If(判断流程实例列表为空)

then引擎等待或挂起

else得到第一个流程实例;

*If(当前实例=下一个实例)

then执行完成,进入第3步。

else处理下一个流程实例。

Step4.发送状态变更通知。活动执行处理器执行完毕后,将此活动作为参数调用引擎管理器的Notification()方法,发送已执行的通知。

*检测当前流程实例触发条件是否达到,相关数据是否完备;

*按照当前流程实例处理描述,进行流程实例操作,如果操作成功则触发目标,并传送相关数据;

*记录相关日志信息;

*将相关数据信息、交互信息返回给用户,并更改节点状态和优先级。

Step5.获取后继活动。引擎管理器根据已执行活动取得其后继活动及工作流相关数据并动态调度执行引擎,执行引擎的流实例列表;

Step6.主控状态机给执行引擎发送通知,主控状态机监听到消息后,调用Changed()方法改变自身状态,调用NotifyObserver()方法,通知所有注册的执行引擎的观察器,回调每个执行引擎的update()方法;

Step7.执行引擎执行活动。如果执行引擎的URL与参数中的URL一致,则执行引擎的观察器调用自身的活动处理器,执行当前活动。活动执行完毕,再调用引擎管理器的Notification()方法,再次循环执行Step4~Step7,直到整个流程结束;

Step7.流程结束,整个流程执行完毕,调用清除器清除相关的实例数据。

5.结束语

引擎调度器是工作流引擎的调度和处理入口,是工作流引擎中的核心部件。本文通过对工作流引擎调度器的体系结构、功能进行分析,给出了相应的用例图、类图以及调度算法。本文设计并开发的工作流引擎调度器,已经应用到了某通信公司办公自动化系统中,并取得了较好的应用效果。

[1]罗海滨,范玉顺,吴澄.工作流综述[J],软件学报,2000,11,(7):899-907.

[2]刘铁铭,范玉顺.基于工作流管理方式的应用协作模块分析与设计[J].计算机工程与应用,1999,35(2):56-62.

[3]范玉顺.工作流管理技术基础-实现企业经营过程重组与经营过程自动化的核心技术[M].北京:清华大学出版社,2001.

[4]史美林,杨光信等.一个基于Web的工作流管理系统[J].软件学报.,1999,10(11):1148-1155.

[5]WfMC.Workflow Management Coalition Specification:Terminology&Glossary[J].Document Number WFMC-TC-1011,Brussels,1996

[6]Joseph Schmuller.UML基础、案例与应用[M].北京:人民邮电出版社,2002.

TP316

A

1671-5136(2011) 01-0123-04

2011-03-20

李政仪(1979-),女,湖南石门人,长沙民政职业技术学院软件学院讲师、硕士。研究方向:软件工程与计算机应用;王平(1975-),女,湖南洪江人,长沙拓维有限公司助理工程师、硕士。研究方向:工作流技术。

猜你喜欢
结点调用引擎
基于八数码问题的搜索算法的研究
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
Ladyzhenskaya流体力学方程组的确定模与确定结点个数估计
蓝谷: “涉蓝”新引擎
基于系统调用的恶意软件检测技术研究
无形的引擎
基于Cocos2d引擎的PuzzleGame开发
基于Raspberry PI为结点的天气云测量网络实现
利用RFC技术实现SAP系统接口通信