软件工程硕士论文 基于Activiti的工作流管理系统的设计与实现

更新时间:2023-03-10 16:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

分类号 TP311 U D C

密 级

编 号 1 0 4 8 6

武 汉 大 学 工程硕士专业学位论文

基于 Activiti的工作流管理系统

的设计与实现

研 究 生 姓 名 : 指导教师姓名、职称: 学 科 、 专 业 名 称 : 研 究 方 向 :

二○一三年五月

Design and Implementation of a Workflow

Management System based on Activiti

By May, 2013

郑 重 声 明

本人的学位论文是在导师指导下独立撰写并完成的,学位论文没有剽窃,抄袭,造假等违反学术道德,学术规范和侵权行为,本人愿意承担由此而产生的法律后果和法律责任,特此谨慎声明。

学位论文作者:

2013年月 日

摘 要

现在计算机已经成为我们生活中不可缺少的一部分,对于企业来说,办公自动化系统(Office Automation,简称OA),企业资源计划(Enterprise Resource Planning,简称ERP)系统以及其他信息系统极大的提高了人员的工作效率和企业的资源使用效率。

很多的国内企业投入了巨大的成本来建设自己的OA系统、ERP系统以及目前非常流行的SOA系统,但是有不少企业在使用这些系统的时候发现,并没有从整体上提升企业的执行效率、资源的使用效率和企业的利润效益,这些企业往往面临以下的问题:企业快速扩张,但是人员缺乏有效的沟通;工作流程复杂繁琐,层次不清晰;流程与实际情况脱节,难以操作;流程缺乏灵活性,难以调整;流程的执行过程,难以记录评估等等。

业务流程管理(Business Process Management,简称BPM)就是为了解决上述问题产生的,业务流程管理是指通过对企业内部及外部的业务流程的整个生命周期进行规划设计、自动化、管理监控和优化,从而使企业的整体效益和利润得以提升的一门学科。通过工作流管理系统((Workflow Management System,简称WFMS)可以完成企业业务流程整个生命周期的所有工作,而作为WFMS的核心,工作流引擎一直被各大软件厂商所关注和重视。

目前国内已经出现了一些国产工作流软件,但是相比于几大主流的工作流引擎,仍然有不小的差距。Activiti作为一款优秀的轻量级BPMN2.0规范工作流程引擎,性能卓越,易与Spring框架集成,方便开发人员使用。本文旨在通过研究Activiti的基础之上,设计和实现一款轻量级,性能优秀,易于使用的工作流管理软件,具有很高的实用价值和现实意义。

关键词:工作流 工作流引擎 Activiti

I

Abstract

Now the computer has become an indispensable part in our life. For enterprises,The office automation system (Office Automation, referred to as OA), enterprise resource planning (Enterprise Resource Planning, referred to as ERP) system and other information system greatly improves the efficiency of personnel's working efficiency and the enterprise resource use.

Many domestic enterprises invested a huge cost to build their own OA system, ERP system and SOA system,But many enterprises found that it dose not enhance the execution efficiency, resource using efficiency , and does not increase the profit of enterprise after using the system. These enterprises usually face the following problems: the enterprises is expanding rapidly, but they lack of effective communication; work process is complicated, and organization level is not clear; plan is not accord with the actual situation, difficult to operate; process lack of flexibility, difficult to adjust; the process execution is difficult to record and evaluation etc.

Business process management (Business Process Management, referred to as BPM) is in order to solve these problems. Business process management refers to the planning design, automation, management and optimization of the internal and external business processes throughout the life cycle, so that the overall efficiency of enterprises and the profit is a discipline of ascension. Workflow management system (Workflow Management System, referred to as WFMS) provides business processes throughout the life cycle of the complete solution, As the core of WFMS, workflow engine is always concerned by all major software vendors.

At present, there have been some chiese workflow software, but compared to several foreign mainstream workflow engines, there is a huge gap between them. Activiti is an excellent lightweight BPMN2.0 workflow engine, with excellent performance, easy to integrate with the spring framework, convenient for developers to use. The purpose of this paper is to study on the basis of Activiti, the design and implementation of a lightweight, excellent performance, easy to use workflow management system, and has great practical value and realistic significance.

Key words:Workflow,Workflow Engine,Activiti

II

目 录

摘 要 ......................................................................................................................................... I ABSTRACT ............................................................................................................................. II 第一章 引言 .............................................................................................................................. 1 1.1 研究背景和意义 .............................................................................................................. 1 1.2 工作量引擎发展现状 ...................................................................................................... 1 1.3 论文研究目的和特色 ...................................................................................................... 2 1.4 研究内容及论文的章节安排 .......................................................................................... 3 第二章 工作流概述 .................................................................................................................. 5 2.1 工作流的定义 .................................................................................................................. 5 2.2 工作流的发展历史 .......................................................................................................... 5 2.3 典型的工作流管理系统 .................................................................................................. 7 2.4 工作流的应用和市场前景 .............................................................................................. 8 第三章 ACTIVITI体系结构 ................................................................................................ 10 3.1 ACTIVITI介绍 .................................................................................................................. 10 3.2 ACTIVITI的结构 .............................................................................................................. 11 3.3 ACTIVITI的特点 .............................................................................................................. 12 第四章 基于ACTIVITI的工作流管理系统ABPM .......................................................... 14 4.1 系统开发背景 ................................................................................................................ 14 4.2 系统设计目标 ................................................................................................................ 15 4.3 ABPM总体架构 ............................................................................................................ 17 第五章 ABPM系统的设计与实现 ....................................................................................... 19 5.1 系统结构 ........................................................................................................................ 19 5.2 功能分析 ........................................................................................................................ 20 5.3 工作流引擎 .................................................................................................................... 22 5.4 基于WEB的流程设计器 ............................................................................................. 25 5.5 基于WEB的表单设计器 ............................................................................................. 26 5.6 流程持久化 .................................................................................................................... 27 5.7 主要接口说明 ................................................................................................................ 28 第六章 测试与应用 ................................................................................................................ 31

III

6.1 测试环境 ........................................................................................................................ 31 6.2 测试脚本 ........................................................................................................................ 31 6.3 测试结果及分析 ............................................................................................................ 45 6.4 ABPM系统应用举例 .................................................................................................... 46 第七章 总结与展望 ................................................................................................................ 50 7.1 论文总结 ........................................................................................................................ 50 7.2 项目展望 ........................................................................................................................ 50 致 谢 ...................................................................................................................................... 54

IV

第一章 引言

1.1 研究背景和意义

现在计算机已经成为我们生活中不可缺少的一部分,对于企业来说,办公自动化系统(Office Automation,简称OA),企业资源计划(Enterprise Resource Planning,简称ERP)系统以及其他信息系统极大的提高了人员的工作效率和企业的资源使用效率。

很多的国内企业投入了巨大的成本来建设自己的OA系统、ERP系统以及目前非常流行的SOA系统,但是有不少企业在使用这些系统的时候发现,并没有从整体上提升企业的执行效率、资源的使用效率和企业的利润效益,这些企业往往面临以下的问题:企业快速扩张,但是人员缺乏有效的沟通;工作流程复杂繁琐,层次不清晰;流程与实际情况脱节,难以操作;流程缺乏灵活性,难以调整;流程的执行过程,难以记录评估等等。

业务流程管理(Business Process Management,简称BPM)就是为了解决上述问题产生的,业务流程管理是指通过对企业内部及外部的业务流程的整个生命周期进行规划设计、自动化、管理监控和优化,从而使企业的整体效益和利润得以提升的一门学科[1]。通过工作流管理系统((Workflow Management System,简称WFMS)可以完成企业业务流程整个生命周期的所有工作,而作为WFMS的核心,工作流引擎一直被各大软件厂商所关注和重视。

目前国内已经出现了一些国产工作流软件,但是相比于几大主流的工作流引擎,仍然有不小的差距。Activiti作为一款优秀的轻量级BPMN2.0规范工作流程引擎,性能卓越,易与Spring框架集成,方便开发人员使用。本文旨在通过研究Activiti的基础之上,设计和实现一款轻量级,性能优秀,方便使用的通用工作流软件,具有很大的实用价值和现实意义。

1.2 工作量引擎发展现状

目前各大软件厂商均推出了自己的工作流软件,市场占有率最高的是IBM

1

的Websphere MQ Workflow系列产品,产品的可伸缩性和容错性使得它可以充分发挥多处理引擎和群集的优势,并且方便用户快速构建和部署。MQ Workflow有如下特点:过程执行速度更快;自动生产方式提高了生产率;帮助用户节省成本;提高过程执行的品质;使用ISO9000标准来进行过程处理。

另一款比较有代表性的工作流管理软件是Oracle公司推出的Oracle Workflow产品,该产品提供了自动化的任务管理和个性化的工作列表以及邮件等工具,实现了高效率的用户协作,工作流管理器实现了对工作流状态的全过程监控,方便用户对流程进行完善和优化,实现业务流程的智能化。

微软公司的Microsoft Biz talk Server是针对大中型企业推出的服务器产品,目前在市场上占有较高的份额,功能包括业务流程管理、业务流程自动化、企业应用的集成以及不同企业之间的系统集成。Biz talk的主要特点有:提供了图形化的流程定制界面,方便用户的使用;提供了功能强大的图形化的流程监控界面,便于用户查看流程运行状态;支持流程持久化;支持各种不同的工作流模式。

以上的几款工作流引擎一般作为整体解决方案的一部分存在,除此之外还有为数众多的开源工作流引擎。比较典型的有JBPM,OpenWFE,Enhydra Shark,Activiti等。2004年10月18日,JBPM成为JBoss公司的企业中间件大家庭中的重要一员,目前最新版本为5.4版本,可以从JBPM官网上免费获取。它支持BPEL语言,覆盖了业务流程管理、工作流、服务协作等多个领域,可以部署在所有标准的J2EE架构的企业应用系统当中。Activiti是一款开源的、灵活的、易扩展的可执行流程语言框架,它由JBPM的创始人Tom Baeyens发起,并由许多开源组织结构成员共同完成。Activiti可以运行在任何部署在服务器、集群、云计算中心上的Java程序当中,具有良好的发展前景。

国内比较有代表性的工作流管理软件有普元软件的EOS、方正飞鸿BPMES平台、StarFlow等等,相比于国外的工作流引擎软件,国内的软件具有界面友好、使用方便等特点,但是在性能和功能上与国外相比还有不小的差距,因此还有很大的改进和发展空间。

1.3 论文研究目的和特色

本文主要解决的问题是:

第一:基于WEB的图形化流程设计器的设计。流程开始的第一步是进行流程定义,流程设计器是否美观易用已成为工作流引擎成功的关键。系统拟采用Flex技术,在浏览器中实现图形化流程设计器,客户无需安装任何客户端就可以访问系统进行流程设计、配置和管理。

第二:流程引擎的设计。作为Activiti项目的核心底层组件,Activiti的核心

2

引擎,采用的是目前较为先进的流程虚拟机(PVM)技术来实现,它可以直接运行原生的BPMN2.0规范格式的流程定义,是业内目前第一个也是唯一一个从建模到执行,完全按照BPMN2.0规范进行实现的BPM项目[2]。在Activiti核心引擎的基础上进行实现,可以保证我们系统的性能和广泛应用。核心引擎还提供了事件监听器功能和活动定制功能,时间监听器让引擎可以直接执行一个动作。Activiti引擎实现了对BPMN的支持,有很多可以直接使用的活动类型。

第三:规则引擎的设计。流程引擎的核心是要按照某种预定的规则进行流程调用,规则引擎可以很好的满足我们的要求,规则引擎可以让提供业务应用的灵活性,更好的满足复杂多变的客户需求。

第四:事件处理引擎的设计。事件处理引擎的主要功能是接受来自系统各组件和其他外部应用系统发送过来的消息,捕获各种事件,并对消息进行分析和过滤。事件处理引擎会过滤掉没有直接后果的事件信息,并根据规则建立处理模型,在必要的时候,通知用户事件信息。

第五:流程持久化的设计与实现。系统引入流程仓库的概念,分别用流程存储库、运行库、历史库来分别对已定义流程、正在执行的流程和执行结束的流程进行存储。系统采用Hibernate框架做为持久化方案,支持多种数据库存储数据。

1.4 研究内容及论文的章节安排

目前工作流软件产品种类繁多,各有优缺点,本文首先分析主流的开源工作流引擎,总结吸收它们的优点,在Activiti的基础之上设计实现一款支持独立部署和嵌入系统使用的灵活、易用的工作流引擎。在本项目的设计开发过程中,需要学习和研究的内容有:

(1)BPMN业务流程建模语言 。业务流程建模标注(Business Process Modeling Notation,简称BPMN),是一种用类似于流程图的图标形式来描述业务流程的一种方法[4]。BPMN1.0规范于2004年5月由业务流程管理计划组织(Business Process Management Initiative,简称BPMI)发布,为大家提供了一种标准的、易读的定义和分析业务流程的方法。BPMN是一种图形化的建模工具,BPMN包含四种基本元素:流对象、连接对象、泳道、人工信息。其中流对象是BPMN的核心元素,它又包括:事件、活动、网关。

(2)主流开源工作流引擎产品的优缺点。有多种开源工作流引擎可以供我们参考借鉴,其中项目资料比较齐全的有JBPM、Apache ODE、Enhydra Shark等,这些产品各有优缺点,本课题的目标是在借鉴吸收开源工作流引擎的基础上实现一款灵活易用的工作流引擎软件,因此在项目开始之前,需要对开源的工作流引擎做一个广泛的了解和研究。

3

(3)Activiti的结构和实现原理。Activiti项目主要由三种类型的组件组成,分别是专用工具(Dedicated Tools)、存储内容(Stored Content) 协作工具(Collaboration Tool)。专用工具包括内容管理器、建模器、设计器、管理和监控器、任务管理五个工具组件。存储内容组件包含文档仓库、MVN仓库、Activiti引擎。Activiti是整个软件的核心引擎。协作工具组件是一种全新的BPM组件,用来促进业务人员、开发人员、和操作人员的协作[5]。

(4)ABPM工作流管理系统的设计。系统提供基于Web的图形化流程设计器方便用户使用,系统既可以单独部署也可以嵌入到应用系统当中,系统应当保持独立性,对业务代码的侵入度降到最低。

本文的各章节内容说明如下:

第一章引言部分主要讨论了工作流引擎的发展现状,分析了国内外主要的工作流管理软件的特点,阐述了本文的研究目的和论文特色,并着重说明了本文的主要研究内容和章节安排。

第二章对工作流的理论知识和工作流技术的发展历史进行了介绍,并着重介绍了目前最流行的开源工作流软件的特点,最后从市场的角度分析了工作流技术的发展前景和本文的研究目的。

第三章介绍Activiti工作流引擎,首先是Activiti的总体介绍,接着从Activiti的系统结构和Activiti的特点这两方面对Activiti的实现机制和优缺点进行了探讨,希望读者对Activiti能有一个初步的了解。

第四章首先说明了基于Activiti的工作流管理系统的开发背景,并给出了系统的设计目标。

第五章对ABPM工作流管理系统的结构设计和主要功能进行了详细说明,并对系统的主要功能模块进行了简要阐述。基于浏览器的流程设计器是系统的一大特点,本章特地用一小节内容对流程设计器的设计和实现进行了说明,最后给出了系统持久化的方案和主要接口的使用方式。

第六章对ABPM系统进行测试和结果分析,并举例说明了系统的使用方式。 第七章论文总结和项目展望。

4

第二章 工作流概述

2.1 工作流的定义

工作流的英文单词是Workflow,表示工作Work和流动Flow的组合,是一种能够被计算机解释和执行的反映经营过程业务流动的计算机化模型[6]。

工作流的出现与办公自动化领域的发展密不可分,在较早的时候就有人提出,可以将企业日常工作中具有固定模式的业务活动进行抽象成为计算机可以理解的模型,将一项工作分解成为按照某个顺序执行的一组任务,然后指定不同角色的人员在计算机的协助下完成任务,最终完成某项业务或者工作。最终达到更好的过程管理、提高沟通和工作的效率、增强对客户的服务、提供企业整体效率的目的。尽管工作流的概念的出现已经有数十年的时间,与工作流相关的理论和技术也已经相当丰富,但是目前业内对于工作流的定义还没有一个完全统一的认识,曾经有许多有名的企业和专家对工作流的定义给出了不同的解释。

AndyPankous认为的工作流定义是:工作流是一种按照某种规则定义的一组任务,任务可以由一个人或者多个人来完成,也可以通过计算机系统来自动完成,工作流的关键是任务执行的顺序和触发条件,目的是为了达到某个特定的企业经营目标[7]。

IBM公司的RobertAlan将工作流定义为:工作流是企业经营过程的一种计算机化的表示模式,模式中规定了一个完整的经营过程必须包含的所有步骤、这些步骤的执行顺序和条件、以及完成步骤的负责人,所有这些信息构成了工作流的参数[8]。

1993年工作流管理联盟(Workflow Management Coal ition,简称WFMC)的成立,标志着工作流理论和技术达到了一个较为成熟的阶段。WFMC成立以后提出了一系列的关于工作流技术的标准和规范,为推进工作流的发展做出了极大贡献。WFMC给出的最新的工作流的定义是:工作流是一类能够完全或者部分自动执行的经营过程,它根据一系列过程规则、文档、信息或任务能够在不同的执行者之间进行传递与执行。

2.2 工作流的发展历史

1970年代早期办公自动化领域的相关研究工作就已经提出了现代工作流技术的雏形,但是工作流思想出现的时间可能更早,Amanda Nierson在1968年就

5

已经提出了要利用计算机技术来帮助人来完成工作流的先进想法。1971年 Michael D. Zisman开发出了原型系统SPORK,1976年Frederica Kevin和Thomas Neil开发出了“网络故障自动监测”程序,1975年Samson A. Tony和Vincent J. Spark等人合作推出了SilentTalk系列试验系统,这些系统都采用了Petri网的相关算法来进行流程模型建立,都具有早期工作流程自动化的思想。其中SPORK和SilentTalk系统,不但标志着工作流技术的开端,而且也是最早的办公自动化系统之一。

在上世纪七十年代,工作流技术的出现激起了很多企业的兴趣,许多企业的管理者相信,这种先进的技术可以让企业的办公效率大大提升,最终提高企业的利润,但是最后许多尝试都以失败告终。很多企业实施工作流技术失败的原因主要包括:工作流技术的实施限制了企业员工的工作创造性和灵活性,让企业人员只能死板的按照某一种固定的工作模式来完成每天的工作,最终导致企业人员对新技术的反感。而在上世纪70年代的时候,真是现代企业管理理论快速发展的时候,各种不同的新想法和新理念层出不穷,同时在那个年代,计算机和网络的普及还很有限,计算机尚未成为所以企业办公必备的工具,计算机的使用也没有今天那么方便。

在上世纪八十年代,出现了许多含有工作流特征的工业化控制系统,比如某些用在生产线上的自动化控制系统。生产线在使用了自动化控制系统以后,操作员能够按照实现设定的工作流程来完成产品制造中的一个步骤,再把产品推送到下一个节点,由另外一名操作人员来完成产品的下一个生产环节,最终完成整个产品的生产制造过程。这些系统大大提高了企业的生产效率,但是缺点是应用范围比较窄,而且工作流程基本是固化的,难以调整。

进入上世纪90年代以后,工作流技术迎来一个新的发展高潮,与工作流相关的各种理论和新技术层出不穷,工作流技术被广泛应用在政府、金融机构、企业、学校、医院等组织机构当中,与工作流相关的应用系统包括电子政务、办公自动化、金融信息系统、教育信息系统、医疗信息系统、科研系统等等,据统计,在1995年就要超过两百多种软件产品宣称自己支持工作流或者具有工作流系统的特征,工作流产品可谓是百花齐放,百家争鸣。

1993年8月,工作流技术标准化的工业组织-工作流管理联盟(WFMC)成立。 1994年,工作流管理联盟发布了用于工作流管理系统之间互操作的工作流参考模型,并相继制定了一系列工业标准。

关于工作流技术的学术研究也从未停止过,光是在万方数据库中搜索,与工作流相关的论文就多达数万篇,许多专家学者在提出新的工作流理论的同时,还使用各种不同的技术开发出了原型系统,从工作流的定义、建模、流程有效性验

6

证、工作流中的事务控制、如何提升工作流引擎的性能、工作流系统的安全性、工作流与应用系统的接口等方面进行了大量研究,并产生了许多具有实际应用价值的成果。

尽管工作流技术已经取得了长足的发展,但是工作流系统还是有很多值得研究的地方,比如现在的工作流系统在性能上、可靠性上、安全性上都有不尽如人意的地方,对于支撑企业系统7乘24小时不间断工作还有一定距离。

2.3 典型的工作流管理系统

目前各大软件厂商均推出了自己的工作流软件,市场占有率最高的是IBM的Websphere MQ Workflow系列产品,产品的可伸缩性和容错性使得它可以充分发挥多处理引擎和群集的优势,并且方便用户快速构建和部署。MQ Workflow有如下特点:过程执行速度更快;自动生产方式提高了生产率;帮助用户节省成本;提高过程执行的品质;使用ISO9000标准来进行过程处理。

另一款比较有代表性的工作流软件是Oracle公司推出的Oracle Workflow产品,该产品提供了自动化的任务管理和个性化的工作列表以及自动邮件等功能实现了用户高效率的合作,工作流管理器实现了对工作流状态的全过程监控,方便用户对流程进行完善和优化,实现业务流程的智能化。

微软公司的Microsoft Biz talk Server是针对大中型企业推出的服务器产品,目前在市场上占有较高的份额,功能包括业务流程自动化、业务流程管理、企业应用集成以及企业之间的集成。Biz talk的主要特点有:提供了图形化的流程定制界面,易于使用; 提供了图形化的流程监控界面,便于查看流程状态;支持流程自动化和流程持久性;支持多种工作流模式。

以上的几款工作流引擎一般作为整体解决方案的一部分存在,除此之外还有为数众多的开源工作流引擎。比较典型的有JBPM,OpenWFE,Enhydra Shark,Bonita,Activiti等。2004年10月18日,JBPM2.0版本发布,并在同一天加入了JBoss,成为了JBoss企业中间件平台的一个组成部分。它覆盖了业务流程管理、工作流、服务协作等多个领域,支持BPEL语言,可以部署在任何需要使用工作流的J2EE系统当中。

OpenWFE由John Mettraux所领导的小组开发,完全遵循WFMC标准,系统采用JAVA作为开发语言,OpenWFE除了实现工作流引擎的各项基本功能,也可以当作一个完整的工作流管理系统来使用。系统具有功能完善、易于扩展、通用性好等优点。

Enhydra Shark 提供了基于Java Swing的桌面应用程序来对Shark引擎进行

7

配置管理,产品遵循WfMC和OMG标准,并支持XPDL外部接口,功能较为强大。但是整个软件的体系结构过于复杂,产品体积比较庞大,不少的开发人员反映Enhydra Shark 难以使用,使用Enhydra Shark的总成本较高,适合大中型项目使用,不太适合用在小型软件项目中。

Bonita是一个新兴的基于活动预测模型的第三代工作流引擎,系统遵守WfMC规范,软件体积小巧,方便使用,并提供了基于浏览器的流程设计器。系统基于PetriNet模型开发,便于理论分析,支持持久化。文档齐全,支持标准的Web Service接口。系统的缺点是功能过于简单,系统性能和稳定性有待验证。

Activiti是一款开源的、灵活的、易扩展的可执行流程语言框架,它由JBPM的创始人Tom Baeyens发起。Activiti可以运行在任何部署在服务器、集群、云计算中心上的Java程序当中,具有良好的发展前景。

国内厂商也推出了众多的工作流产品,比较有代表性的有普元EOS、方正飞鸿BPMES平台、StarFlow等等,相比于国外的工作流引擎软件,国内的软件在性能和功能上与国外还有不小的差距。

2.4 工作流的应用和市场前景

自从上世纪九十年代末,随着工作流的理论逐渐完善成熟,各种支持工作流或者包含工作流特征的软件如雨后春笋纷纷出现。微软、IBM、Oracle这些老牌软件公司都推出了自己的工作流产品和解决方案,在国内也有多达上百家的IT公司正在大力推广自己的工作流产品,努力提高自己的市场份额。

工作流管理软件之所以能被众多的IT公司所重视,不断的进行理论和技术的创新,究其原因,是因为工作流管理软件有着广泛的应用领域和市场空间。目前在政府、企业、学校、医院等各种不同的单位都能看到工作流管理软件的身影,工作流管理软件的使用范围遍及电子政务、金融服务、企业管理、制造流通、物业管理等等。

从具体的使用功能上来看,工作流管理系统支持的业务包括:

? 行政管理业务:包括公文下发,各种办公用品的采购存储使用流程,日

常工作成果上报审查等等。

? 人事管理业务:包括企业组织结构变更,员工职位职级变更,员工绩效

考核,员工培训考试管理等等。

? 财务管理业务:包括员工出差经费报销、日常开支报销流程、其他经费

的支出审核管理等等。

? 客户关系管理业务:包括客户信息管理、客户投诉管理以及客户售后服

8

务流程处理等等。

? 其他具有流程特征的业务:包括质量管理、风险管理、贸易公司的报关

处理等业务。

根据《2012年度中国OA软件市场分析报告》和《2012年度中国ERP软件市场分析报告》,2012年中国的OA软件市场取得了35%以上的复合增长率,OA市场总额已经突破百亿元大关[9]。工作流管理软件作为OA系统和ERP系统中的重要组成部分,其市场地位还未得到大多数人的重视。据分析,2012年国内独立工作流软件产品的市场份额大约在9千万到1.5亿元人民币之间,虽然目前这个数字还不大,但是增长率超过了OA软件和ERP软件市场。从以上的资料和分析我们可以得出,工作流管理软件因为其技术上的重要性和使用的广泛性,还有很大的市场空间有待我们发掘。

9

第三章 Activiti体系结构

3.1 Activiti介绍

Activiti是由JBPM的创建者Tom Baeyens推出的新一代开源工作流引擎软件,目前最新的是2013年三月份更新的Activiti 5.12版本[10]。Activiti吸收了JBPM的许多成功经验,并加入了一些新的技术和思想,旨在成为下一代的优秀BPM解决方案。Activiti完全遵循BPMN2.0规范,BPMN全称为 Business Process Model and Notation, 是由OMG组织维护的业务建模语言,被众多厂商支持。Activiti从一开始设计就充分考虑到了开发人员的需要,Activiti使用方便,既可以嵌入到应用系统中使用,也可以作为独立的应用部署。同时 Activiti 提供了很多 BPM 高级工具,其中还包括开发协作工具,使得开发人员、业务人员和运行维护人员能够更好的协同工作。

Activiti系统服务结构图如下:

图3.1 Activiti系统服务结构图

每个服务的含义如下:

RepositoryService: Activiti 需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件,表单定义文件,流程定义图像文件等 )来定义不同版本的业务流程,这些文件都存储在 Activiti 内建的 Repository 中。Repository Service 提供了对 repository 的存取服务[11]。

RuntimeService:在 Activiti 系统当中,每次启动一个预定义流程的时候,都会生成新的流程对象实例,Runtime Service 负责对这些业务流程实例的管理。此外,它还提供了对流程部署,流程定义和流程实例的存取服务,以及流程启动、流程实例的查询、设置流程变量实例等功能。

10

TaskService:在Activiti 中业务流程定义的每一个执行节点都被称为任务(Task),在Task中可以完成业务流程的数据流转、节点的状态变更等等操作[12]。Task Service提供了对业务系统的任务和表单的设置功能,通过Task Service可以在运行时对任务进行查询、领取、完成、删除以及变量设置等操作。

IdentityService:在进行流程定义的时候,必须要为不同的任务指定特定的用户,Identity Service 提供了组和用户管理的功能,通过Identity Service 可以对用户进行分组管理,并为不同角色的用户分配任务。

ManagementService: Management Service 主要是Activiti系统管理员用来对Activiti系统进行管理和维护,一般不会在应用系统中用到,管理界面简洁但是功能强大,可以完成Activiti的各种参数设置,对Activiti性能进行优化。

HistoryService: History Service 用于获取正在运行或已经完成的流程实例的信息,与 Runtime Service 中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经进行了查询优化。

FormService: 业务流程一般都会关联特定的表单,让用户通过表单完成特定的任务才会有意义。通过FormService可以完成表单的设计,并把表单和任务相关联,最后把表单展现给用户,完成数据的流转和展示工作。

3.2 Activiti的结构

Activiti包含三种类型的组件,分别是专用工具(Dedicated Tools)、存储内容(Stored Content)、协作工具(Collaboration Tool)[13],组件之间的关系如下图所示:

图3.2 Activiti组成结构图

11

下面分别对这三类组件进行具体介绍:

(1)专用工具(Dedicated Tools)组件包括(内容管理)Alfresco、建模器(Activiti Modeler)、设计器(Activiti Designer(Eclipse plugin))、管理及监控(Activiti probe)、任务管理(Activiti Explorer)五个工具组件[14]。

Alfresco是由Alfresco公司推出的一款基于JAVA和FreeMarker优秀的开源企业内容管理系统,功能包括:文档管理、知识库管理、电子邮件管理、协同工作等等,Alfresco是目前使用最为广泛的企业内容管理平台之一。在2010年被InfoWorld评为最佳开源软件。Alfresco已经与Activiti进行深度集成,Activiti中的所以资源包括流程本身都是被Alfresco所管理。

Activiti提供了完全基于WEB浏览器的流程建模器,方便用户进行流程定义工作,流程建模器完全遵循BPMN2.0规范,用户还可以通过建模器进行流程定义文件的导入导出工作,流程建模器的底层是基于Signavio开发的。

Activiti Designer 是集成到Eclipse开发平台上的建模工具,它是一个标准的Eclipse插件,可以方便开发人员在Eclipse开发平台上进行建模开发。

Activiti probe是一个基于WEB的控制台,用来对流程引擎进行监控和管理。通过Activiti Probe,可以查看所有的流程定义信息,以及系统部署运行状态,甚至可以查询系统数据库表的记录,以及系统运行的日志信息等等。

(2)存储内容(Stored Content)组件包含文档仓库(Documents Repository)、模型仓库(Model Repository)、SVN仓库(SVN Repository)、MVN仓库(MVN Repository)、Activiti引擎(Activiti Engine)。

Activiti Engine是整个Activiti引擎的核心组件,它的作用是将流程定义文件,转为为可以运行的内存中的JAVA对象,以供运行时各个功能使用。Activiti Engine是目前第一个,也是唯一一个从建模到执行,完全遵循BPMN2.0规范的工作流引擎软件[16]。

ActivitiCycle是Activiti区别于其他工作流软件的创新之处,ActivitiCycle的提出是因为现代企业信息管理系统的建设一般需要业务人员、开发人员、系统维护人员的良好配合才能顺利完成,ActivitiCycle为不同角色的人员提供了不同的工作区,帮助他们进行文件管理和信息交互。

3.3 Activiti的特点

Activiti 引擎是目前业内第一个,也是唯一一个从建模到执行,完全遵循BPMN2.0规范的工作流引擎软件。它基于流程虚拟机(PVM)进行构建,负责解析流程定义文件,将流程对象转化为内存中可以执行的JAVA对象,以供其他业务调用。它可以直接运行原生的BPMN2.0规范格式的工作流定义文件,这也

12

是我们选用Acitivi作为学习研究的对象的原因。

Activiti 引擎具有三个十分重要的特性:

(1)事件监听器的应用。Activiti 引擎采用事件的方式类接收消息触发事件执行,开发人员只需要关心自己的业务实现,而完全不用关心工作流的底层实现方式,把业务和工作流之间的耦合度降到最低。

(2)提供了定制活动的能力。对于大多数的商业工作流引擎来说,活动类型都是已经定义好的不可更改的,而Activiti引擎提供了定制活动类型的能力,在某些特殊情景下,开发人员可以根据需要自定义活动类型,用来实现业务人员所描述的复杂行为,这个功能应该是相当实用而又重要的。

(3)对复杂BPMN规范的简写。BPMN规范本身体系庞大,结构复杂,完全采用BPMN规范描述的流程文件难以看懂,对于大多数开发人员来说,这是一个不小的挑战。Activiti提供了比BPMN更为简单紧凑的XML格式来描述BPMN中的某些规范和术语,同时Activiti XML又可以转换为等效的BPMN XML。这就相当于Hibernate框架提供的HSQL一样,简明易用,大大减轻了开发人员的工作量。

根据国外开源网站统计,2012年Activiti在开源工作流引擎中的下载量仅次于JBPM,而且增长速度迅猛,大有赶超JBPM的趋势。那么作为开源工作流引擎家族的新兴势力,它为什么有这么大的吸引力呢:

(1)开源工作流引擎,并提供了完善的文档和说明文件,降低了工作流的使用门槛以及使用成本。

(2)灵活的使用方式,适用于各种类型的系统和项目。Activiti既可以单独部署,也可以作为应用系统的一部分嵌入到我们的应用当中。

(3)提供了人性化的流程设计、运行管理监控界面。Activiti建模器(Activiti Modeler)用于业务人员进行流程设计,Activiti设计器(Activiti Designer(Eclipse plugin))方便开发人员在Eclipse平台中进行流程设计和开发,Activiti管理及监控(Activiti probe)和任务管理(Activiti Explorer)都提供了基于浏览器的界面对流程的运行进行管理和监控。

通过以上的分析我们可以知道,Activiti作为一款基于JAVA的开源工作流引擎软件,其设计理念先进,技术实现上有许多独到之处,有许多值得我们学习借鉴的地方。当然,Activti出现的时间还比较短,在工作流引擎大家族中属于后起之秀,其在实际应用中的表现还有待时间的检验。

13

第四章 基于Activiti的工作流管理系统ABPM

4.1 系统开发背景

具有流程特征的活动或者业务在我们的生活中无处不在,比如企业和单位的员工请假审批,出差报销单的审批流程等等,笔者参与开发的软件项目就有不少设计到审批流程的。那么在没有使用工作流引擎技术的时候,我们一般是怎么实现的呢?就以出差报销流程为例说明。为了实现报销单在不同的角色人员之间流转和审批最终完成报销流程,我们除了报销单实体类表之外,还需要一个状态表来记录报销单的状态信息。系统通过报销单的状态字段来判断报销单所处的状态,决定应该由哪个角色来查看审批报销单。审批人员填写审批信息以后,通过改变状态字段来实现报销单的流转,最终实现整个报销流程。

1 : 1

图4.1 报销单与状态实体关系图

上面的实现方式简单直观,对系统的开销也比较小,但是在实际应用中我们发现这种方式有不少的弊端。比如:

? 流程没有办法调整。如果企业的报销流程保持不变,我们的系统可以一

直正常的工作下去。一旦用户需要对报销流程作出调整,就必须要修改程序源代码,这样就使系统的后期维护成本大大增加,甚至可以说系统难以满足用户要求。在实际情况下,随着企业人事组织机构的变动,业务流程的调整是难以避免的。

? 人员角色和组织结构没有办法改变。这种实现方式必须要实现知道企业

的人员组织结构和角色,不同的流程对应的角色是固化在代码当中的。当企业人员结构或者角色进行调整的时候,系统就不能满足企业日常运

14

行需求。

? 不能满足复杂业务场景需要。以上设计方案的特点是流程只能顺序执行,

但是在一些复杂使用场景下,比如:某些流程需要多人会审;某些流程需要回退;可以让其他的角色代理执行业务等等,上面的设计方案就无能为力了。

? 流程和业务耦合度太高,不利于开发和后期维护。在上面的实现方案中,

业务代码和流程实现是融合在一起的,开发人员必须对企业流程有足够的了解才能进行软件开发。某些成熟的企业有专门的流程设计人员来进行流程管理,但是在上面的设计方案中不借助开发人员的帮助,流程管理人员是没有办法对流程进行再造和调整。

工作流引擎(Workflow Engine)和工作流管理系统就是为了解决上面的问题而产生的。工作流引擎通过对业务操作进行抽象和建模来完成工作流的定义和管理,并可以按照在计算机中预先定义好的逻辑推进工作流实例的执行。工作流引擎是整个工作流管理系统的关键与核心,通过工作流引擎对用户提供工作流定义、实现和管理工作流运行功能,并提供友好的用户界面帮助用户完成流程从定义、执行、监控到后期统计分析的整个生命周期工作。

采用工作流管理软件来帮助我们完成流程定义、流程执行、流程后期管理等方面的工作,使开发人员专注于系统的业务实现,可以减少开发人员工作量,缩短项目的开发时间。然而当许多IT公司在选择工作流软件产品时,往往面临如下的难题:国外大公司的产品价格昂贵,使用门槛高;开源产品功能和质量参差不齐,而且缺乏完善的文档和后期维护保障;从头开始自己开发工作流产品,代价一般的公司难以承受。Activiti作为一款优秀的开源工作流引擎软件,从一开始出现就吸引了作者的注意,本文的目的就在于吸收Activiti优点之上设计实现一款轻量级的简单易用的工作流管理系统。

4.2 系统设计目标

ABPM工作流管理系统目标是建立一套统一的遵循J2EE标准的性能优秀的一体化工作流设计、建模、运行和监控平台,系统对计算机资源消耗少,便于安装和部署。ABPM为企业业务人员、系统开发人员、系统管理人员提供了不同的工作区间,业务人员可以通过基于浏览器的流程设计器来完成企业的业务流程设计,开发人员可以在Eclipse设计器插件中完成业务的开发和调试,系统管理人员可以通过ABPM控制台来查看系统的运行状态,所有的流程和任务信息,并进行必要的设置。不同角色的人员互不干扰,又可以方便的进行协作和交流,提高了工作效率。

(1)灵活的流程调度模型。流程调度是工作流引擎的基本功能,也是最为

15

重要的功能,ABPM系统除了支持常见的顺序、分支、并发、循环、嵌套子流程、多路选择、多路归并等基本流程模式之外,还支持回退、条件路由、并行会审、串行会审等特殊流程调度模式。这些特殊调度模式考虑到了企业流程执行的实际情况,更适合中国的企业文化,这也是ABPM区别与其他工作流管理系统的特色之一。

(2)强大的任务处理机制。ABPM系统具有快速任务查询能力以及多种灵活的任务分配和任务代理机制。通过ABPM系统提供的查询代办任务接口,用户可以即时查看自己的代办任务信息,而不会出现遗漏或者不及时的情况,用户还可以查看流程的运行状态以及历史信息,大大方便了用户的日常工作。ABPM系统默认支持基于角色的任务分配机制,同时还可以在业务系统中指定活动的参与者,或者通过前驱活动指定参与者等方式来进行任务分配。在任务处理方面,通过ABPM可以完成领取、撤销、退回、结束、会审等多种操作。任务代理是现代工作流引擎的特点之一,也是企业日常业务流程中经常出现的一种情况,ABPM支持基于角色和人员的任务代理模式,同时又可以设置代理的有效期,超过有效期自动收回代理权。如果需要的话,可以设置为代理权确认模式,即受委托的人完成业务流程后再由委托人确认方能使操作生效,进一步明确权限的范围。

(3)方便的与用户IDE、开发框架、运行环境融合。ABPM提供了标准的Eclipse工作流程设计器,让开发人员在IDE中就可以完成流程的所有设计和开发工作,并可以很方便的进行测试。ABPM也可以很好的与常见的Spring、Struts、Hibernate框架一起工作,不需要进行额外的配置工作。同时,也可以将ABPM系统嵌入到业务应用系统当中,让用户参与工作流的管理工作,以获取更好的用户体验。

(4)支持“集中/独立/分级”等多种引擎部署模式。ABPM提供了多种灵活的部署模式以满足不同企业的业务需要。集中部署模式:对于一般的中小型规模的企业应用系统,可以将ABPM嵌入到应用系统当中统一部署运行,这种模式比较简单直观。独立部署模式:即业务应用系统和ABPM各自单独部署,两个系统互不干扰,ABPM系统故障不会影响到整个业务系统的正常运行,一般推荐这种模式。分级部署模式:一般适合规模比较大在地域上比较分散的企业,可以在上级单位和下级单位分别部署ABPM系统,来协作完成业务流程。

(5)支持图形化、集中的管理监控和明晰的分域授权管理。相比于单一的命令行控制台和复杂的配置文件,图形化的管理监控界面更能让用户接受,同时降低了用户的学习和使用成本。管理员可以通过基于WEB的控制台来对流程进行深入的跟踪、监控、分析。在控制台上可以看到所有的流程定义文件、流程运行实例、活动实例以及所有流程的运行状态。如果ABPM部署了多个节点,在控制台界面上还可以看到任一节点的所有任务信息,并可以对流程的子流程进行深入跟踪。ABPM系统对系统管理权限可以实现分域授权管理,即对不同业务目录下的所有资源可以设置不同的角色来进行管理,以方便系统角色区分。

16

(6)支持深入的流程执行跟踪和审计功能。ABPM系统提供了强大的流程执行跟踪和审计功能,系统可以根据用户设置的级别来记录不同详细程度的日志信息。包括流程节点执行的时间、执行的角色、从上一节点到下一个节点的处理时间、每个节点的平均处理时间、整个流程的耗时以及系统中的异常信息,都会被记录下来,以方便后期的统计和分析。用户可以通过这些数据来统计业务流程的执行效率,发现业务流程中的问题,管理员也可以通过日志信息来定位和解决系统故障。

(7)支持灵活的流程版本管理机制。ABPM支持热部署模式,即流程变更后无需重启服务器就可以使设置生效。此外,ABPM还支持流程回退、特事特办等个性化需求以满足特殊使用场景。

4.3 ABPM总体架构

工作流引擎是整个工作流管理系统的核心,工作流定义的解析、流程实例化以及流程的执行都由引擎来完成[16]。要完成流程整个生命周期的工作,引擎还需要与外围的模块和资源打交道,包括过程建模工具、用户组织角色模型、任务表、和客户端应用程序等。系统的总体结构图如下:

图4.2 ABPM系统总体结构图

ABPM系统采用分层的设计思想,把系统的不同部分进行抽象,每个部分完

17

成独立的工作,通过接口的方式进行数据交换。处在系统最核心的是工作流引擎,工作流引擎负责完成流程的解析实例化,并把任务安排给合适的角色或者人员来执行。执行的过程和结果在流程监控界面上可以看到。

用户一般不直接和工作流引擎打交道,用户需要做的是通过过程建模工具完成过程的定义,定义好的流程会被工作流引擎引用。除了工作流的相关信息,在系统中还需要定义用户组织、角色和权限模型,通过将用户模型与任务相关联,工作流引擎才能知道在什么时机把任务发送给什么角色的人员来完成。

在系统外围的是客户端应用程序,工作流引擎通过接口的方式完成外围应用的调用。因为外围应用程序的结构不可预知,因此需要精心设计并遵循一定的标准才能保证客户端程序和工作流管理系统能够协同完成业务。

18

第五章 ABPM系统的设计与实现

5.1 系统结构

根据工作流管理联盟参考模型,一个完整的工作流管理系统一般应当具有过程定义工具、管理监控工具、工作流API和数据交换格式、其他工作流执行的服务、客户端应用程序、被调用的其他应用程序这六个部门的内容组成[17]。不同部分之间的交互主要通过五种不同的接口来进行,他们之间的关系如下图所示:

管理监 控工具 过程定义工具 接口一 工作流API和数据交换格式 其他工作流执行的服务 工作流执行服务 接口五 工作流引擎 接口二 工作流引擎 接口四 接口三

图5.1 ABPM系统结构图

(1)过程定义工具。过程定义工具主要包含以下的要素:(1)建立过程定义的能力;(2)用AND-split、AND-join、 OR-split、OR-join这样的图形组件、对顺序、并行、选择和迭代路由进行建模的能力;(3)版本管理的支持;(4)过程中使用的案例属性的定义;(5)任务定义;(6)过程定义的正确性检查,以及任何遗漏或不一致的追踪[19]。在过程中,需要为每个任务建立多个属性。这些属性决定了在什么条件下执行任务,和执行什么操作。

下面列出了应为每个任务建立的属性: ? 人物的名称和描述。

? 任务信息——换句话说,员工执行任务时所需的指令和支持信息。 ? 执行任务的资源需求。

19

客户端应用程序

被调用的应用程序

? 任务的路由特性。 ? 需要的触发的定义。 ? 对工作流引擎的指令。

? 需要启动的应用程序以及应用程序启动的条件和次序。 ? 被应用程序使用和调整的案例属性的定义。

当OR-split或混合的OR/AND-split存在时,依据案例属性来确定后续任务的决策原则[20]。资源分类工具:除了定义过程,还必须对执行工作流十所需的资源进行分类,这样任务才能用特定的雇员分离。为此,要明确如下要素:

? 一个资源分类列表,通常被划分为角色和组织单元。 ? 资源分类的特性。

? 各种资源分类之间的联系。

分析工具:通常情况下工作流管理系统仅提供了有限的分析能力。因此在大多数的系统中,再投入生产前,很有可能定义出一些会带来灾难性后果的过程。因此将来的工作流管理系统会提供越来越多的分析能力。

(2)管理和监控工具。管理和监控工具主要是管理员用来进行用户角色权限组织结构的维护、工作流系统环境的重新配置、以及工作流的运行状态管理。系统还提供了对工作流运行相关数据的统计分析工具,比如任务的平均完成时间、平均等待时间和处理时间、在一定时间内完成任务的百分比、资源利用率的评价水平,这对于我们分析和改进业务流程是非常重要的。

(3)工作流客户端应用程序。在ABPM系统当中,工作流客户端的主要作用是为用户提供一个工作列表管理功能,用户通过工作列表管理器可以查看到当前所有可以操作的工作项,工作项的相关属性信息,可以按照名称或者其他属性对工作项进行排序。用户可以选择一项工作,启动任务实例,客户端把启动消息发送给引擎完成任务实例的创建工作,创建结果会返回给客户端程序。

(4)被调用的其他应用程序。ABPM负责流程的逻辑运行,而具体的业务操作应当由相关的应用程序来完成,用户通过开发人员设计的应用程序来完成具体的业务。一般情况下,一个Form表单就可以完成业务数据的提交工作,在某些情况下,与用户交互的可能是专门设计的应用程序,比如某些办公工具或者报表工具。该模块的主要功能是对抽取的特征信息进行分词、去重、去停用词、同义词替换、关键词词频统计等处理。

(5)其他的工作流执行服务。如果业务系统的用户数比较多,可能需要多个ABPM系统工作流引擎实例来满足业务需求,若干个工作流系统之间可以并行运行,并进行相互连接,我们称这种情况为工作流互操作。

5.2 功能分析

20

一般说来工作流管理软件都包括工作流引擎、工作流定义工具、工作流执行服务、工作流监控工具、对外封装接口几部分组成[21],下面对这几部分进行详细说明。

图5.2 ABPM模块示意图

(1)流程定义工具。现在几乎所有的工作流产品都提供可视化的流程设计工具,我们的ABPM系统也提供了基于浏览器的流程设计器和开发人员在Eclipse平台使用的流程设计插件。现在有些产品不仅提供流程设计功能,还能验证工作流定义的正确性,甚至可以在流程执行前进行模拟仿真,这也是我们以后的研究方向。流程定义包含流程执行过程中可能用到的所有信息,这些元素包括开始结束条件、节点、节点之间的关联关系以及节点需要调用的服务,流程的参与执行者和要用到的相关数据等等。流程的执行者可以是具体用户,也可以是组织或者角色。

(2)工作流执行服务。系统中可以存在一个或者多个工作流引擎来提供工作流执行服务,管理多个流程实例的执行,这些工作流引擎可以是集中式的也可能是分布式部署的。工作流执行服务通过机解析流程定义文件,根据流程的逻辑安排活动的执行顺序,把工作项添加到用户的工作表中,在适当的时候调用应用程序来完成工作。

流程定义是工作流执行服务的前提条件,流程定义中包含了流程实例执行所需要的数据,这些数据主要包括节点信息、节点之间的逻辑关系和引起流程状态改变的用户操作等等。流程执行服务根据这些信息来控制和完成流程的整个运行

21

消息系统 数据库 流程设计器 客户端 表单设计器 Eclipse插件 流程运行监控 用户角色管理 资源仓库 工作流引擎 域控制器 内容系统 目录服务周期。如果流程定义信息中包含相关联的用户组织角色,那么流程执行服务将会根据配置信息请求调用相关的组织角色模型的数据来完成业务操作。

在一般情况下,被调用的应用程序可能与工作流引擎在同一台计算机上的相同环境中,也有可能处于不同的系统平台上。在实际中,企业的应用系统结构往往千差万别,运行平台也不尽相同,所以怎样让工作流引擎屏蔽应用系统的差异性完成业务调用,是工作流管理系统的一大难题,按照统一标准设计的接口有助于解决这一问题。

(3)流程实例表管理器。流程实例表管理器是工作流执行服务和用户之间交互的载体,它负责流程实例的存储,并把流程的信息反馈给用户。在某些开源的工作流引擎中,允许用户自己来扩展流程实例表管理器的实现方式,当然在我们的系统当中,它是作为系统的一部分存在的。在实际运行中,用户可以通过流程实例表管理器来查看流程的运行状态并对其进行修改。流程实例表管理器在系统中一般只存在一个实例,而工作流引擎则可能有多个与它进行交互。

(4)工作流监控工具。对于用户来说,工作流管理系统除了要完成流程的定义、执行过程以外,对流程的监控和管理也是很重要的功能。工作流监控以用户权限模型为基础,实行严格的权限区分,不同权限的用户可以进行不同的操作。管理员用户可以对流程的定义所有元素进行修改,可以更改流程节点的执行角色或者用户,可以暂停或者挂起一个运行中的流程实例。我们还可以通过工作流监控工具得到很多企业管理方面的信息,比如企业流程的平均完成时间、节点执行花费的时间、某个员工的执行效率等信息,这对于我们发现企业流程中的不足改进流程是非常有帮助的。

(5)对外接口实现及封装。ABPM系统也是基于以上的结构来实现的,ABPM还提供了REST风格的API给开发人员来调用工作流引擎的相关接口。REST API采用了JASON数据交换格式,建立在Spring Webscprit之上。每个Rest API调用都有其各自的认证级别,认证使用的是基本的HTTP认证,拥有权限的用户才能进行相关的操作。

5.3 工作流引擎

工作流引擎是整个ABPM工作流管理系统的核心,或者说是系统的中央运行枢纽[22]。ABPM吸收和借鉴了Activiti的设计思路和实现方案,通过抽象和封装,把工作流引擎尽可能的独立成一个中间层来完成所有与流程运行相关的动作,比如流程的流转、流程补偿机制、出错处理等。

22

图5.3 ABPM工作流引擎工作示意图

基于Activiti的工作执行引擎具有以下的优点:

透明性:透明性是指工作流系统的用户(业务的执行者)不需要知道工作流引擎的具体部署信息,包括所使用的平台和框架、开发语言等,工作流引擎的运行和内部实现细节,工作流引擎和业务系统之间的信息交互的具体过程等等。业务的实际执行者甚至察觉不到工作流引擎的存在。

跨平台性:基于J2EE规范开发实现的工作流系统可以在Windows、Linux等各种不同的平台上部署。

兼容性:工作流引擎除了要和用户交互,还要和各种异构业务系统进行交互。Activiti工作流引擎从一开始就预见到了这种差异性,使用了Web Service等先进的理念和技术来解决异构系统之间的交互问题。

5.3.1 流程解析器

流程解析器主要负责将符号化的流程定义文件解析成XML文件,并最终转化成可执行对象供执行引擎使用[23]。系统使用工作流模版来描述和定义工作流对象,最终通过持久化层将工作流保存在数据库当中。

5.3.2 流程管理器

在BPMN中,每个流程都必须至少拥有一个启动活动,当某个起始活动被触发,一个新的流程实例将会被创建。起始活动的触发条件有两种:第一种是外界传递进来的消息,第二种是pick活动的警报。

23

图5.4 ABPM 流程管理器

流程管理器负责维护一个receive活动队列,当前引擎中运行的所有流程的正在执行的receice活动都在receive队列中等待接收消息。Receive活动也包括事件处理器中的onMessage活动和pick活动,这些活动都可以接收外界传递进来的消息。

外界传递进来的消息会被引擎分发给正确的流程实例。如果该消息中存在相关性的信息,引擎会负责查找符合该相关性的信息。如果消息中不存在任何相关性信息或者没有实例匹配该相关性消息,那么引擎就会创建一个信息的流程。因此,可以说流程队列机制是维持工作流引擎正常运转的关键部分。

5.3.3 流程执行器

流程执行器是工作流引擎的核心,负责流程节点的执行。它通过解析路由规则为流程和节点的执行导航,使业务操作能够按照预先定义的逻辑向前推进。我们还可以为节点指定不同的事务属性来满足不同的业务需要。

5.3.4 消息接口

本文采用向量空间模型算法(VSM)来确定论文元数据项之间的相关性[24]。把论文的各元数据项看作是由一系列词构成的,每一个词都有一个权重,不同的

24

词根据自己在论文中的权重来影响论文元数据项相关分数。

5.4 基于WEB的流程设计器

ABPM流程设计器实现了BPMN2.0规范,使用方法和Eclipse流程设计器基本相同。流程设计器的功能包括:新建流程;发布流程;增加、修改、删除节点;增加、删除、修改传输线;流程图的缩放显示等等。

ABPM流程设计器采用Flex技术来实现,Flex是目前最流行的RIA(Rich Internet Applications,简称RIA)富互联网应用技术之一,Flex技术克服了传统的HTML语言只适合展现文本、互动性差的缺点,采用Flex开发的程序界面美观、使用方便,非常适合用于流程设计器的实现。用户可以用鼠标拖拽流程基本元素到右边的画板上进行流程设计,并且可以复制粘贴,大大方便了流程的设计工作。

ABPM流程设计器界面如图5.3所示:

图5.5 ABPM流程设计器

流程设计器的最左边是基本控件栏,以图形的方式列出了流程的基本构成元素,包括开始结束条件、节点、分支、合并、任务等等,流程设计器的中间是画板,用户可以把左边的构件拖拽到右边的画板上合适的位置,在界面的下方是属性栏,用户可以对画板上的所有元素的属性进行详细设置,点击XML TAB页,还可以看到用户设计的流程的等价XML文件。

(1) 工作流活动节点支持人工节点、自动节点、分支节点 (2) 支持活动的串行、并行、条件流转、退回 (3) 支持节点与、或、异或等输入输出方式定义

25

(4) 支持节点的定时、Java脚本、表达式支持

用户设计好需要的流程之后,可以点击预览按钮对流程进行预览查看,还可以将流程文件保存为本地文件,以方便在其他的地方使用。预览界面如下图所示:

图5.6 ABPM流程预览

流程的设计和定义是整个流程管理系统的关键部分,流程的定义完成之后,我们才能进行下一步的工作。包括流程的持久化,启动流程运行实例,对流程运行进行监控等等。

5.5 基于WEB的表单设计器

表单是基于WEB的业务应用系统必不可少的组成元素,为了进一步减少开发人员的工作量,让开发工作更加智能化,ABPM系统提供了基于浏览器的表单设计器。表单设计器在开源编辑器FckEditor的基础上开发,为用户提供了完整的业务数据定义功能。用户可以在线定义表单模型,可以增加、删除、修改表单元素,并可以设置表单的布局和外观,可以满足大部分场景的业务需求。用户可以与工作流引擎结合在一起使用,也可以单独使用表单设计功能。

ABPM在线表单设计器界面如图5.7所示:

26

图5.7 ABPM在线表单设计器

ABPM在线表单设计器的优点如下: (1)支持绝大部分的HTML元素。 (2)支持日期时间选择控件。 (3)支持单行和多行文本框。

(4)可以直接在网页上预览效果或者查看源代码。

5.6 流程持久化

为了保证工作流引擎的可靠性,我们需要将系统的各种配置信息持久化到数据库中保存起来,这样系统一旦出现问题,可以从持久化信息中恢复正常,以免丢失状态信息。从业务的角度来看,现在激烈的市场竞争需要企业能够快速调整业务流程来满足不同客户的需求,这就要求我们的工作流管理软件必须提供调整正在执行中的流程的能力,流程可以有不同的版本。旧的流程实例按照老版本来走,新的流程实例按照新版本来走。

ABPM系统采用Hibernate框架来实现流程的持久化,Hibernate是一个开源的优秀的ER-Mapping(对象关系映射)工具,它屏蔽了JDBC的底层实现细节,使得程序员可以用对象的方式来与数据库进行交互,减少了开发中间出错的可能,提高了开发人员的工作效率[19]。在MVC三层结构的应用系统当中,数据持久层一般在最底层为系统提供数据持久化功能,Hibernate为数据持久层提供了一个非常优秀的解决方案。开发人员通过Hibernate提供的Session、SessionFactory、Transaction、Query、Criteria和Configuration六个核心接口就可以完成数据持久层的几乎所有工作[20]。Hibernate自带的缓存机制,为我们解决大数据量、大并

27

发数的应用系统的性能问题提供了一个良好的解决方案。

ABPM把数据持久化的工作交给Hibernate来完成,开发人员在使用ABPM的时候完全不用去关心数据存储的底层细节,而只需要关注流程的设计和使用。开发人员可能用到的接口主要有ABPMSessionFactory、ABPMSession、GraghSession、TaskMgmtSession、ContextSession等。

GraghSession TaskMgmtSession ContextSession ABPMSession ABPMSessionFactory 图5.8 ABPM持久化接口

其中ABPMSessionFactory是系统持久化操作的入口:可以从ABPMSessionFactory得到ABPMSession接口,GraghSession、TaskMgmtSession和ContextSession可以从ABPMSession获得。GraghSession、TaskMgmtSession和ContextSession分别提供了在流程执行时节点、任务、上下文的持久化操作。

5.7 主要接口说明

ABPM系统为流程的整个生命周期提供了全面的API函数,开发人员使用比较多的应该是关于流程引擎、流程、任务、身份、管理这几个方面的内容。下面就对这几个关键的接口进行说明。

5.7.1 流程引擎

API:ProcessEngines.getProcessEngine(configuredProcessEngineName) 说明:返回流程引擎初始的详细信息。如果启动时有错,出错的详细信息将在相应的Exception属性中给出。

28

5.7.2 流程

API: processEngines.processDefinitionId(processDefinitionId)

返回有关部署的流程定义的详细信息,可按”id”、”name”、”version”或”deploymentTime”来排序。BPMN2.0 XML流程图的名称是在”resourceName”属性给出的,结合”deploymentId”属性可以由上文中的获取部署资源的REST API调用得到这一名称。如果流程中有启动的表单,那么它是由”

startFormResourceKey”属性给出的。流程的启动表单可以从获取启动流程表单的REST API调用来获取。

API: processEngines.startProcessInstanceById(businessKey, variables) 通过流程定义Id来启动流程实例,可以在variables中添加附加的启动信息,businessKey是流程包含的业务Id。

5.7.3 任务

API: processEnginesgetTaskService().createTaskQuery().listPage() 返回任务的分页列表,其中可以按\\或\进行排序。该列表必须基于特定角色的用户:代理人(列出了分配给用户的任务)或候选者(列出了用户可以认领的任务)或候选组(列出了组中成员可以认领的任务)。如果任务中存在表单,那么是在\属性给出的。任务的表单可以从获取任务表单的REST API调用获得。

API: ProcessEngines.getTaskService().start(taskId) 执行任务上的操作(认领或完成)。

5.7.4 用户身份认证

API:identityService().checkPassword(userId, password)

对用户进行认证。如果用户和密码与请求不匹配,就会返回403状态码。如果认证成功,会返回状态码200的响应

API: identityService().createUserQuery().userId(userId).singleResult(); 返回关于用户的详细信息。

API: identityService().xxx(userId[, groupType])

返回用户所在组的分页列表,其中可按\或\进行排序。要想只获得某类型的组,需要使用”type”参数。

5.7.5 作业

29

API: processEngines.createJobQuery().xxx().listPage()

返回作业的分页列表,可按\\或者任何某个自定义属性的id 对其进行排序。该列表也可以通过流程实例的id 进行过滤,或者如果作业被重操作过,或它们是可执行的或者它们只有消息或定时器,这时也可以通过到期时间对其进行过滤。

API: processEngines.getManagementService().executeJob(jobId) 执行作业。

30

第六章 测试与应用

6.1 测试环境

ABPM系统延续了Activiti工作流引擎性能强大、简单易用的特点,系统可伸缩性强,可以满足各种复杂使用场景,不同规模应用系统的需要。在论文的最后,我们用实验的方式对ABPM系统的性能进行测试。测试环境如下:

表6.1 测试环境

CPU 内存大小 硬盘大小 操作系统 应用服务器 数据库 工作模式

Intel(R) Core(TM) i3-2350M 4核CPU 4.00GB 320GB Windows7 Ultimate 64位 Weblogic Oracle10g 单机独立部署 6.2 测试脚本

系统的测试场景为一个请假流程,员工请假需要在系统中首先向组长提交请假申请单,组长审批通过则提交给项目经理审批,组长审批不通过则退回员工修改;项目经理审批通过则提交给经理审批,项目经理审批不通过,则流程中止,返回审批结果给员工查看;经理审批通过,请假通过,流程结束;经理审批不通过,流程中止,返回审批结果给员工。具体的流程图如下:

31

图6-1 请假流程图

设计完流程之后,下一步工作就是创建数据库表, 定义公文Leaverecord 及其映射文件Leaverecord.hbm.xml

public class Leaverecord implements Serializable{ /**

* 属性recordid */

private String recordid; /**

* 属性applicant */

private String applicant;

32

/**

* 属性leavetype */

private String leavetype; /**

* 属性reason */

private String reason; /**

* 属性begintime */

private Date begintime; /**

* 属性endtime */

private Date endtime; /**

* 属性isapproved */

private String isapproved; /**

* 属性annotation */

private String annotation; /**

* 属性approvedby */

private String approvedby; /**

* 属性insertperson */

private String insertperson; /**

* 属性ismanager */

private Integer ismanager; 33

private Integer lczt; /**

* Leaverecord构造函数 */

public Leaverecord() { super(); } /**

* Leaverecord完整的构造函数 */

public Leaverecord(String recordid){ this.recordid = recordid; } /**

* 属性 recordid 的get方法 * @return String */

public String getRecordid(){ return recordid; } /**

* 属性 recordid 的set方法 * @return */

public void setRecordid(String recordid){

if(recordid != null && recordid.trim().length() == 0){ this.recordid = null; }else{

this.recordid = recordid; } } /**

* 属性 applicant 的get方法 * @return String */

public String getApplicant(){

34

return applicant; } /**

* 属性 applicant 的set方法 * @return */

public void setApplicant(String applicant){ this.applicant = applicant; } /**

* 属性 leavetype 的get方法 * @return String */

public String getLeavetype(){ return leavetype; } /**

* 属性 leavetype 的set方法 * @return */

public void setLeavetype(String leavetype){ this.leavetype = leavetype; } /**

* 属性 reason 的get方法 * @return String */

public String getReason(){ return reason; } /**

* 属性 reason 的set方法 * @return */

public void setReason(String reason){ this.reason = reason;

35

} /**

* 属性 begintime 的get方法 * @return Date */

public Date getBegintime(){ return begintime; } /**

* 属性 begintime 的set方法 * @return */

public void setBegintime(Date begintime){ this.begintime = begintime; } /**

* 属性 endtime 的get方法 * @return Date */

public Date getEndtime(){ return endtime; } /**

* 属性 endtime 的set方法 * @return */

public void setEndtime(Date endtime){ this.endtime = endtime; } /**

* 属性 isapproved 的get方法 * @return Integer */

public String getIsapproved(){ return isapproved; }

36

/**

* 属性 isapproved 的set方法 * @return */

public void setIsapproved(String isapproved){ this.isapproved = isapproved; } /**

* 属性 annotation 的get方法 * @return String */

public String getAnnotation(){ return annotation; } /**

* 属性 annotation 的set方法 * @return */

public void setAnnotation(String annotation){ this.annotation = annotation; } /**

* 属性 approvedby 的get方法 * @return String */

public String getApprovedby(){ return approvedby; } /**

* 属性 approvedby 的set方法 * @return */

public void setApprovedby(String approvedby){ this.approvedby = approvedby; } /**

37

* 属性 insertperson 的get方法 * @return String */

public String getInsertperson(){ return insertperson; } /**

* 属性 insertperson 的set方法 * @return */

public void setInsertperson(String insertperson){ this.insertperson = insertperson; } /**

* 属性 ismanager 的get方法 * @return Integer */

public Integer getIsmanager(){ return ismanager; } /**

* 属性 ismanager 的set方法 * @return */

public void setIsmanager(Integer ismanager){ this.ismanager = ismanager; } /**

* Hibernate通过该方法判断对象是否相等 * @return boolean */

public boolean equals(Object o) { if (this == o)

return true;

if (o == null || !(o instanceof Leaverecord))

38

return false;

if(getRecordid() == null)

Leaverecord other = (Leaverecord) o;

return new EqualsBuilder() return false;

.append(this.getRecordid(), other.getRecordid())

.isEquals();

}

public void setLczt(Integer lczt) {

this.lczt = lczt; }

public Integer getLczt() { }

Leaverecord 映射文件Leaverecord.hbm.xml

return lczt; }

记录Id

申请人

39

请假类型

原因

请假开始时间

请假结束时间

是否批准

备注

批准人

40

登记人

是否经理

流程状态

第二步是创建公文Biz层接口,接口实现代码在此省略,关键代码如下:

public interface ILeaveBizc {

/**

* 保存更新方法 * @param ll * @return list */

public List saveOrUpdate(List ll); /** * 删除

* @param idObject */

public void remove(IDRequestObject idObject); /** * 查询

* @param queryCondition * @return QueryResultObject */

41

public QueryResultObject query(RequestCondition queryCondition); /**

* 查询单条记录 * @param id

* @return QueryResultObject */

public QueryResultObject queryById(String id); /**

* 初始化字典值

* @return QueryResultObject */

public QueryResultObject initDict(); /**

* 获取工作项ID * @return String */

public String getWorkItemId(String userId, String userName, String businessId, String

processDefId, String processDefName); }

/** * 设置

* @param usinessId, lczt */

public void setLczt(String businessId, String lczt);

第三步是发起流程,触发流程流转,关键代码如下

/** *流程发起

* @param businessId 业务id,如缺陷登记表中新增记录的主键ID

* @param prcessDefId 流程编号,ABPM中设置了固定值——\,

必须保持一致。

* @param proessDefName 流程名称,可以任意定义

* @param userId 需要调用者传输的参数变量,当前流程节点的处理人用户id * @param username 需要调用者传输的参数变量,当前流程节点的处理人用户姓名,

或者用户id

* @return 0:发送失败,1:发送成功,2:参数错误,\从文件获取数据字典失败

42

*/

@RequestMapping(value = \public @RawResponseBody {

String userId = \

Object userMap = request.getSession().getAttribute(\if(userMap instanceof Map) { } else { }

//String userId = \

String userName = userId;//ABPM必须要两个值都是userId

//从bdqx\\config\\enum\\enums.properties获取ABPM.DATA对应的字典 //然后取其中的prcessDefId和proessDefName对应的数据

List dicList = getDicItemFromFile(\ Map ABPMData = (Map)dicList.get(0);

String processDefId = ABPMData.get(\ABPMData = (Map)dicList.get(1);

String processDefName = ABPMData.get(\if(processDefId!=null&&!processDefId.equals(\ {

if(businessId!=null&&!businessId.equals(\ {

String startstatus = ABPMUtil.startABPM(businessId, processDefId,

&&userId!=null&&!userId.equals(\&&userName!=null&&!userName.equals(\

return \

userId = ((Map)userMap).get(\Object startABPM(HttpServletRequest request,

@RequestParam(\

&&processDefName!=null&&!processDefName.equals(\

processDefName, userId, userName);

if (startstatus.equals(\

String workItemId =

43

本文来源:https://www.bwwdw.com/article/wrxw.html

Top