首页  ·  知识 ·  编程语言
基于J2EE的工作流管理系统设计
刘建航  本站原创  Java  编辑:dezai  图片来源:网络
0 引 言 当前我们正处在一个由工业化社会向信息化社会迈进的时期,信息技术作为新的经济增长点渗入了社会各行

0 引 言

    当前我们正处在一个由工业化社会向信息化社会迈进的时期,信息技术作为新的经济增长点渗入了社会各行各业。随着Intranet的广泛使用,网络办公自动化应用已经成为企业必不可少的办公手段。涉及到办公自动化,无论它的客户端是桌上型计算机,还是移动受限终端,都需要涉及到工作流程的定义和管理,因为一个良好的工作流程管理模式可以从根本上提高办公效率,节约办公成本,对应程序的开发者来说,一组活动以及它们之间的相互关系的明确划分,也使得分工更加明确,程序更利于维护和升级管理,本文从实际出发,在J2EE框架结构下结合XML技术提出一套工作流管理模型。

1 工作流管理模型分析

    本文要设计的是这样一种系统:它可以在对象型数据库基础之上定义工作流模型,这里指的对象型数据库是在传统的关系型数据库基础上,将数据库表映射成对象实体,每个对象的一个实例就代表着数据库表中的一条记录;利用Java语言和EJB技术来实现工作流引擎的控制逻辑;提供一系列比较完备的接口,系统的客户端可以是传统的Web用户,也可以是手机为代表的受限设备。应用的开发者可以使用这些接口将应用系统功能结合工作流管理系统中。该系统的应用开发人员不是企业中的最终用户,而是利用专用工具构造相应应用系统的专业开发人员。它为开发人员提供驱动工作流的机制的支持,从而构造具有工作流特性的应用系统。基于J2EE平台的工作流管理模型如图1所示。

 

图1 基于J2EE平台的工作流管理模型


    工作流管理系统包括工作流定义、工作流引擎、工作流管理及审计、工作流任务管理及工作流同其它应用的接口。其中工作流引擎是工作流管理系统的核心,它负责解释工作流定义,管理工作流程实例,控制流转过程,在任务管理同其它应用间传递数据等功能。工作流管理系统是构架在支持J2EE的应用服务器上的一个服务,它通过本文定义的代理同企业中其它的业务逻辑进行结合。

    我们从工作流的定义来分析。一个工作流程,这里称过程,是由一个或几个活动组成,每个活动都有它的前依赖和后转发规则(当然,起始活动没有前依赖规则,结束活动没有后转发规则),这里称为活动的流转规则。活动的流转规则将活动从起始到结算联系在一起,这就构成了整个的过程。

    活动按其类型来划分,分为初始化活动、常规交互活动、常规自动活动、与分支活动、与汇集活动、或汇聚活动、投票汇聚活动、总结活动。其中常规交互活动是需要与实际人员交互,获取信息,比如用户填写表单的活动。而与汇集活动、或汇聚活动、投票汇聚活动经常出现在前依赖规则的活动列表中,分支活动出现在后转发活动的活动列表中。

    当前活动的启动条件是它的前依赖规则中指定的任务(活动的实例,我们称为任务)是否完成。确切的说是是否按当前活动的要求完成。比如说当前活动的类型是与汇聚,那么它就要求它的前依赖规则中所指定的所有任务必须全部完成;如果当前活动的类型是或汇聚,那么它就要求它的前依赖规则中所指定的所有任务中有一项完成即可;如果当前活动的类型是投票汇聚恬动,那么它就要求它的前依赖规则中所指定的所有任务完成指定的数量的任务。如果前依赖规则中任务的完成情况符合当前活动的要求,当前活动就可以启动,再完成指定的任务后,按照后转发规则中所指定的后转发任务列表,流向后继活动。

    工作流定义中的另一个重要的工作是任务的指派,只有当活动的类型是常规交互活动时,活动才需要工作流中的角色或组织的参与,也才涉及到任务的指派。任务的指派分为4种指派方式:部门指派、团队指派、角色指派、用户指派。所有的4种指派方式都是基于用户的。用户与部门、团队、角色是一对多的关系,也就是说一个部门、团队或角色包括一个或多个用户。活动可以将任务分配给某个部门、某个团队、某个角色或是直接分配给某个用户。

    工作流定义中将活动与应用实体有机的关联起来,它指明了由哪个应用程序来完成哪项相应的活动。活动与应用程序是多对多的关系,即一个活动可以调用多个应用程序来完成指定的任务,多个活动也可以同时调用一个应用程序来完成相应的任务。另外工作流定义中也明确了完成活动所必须的工作流相关数据。

    工作流引擎在工作流模型中起着至关重要的作用,它一方面接受Web服务器传来的信息,另一方面解释流程定义、控制流程实例。工作流引擎提供如下功能:①流程定义的解释:②流程实例的控制一创建、激活、挂起、终止、恢复、完成;③流程中活动间的导航,调用顺序或并行处理,最终期限到达策略以及流程相关数据的解释;④任务提醒及和用户交互的接口;⑤流程控制数据及相关数据的维护,从/向应用或用户传递流程相关数据;⑥提供一个调用外部应用程序或连接任何工作流相关数据的接口;⑦管理人员的控制、管理和审计支持。

2 流程定义设计

    本文采用XML语言对流程进行定义,是由于XML擅长用来描述结构化的资料,在跨平台和分布式的环境中,XML提供了一种中立的标准的交换方式。另外J2EE体系中提供了很好的XML的文件读取接口。

    本文这样设计流程的定义规范:

    <?xml version=“1.0”encoding=“ISO-8859-1”?>
    <!DOCTYPE flow-define PUBLIC“-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN“”http://localhost/dtd/flow-de-fine.dtd”>
    <!--这是工作流定义的开始标记,包括工作流的ID属性值,用于区分不同的工作流程-->
   
    <!--工作流类型定义,包括工作流流程名称、版本号、流程开始和终止条件,以及安全、审计或其它控制数据-->
   
        Flow Name</flowName>
        version number</version>
       
       
        ……
    </TypeDefine>
    <!--工作流是由一个或若干个活动组成,活动是工作流重要的组成部分。按活动的类型,可以把活动分为初始化活动、常规交互活动、常规自动活动、与分支活动、与汇聚活动、或汇聚活动、投票汇聚活动、终结活动。每个活动都有前依赖和后转发规则(初始化活动只有后转发规则,终结活动只有前依赖规则)本文通称为流转规则。这些流转规则将活动链接起来,组成工作流程。-->
   
        <!--该活动引用的实体及方法-->
       
        <!--工作流相关数据决定工作流的流向,决定到底执行哪一个前依赖活动和后转发规则-->
        <![CDATA[sum>=100]]></condition>
        <![CDATA[sum<50]]></condition>
        <![CDATA[avg>=l00]]></condition>
        <![CDATA[avg<50]]></condition>
        <!--按调用的实体的返回结果来确定页面的跳转,跳转值与后面跳转页面图view-map对应-->
       
       
        ……
    <!一当前活动前依赖规则,如果活动的类型为初始化活动,那么前依赖规则的内容可以为空。前依赖规则可以由一个和多个组成-->
       
       
        ……
        </preRule>
        <!--当前活动的后转发规则,如果活动的类型为终结活动,那么终结规则的内容可以为空。终结规则可以由一个和多个活动组成-->
       
       
        </postRule>
    </Activity>
    ……
    <!--可以由一个或多个活动组成-->
    <!--页面跳转图,与活动中的response的value值相对应-->
   
    ……
    </WorkFlow>

    以上是一个比较粗略的工作流定义的规范。工作流定义的目的就是完成流程的导航工作,它被工作流引擎所解释,工作流引擎根据应用开发者定义好的工作流进行对实体的调用,执行对流程实例的控制,并将活动中产生自争任务写入任务列表。
3 工作流管理模型设计与实现

    本系统足建立在对象型数据库基础上的,利用EJB组件技术实现工作流引擎的控制逻辑,提供一系列比较完善的接口,应用开发者可以使用这些接口将应用系统功能结合到工作流管理系统中。这里指的对象型数据库是在传统的关系型数据库基础上,将数据库表映射成对象实体,每个对象的一个实例就代表着数据库表中的一条记录,应用开发者可以利用对象实体对数据库进行添加,修改,删除操作,完全脱离SQL语句的繁琐工作。这里指的应用开发人员不是企业中的最终用户,丽是利用专用工具构造相应应用系统的专业开发人员。它为开发人员提供驱动工作流的机制的支持,从而构造具有工作流特性的应用系统。

    实际上本文要做的工作是完成工作流管理引擎、任务列表、任务管理器的设计,定义过程、活动、流转规则、角色、职责、用户之间的关系,并提供一系列比较完成的接口供应用开发者使用。通过这种设计,我们把应用开发者在服务器端的开发工作分为3部分,一部分开发者完成服务器端呈现层中的表示工作,比如表单录入界面的设计。这部分开发者不需要太强的编程能力,只需要熟悉HTML、javascript等简单的客户端编程语言,完成显示功能的一些工作即可。

    应用开发者的另一部分工作是完成流程定义工作,包括工作流中涉及到的活动,以及活动之间的关系、活动的导航规则和数据的传递条件、完成工作流活动中的角色/组织,以及调用的应用程序和工作流相关数据(这里指的相关数据是工作流执行服务用来决定流程流向的条件,它影响系统对下一个活动的选择)。由于本系统采用XML中间件技术作为流程的定义语言,所以这部分工作的开发者应该熟悉整个流程的整体构架,并精通XML标记语言。

    最后一部分是业务逻辑层的业务过程开发工作,它用来实现工作流引擎指定的任务,为流程定义所调用。由于本系统采用EJB组件技术作为业务逻辑层的过程开发,所以实际上这部分Bean的开发、组装、部署工作。

    根据分层思想和分而治之的策略,本系统的引入使得应用开发者可以将开发工作分为以上3部分来完成,这种设计使得开发工作脉络清晰、目的明确;呈现逻辑、控制逻辑、业务逻辑的分离使得工作分明,便于日后的升级和维护;xml中间件技术的引用使系统更加便于管理;同时这种设计提高了访问速度,减轻了数据库服务器的压力。

    工作流引擎设计:如果把整个工作流管理模型比作一个有机体的话,那么工作流引擎就是像一个心脏,一个工作流引擎负责工作流运行服务中运行控制环境的一部分或全部。提供工作流实例的运行环境。它要完成对流程定义的解释:执行流程实例的控制,如创建、激活、挂起、终止、恢复、完成;完成流程中活动间的导航,调用顺序或并行处理,最终期限到达策略以及流程相关数据的解释;管理任务列表等工作。工作流引擎以及任务列表,任务管理器组成了整个系统的控制逻辑层,成为服务器呈现层和业务逻辑层之间传输数据。导航流程的桥梁,所以工作流引擎的设计是至关重要的,下面分析一下对工作流引擎的程序设计。

    工作流引擎主要完成4项任务:

    (1)解析和实例化流程
    public String instantiation(String workFlowID){
    //在指定的位置读取流程定义文件,本系统采用XML标记语言做流程定义文件。
    //按流程文件的规格文档对流程进行解析,将组成流程的活动实例化,并放在一个或多个map集合中。
    //按活动的流转规则将活动链接起来,构成整个流程的实例。
    //将流程实例以及当前活动放入集合中。
    //操作成功返回“success”,出现异常返回“error”。
    }

    (2)流程的运行
    public void flowRun(String workFlowlD){
    //由于工作流的运行是并发的,所以此方法可以多个流程同时运行,它以循环的方式完成工作流活动链表,直到运行的当前活动是终结活动为止,循环才可退出,当工作流运行时收到工作流引擎的控制方法中的挂起信息时,此流程将暂时让出cpu,直到收到控制方法中恢复的信息,此流程才可重新运转。
    //另外,如果在运行中流程涉及到常规交互活动,即需要等待与用户交互信息时,此方法还负责对任务列表的更新,它要将指派给某用户的任务写入任务列表,当用户登录时由任务管理器在任务列表中取回与此用户有关的任务信息通知给用户。
    }

    (3)流程的控制
    public void control(String workFlowlD,Map currAct,Stringtask){
    //由工作流ID号,当前活动和行为确定引擎对工作流的控制信息,控制的行为包括对当前工作的激活、挂起、终结、恢复以及完成。这些行为决定当前工作流对cpu的占有情况。比如等待用户交互时、等待前依赖规则的完成时,引擎都可以通过此方法将当前工作流挂起,等待重新回复运行的信息。
    }

    (4)导航
    public Map navigation(String workFiowID,Map eurrArt){
    //工作流引擎通过此方法根据指定的工作流的相关数据,以及当前活动的流转规则来决定工作的流转方向。
    }

    工作流引擎还需要一些辅助类的设计,比如活动类Acti.vity.class以及相关的规范(接口)ActivityRule.class。工作流引擎将流程定义中解析出来的活动实例化成具体的活动,再根据活动的前依赖和后转发规则将这些活动联系起来,构成整个系统的一个工作流程。

4 结束语
 
    实践证明,对于应用开发者来说,一个良好的工作流管理模型的设计可以大大的提高应用设计的编程效率,本文提出的基于J2EE的工作流管理模型设计根据分层思想和分而治之的策略将办公系统的开发工作分为4层,使得开发工作脉络清晰,目的明确,提高了应用组件的可复用性。同时,对象型关系数据库概念的引入使的应用开发者完全脱离sql语句的繁琐工作,提高了编程效率,缩短了开发周期。

本文作者:刘建航 来源:本站原创
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读