您所在的位置:e-works首页 > 管理信息化 > 流程管理(BPM)

基于J2EE的工作流管理系统设计

发表时间:2008-9-7 刘建航 来源:万方数据
分析了工作流技术,提出了一套基于J2EE框架平台的工作流管理系统的解决方案。在此基础上设计了工作流管理系统的参考模型,提出了流程定义语言规范。根据分层思想和分而治之的策略,按上述模型规范将办公系统的开发工作分为客户呈现层、服务器呈现层、服务器端业务逻辑层和企业信息系统层,并针对各层提出相应的解决方案,以提高软件开发的效率,降低开发成本,使软件更便于升级和维护。
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属性值,用于区分不同的工作流程-->
    <WorkFlow ID=“123456”>
    <!--工作流类型定义,包括工作流流程名称、版本号、流程开始和终止条件,以及安全、审计或其它控制数据-->
    <TypeDefine>
        <flowName>Flow Name</flowName>
        <version>version number</version>
        <initialCondition/>
        <terminateCondifion/>
        ……
    </TypeDefine>
    <!--工作流是由一个或若干个活动组成,活动是工作流重要的组成部分。按活动的类型,可以把活动分为初始化活动、常规交互活动、常规自动活动、与分支活动、与汇聚活动、或汇聚活动、投票汇聚活动、终结活动。每个活动都有前依赖和后转发规则(初始化活动只有后转发规则,终结活动只有前依赖规则)本文通称为流转规则。这些流转规则将活动链接起来,组成工作流程。-->
    <Activity name=“”type=“”timeApplied=“”/>
        <!--该活动引用的实体及方法-->
        <event path=“”invoke=“”/>
        <!--工作流相关数据决定工作流的流向,决定到底执行哪一个前依赖活动和后转发规则-->
        <condition type=“pre”value=“preRulel”><![CDATA[sum>=100]]></condition>
        <condition type=“pre”value=“preRule2”><![CDATA[sum<50]]></condition>
        <condition type=“pre”value=“postRulel”><![CDATA[avg>=l00]]></condition>
        <condition type=“pre”value=“postRule2”><![CDATA[avg<50]]></condition>
        <!--按调用的实体的返回结果来确定页面的跳转,跳转值与后面跳转页面图view-map对应-->
        <response name=“success”value=“pagel”>
        <response name=“errorn value;“page2”>
        ……
    <!一当前活动前依赖规则,如果活动的类型为初始化活动,那么前依赖规则的内容可以为空。前依赖规则可以由一个和多个组成-->
        <preRule flame=“preRulel”>
        <actname=“”type=“”return=“”/>
        ……
        </preRule>
        <!--当前活动的后转发规则,如果活动的类型为终结活动,那么终结规则的内容可以为空。终结规则可以由一个和多个活动组成-->
        <postRule namc=“postRulel”>
        <actnamc=“”type=“”return=“”/>
        </postRule>
    </Activity>
    ……
    <!--可以由一个或多个活动组成-->
    <!--页面跳转图,与活动中的response的value值相对应-->
    <view-map name=“pagel”page=“/pagel.jsp”/>
    ……
    </WorkFlow>

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

本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。

责任编辑:殷爽
2
;