基于JBPM的在线流程设计器的研究与应用

2018-07-25 12:05欧阳广津
计算机技术与发展 2018年7期
关键词:开发人员定义流程

欧阳广津,武 彤

(贵州大学 计算机科学与技术学院,贵州 贵阳 550000)

0 引 言

近年来,随着Internet技术的发展,电子化办公技术逐渐走进人们的工作和学习中。相对应的,电子化办公中的业务流程是复杂多变的,常见的解决策略是由相应的开发人员开发出针对该部门办公流程的系统。然而,随着时间的推移和部门的工作流程的改变,电子化办公中存在的问题也逐渐暴露出来,当业务工作流程发生变化之后,开发的电子办公系统无法处理变化之后的流程。通过统计发现,之前开发的电子办公系统是根据当时的业务流程而定制开发的,由客户提出相应的需求,开发人员对需求进行编码,然而,当业务流程发生变动时,电子化办公的使用人员缺少系统整合和升级系统的能力,这就严重影响了系统的生命周期。因此,传统的电子化办公流程开发方式已经不能满足当前业务发展的需要和后期的更改,这就要求人们在协同办公应用系统中,能够将复杂的工作流程从业务逻辑中剥离出来,并且在后期可以由用户根据自己的需求和变化进行更改,而不是由开发人员设计工作流程[1]。

文中以JBPM中的工作流技术为例,首先对JBPM进行相应的介绍,包括系统架构、工作流程及其不足之处,并对不足之处进行改进,然后将改进后的JBPM应用在综合信息服务管理平台中。

1 工作流简述

在20世纪70年代中期办公自动化领域中,工作流技术逐渐兴起,但对于工作流的研究,和工作流思想的出现,则应该追溯至更早的时期。随着计算机技术的迅速发展和互联网产业的兴起,在20世纪90年代后,工作流系统的开发进入一个新的阶段。大量的工作流技术应用于电信业、金融业、制造业、办公自动化领域等[2]。

进入21世纪,随着计算机技术的快速发展,工作流技术的定义也越发清晰。工作流联盟对工作流做出的定义:工作流是能够在运行过程中,实施完全或者部分自动执行的经营过程。它可以在不同的任务执行者之间,通过一系列规定,文档,或者定义自动的进行任务传递与执行。简单的说,工作流就是用一个个任务的节点,分支节点,判断节点,抽象地表示业务流的处理过程。工作流管理系统本质上是一个软件系统,然而它不同于一般的软件系统。常见的软件系统主要是根据用户需求进行开发的软件系统,包含对数据库的增删查改等功能,而工作流管理系统的主要功能是设计和管理工作流,然后将预先设计好的工作流逻辑放入工作流管理系统中,从而执行相应的工作流实例。目前主流的工作流管理系统有JBPM、OpenWFE、Osworkflow[3]。

2 JBPM简介

JBPM是一个灵活的基于J2EE、开源的轻量级工作流管理系统,采用XML结构的语言作为流程描述语言JPDL,是软件开发人员和业务需求分析人员之间的桥梁。JBPM具有双重特点:它可以根据用户的身份,分别对业务人员和开发人员提供不同的流程管理方式[4]。

业务流程允许用户通过使用流程图描述需要执行的步骤来实现建模业务的目标。这样大大提高了业务逻辑的可见性和灵活性,从而使业务用户更加容易理解,并且更易于监视。

JBPM的核心模块是ProcessEngine,它是一个由Java语言进行编写的轻量级,并且可以对其进行扩展的工作流引擎模块,允许用户使用最新的BPMN 2.0规范执行业务流程。JBPM的核心是在Java环境下进行开发的,所以它可以在任何安装了Java环境的平台上运行,也可以作为服务或者应用嵌入到其他应用程序中。在核心引擎之上,提供了许多功能和工具来支持如下整个生命周期中的业务流程[5]:

(1)通过基于IBM开放源代码,Java的可扩展平台的Eclipse编辑器,可以支持通过拖拽的方式在图形上对相应的业务流程进行创建。

(2)基于JPA/JTA的可插拔持久性和事务。

(3)基于WS-HumanTask的可插拔人工任务服务,用于包含需要由使用者执行的任务[6]。

(4)JBPM管理控制台可以对运行中的流程实例、任务报告、任务列表进行管理。

(5)历史记录(用于查询/监视/分析)。

(6)与Seam、Spring、OSGi等进行集成。

2.1 JBPM系统架构

JBPM的系统架构如图1所示。

图1 JBPM系统架构

2.1.1 工作流引擎

工作流引擎的主要功能是对任务进行分配和调度,主要包括任务分配者和调度者[7]。

任务分配者管理一系列的活动任务,当一个任务节点完成后,任务分配者通过调度算法和准则计算该节点的下一个执行节点。

任务调度者根据任务分配者的结果,将任务传递给处理程序。

2.1.2 流程定义工具

JBPM流程定义工具主要是通过安装eclipse插件,在eclipse中画好相应的流程图,系统自动将其打包,并将后缀名为.jar格式的压缩包上传至工作流引擎所在的计算机,引擎读取上传过来的压缩包,对其进行解析,把压缩包中所有XML格式的文件转换成一个过程定义对象,将相关信息通过hibernate保存在数据库中[8]。

节点和转换组成一个流程。通常在JBPM的流程定义工具中,由节点和转换组成一个流程。节点包括start节点、state节点、end节点、task任务节点和fork/join节点。不同类型的节点代表不同类型的活动。start节点即开始节点,代表一个流程的开始;end节点代表一个流程的结束;fork/join节点用来表示并行的任务,并且整个流程必须所有的分支都执行完毕才能算完成。任何一个流程的定义必须包括start节点和end节点。

2.1.3 动态表单工具

动态表单工具主要为使用者提供可视化的在线表单设计工具,替代了复杂的代码编写和数据库设计,让使用者不必编写代码,提高了工作效率,节省了开发时间。动态表单工具的主要功能包括设置数据源、设计数据库表、设计表单页面等[9]。动态表单工具功能模块如图2所示。

图2 动态表单工具模块

设置数据源:设置数据库类型、数据库驱动、URL、用户名、密码等。

设计数据库表:主要指设计数据库表的字段,字段类型包括varchar,int,char,date等常见类型,并可对某一个字段加入正则表达式规则,以保证输入数据时的有效性。

设计表单页面:主要通过拖拽方式将控件拖拽到操作面板中,并将相应的控件对应数据库表中的字段。

2.2 JBPM工作流程

JBPM工作流程主要分为四步[10]:

(1)流程定义。从JBPM3.0版本之后,JBPM的流程定义主要是通过集成与eclipse的JBPM-designer插件来进行开发。通过该插件,开发人员在eclipse中通过拖拽方式将流程节点放入工作面板中,创建完毕后,eclipse自动将其打包为JBPM识别的JBPL格式。

(2)流程部署。软件开发人员通过JBPM WEB控制台,把流程定义中定义好的JPDL文件导入,就可以将流程部署在数据库中。

(3)流程解析。流程部署在JBPM WEB控制台以后,控制台的工作流引擎会读取相关数据,并进行解压。

(4)用户交互。用户登录系统后,系统通过List list=repositoryService.createProcessQuery().list()查询该用户的任务列表。当流程启动后,构造流程实例,并生成一个跟着流程走向的令牌对象。

2.3 JBPM的不足

因为在流程定义中,虽然通过eclipse安装插件来定义流程,能够满足常见的使用,但流程定义必须集成在eclipse中使用,不能独立运行,导致其存在一定的局限性。并且由于JBPM-designer和eclipse不属于同一家公司,如果版本不同会导致无法使用。且通常在实际应用中,工作流流程的设计应该也可以由用户来完成,集成在eclipse中的JBPM-designer是面向开发人员的,对用户来说并不友好。因此,开发一个独立的流程设计器并嵌入在该系统中,使得用户可以在Web应用界面通过拖拽方式设计流程,并且在设计完成后能够一键部署在系统中,自动配置数据库,如果需要修改相应流程信息,由使用者修改即可完成。

3 基于JBPM的流程设计器及应用

基于以上问题,文中以某省电力公司的综合信息服务管理平台为研究对象,设计了JBPM的流程设计器,并在该平台上进行应用。

综合信息服务管理平台是在某省南方电网有限责任公司电子办公一体化总体规划指导下,按照“统一规划,分布实施”的原则所提出的建设任务。此次建设的范围包括小额物资管理、办公资源管理、交通资源管理、房屋管理、项目管理等业务子系统。并且能够与该公司其他业务系统进行信息共享,避免信息孤岛。系统主要功能如图3所示。

图3 系统主要功能

3.1 在线流程设计器主要功能

针对JBPM-designer在实际应用中存在的缺陷,设计了一个图形化的流程设计工具,采用JavaWeb的JSP,JS,Jquery等技术来绘制流程,能够将用户绘制的流程化图形转化为JBPM工作流引擎可以理解的流程定义。并且,它脱离了开发人员的开发环境,任何用户都可以在安装了Java环境的电脑下使用它来绘制、修改、部署流程。文中已经将其集成在综合信息服务管理平台中,用户需要使用时,只需在服务管理平台中使用即可。提供的功能有[11]:

(1)绘制流程:绘制流程图中各种节点、连线、分支、判断等图形,对图形进行选择、拖曳、放大、缩小等操作[12]。

(2)新建流程:根据业务的逻辑过程,在图形面板上绘制出相应的业务流程图,并且设置好相应的参数,保存该流程。

(3)修改流程:从已经保存的流程列表中选择需要修改的流程,先根据该流程的字段信息,从数据库中读取出流程的各个节点的信息,读取完成后,自动在流程绘图区中将该图形绘制出。当对流程图修改完成后,保存即可。

(4)保存流程:保存流程会将用户定义的流程图转换为JBPM可以识别的流程定义文件,用户自定义的图形和图标等也单独保存在文件夹中。

(5)删除流程:将该流程定义从数据库中进行删除,并且结束所有关于该流程的任务实例。

在线流程设计器在界面上主要有3个部分:左侧为工具栏,包含了常见的基本活动节点,包括选择、连线、开始、结束、任务、自动、会签、决策等节点。当用户点击某一个基本活动节点时,便可以在右边绘图区放置该节点,在绘图区选择某一个节点,绘图区右边会显示该节点的相关属性,例如可以选中信息中心审批节点,右侧图形属性中,可以设置信息中心审批的用户组成员,那么,当流程走向到达该节点时,信息中心审批的用户组成员可以对流程进行审批,而其他成员则不可以。在最上边为工具栏目,包括新建流程、导入流程、发布流程、清空流程、撤销、布局、删除等功能。

3.2 详细设计与实现

在线流程设计器的主要功能就是通过在图形化界面上设计图形化流程,并将流程转换为符合JPDL格式的XML文件,且能将XML文件转换为图形呈现在界面上。因此,在线流程设计器首先通过解析框架解析XML文件,将XML文件解析为相应于JBPM组件的Model组件,并呈现在界面上,对界面上组件更改后,相应的修改也会保存在Model组件中,并修改在XML文件上[13]。

3.2.1 Model组件

Model组件是在流程设计中用到的视图元素,包括流程设计中的节点元素、连接线元素,Model组件中包含的类主要包括[14]:

StartNodeModel:开始节点;

TaskNodeModel:任务节点;

EndNodeModel:结束节点;

ConnectionModel:连接线节点;

SurfaceModel:画图面板。

3.2.2 XML文件解析

JBPM提供的流程解析功能是通过JBPM自带的binding类来对各种节点进行解析[15]。Binding类主要包括两大类型,一种是流程引擎使用的对象的binding类,另一种是流程定义节点使用的binding类。本实例中,采用后一种binding类解析,并将其部署在流程中。使用代码如下[16]:

RepositoryServicerepositoryService=processEngine.getRepositoryService();

Booleanisok=repositoryService.createDeployments().

addResourceFromClasspath("jddl.xml").deploy();

3.2.3 流程设计

在服务端,在线流程设计器设计了一个服务接口DataService和实现该接口的实现类DataServiceImpl。DataServiceImpl调用数据访问层的DataDao来实现其中定义的服务。主要有四种方法[17]。

(1)String[] GetProcessList()。

用户查看已经部署的流程实例时,返回数据库中所有的流程实例名称。

(2)booleanSaveProcess(byte[] data)。

当用户保存相应数据时,接收对应数据包,并且将数据包保存至数据访问层的DataDao来部署流程,并返回相应的成功与否信息。

(3)Map GetProcessInfo(String name)。

用户选中其中一个流程时,则返回该流程的xml数据。

(4)booleanDeleteProcess(String name)。

用户选中其中一个流程时,则删除该流程的所有信息。

数据访问层(DataDao):DataDao实现了对数据库的增、删、查、改等操作。通过调用Hibernate作为持久化工具,实现了发布流程、修改流程、删除流程、查看流程等操作[18]。

3.2.4 新建流程

通过在线流程设计器设计好流程之后,该流程遵循JPDL格式,保存为后缀名为.xml格式文件。点击发布流程,调用系统DataService接口的DataServiceImpl类的SaveProcess(byte[] data)方法,通过将.xml格式文件转换成二进制数据为参数。在SaveProcess中,调用数据访问层DataDao实现流程部署,流程部署成功后,返回true,否则,返回false。

3.2.5 编辑流程

用户通过选择相应的流程,通过流程名作为参数,服务端通过流程名,调用GetProcess方法。在该方法中,调用其DataDao从数据库中获取该流程的相关信息,返回其流程,该流程的相关数据记录在Map键值对中,键值对中包含的数据有流程名,流程对应的.xml文件内容,流程所属用户组,流程创建日期,等等。从服务器端返回该流程的相关信息,包括流程版本,流程的JPDL格式文件[19]。

3.3 不足与总结

文中首先介绍了“某电力公司的综合信息服务管理平台”的项目背景,根据项目背景对系统功能进行了分解,并给出了系统功能模块图。之后针对在线流程设计器主要功能进行了介绍并给出了详细设计与实现方法。但该在线流程设计器也存在一些问题,主要包括在Web端使用时,由于集成了Flash技术,因此客户端必需安装Flash插件,不然无法使用,针对一些没有安装Flash或者安全性高的客户端,则无法使用部分功能。因此,后期的改进主要将代码进行重构,使用Html5进行二次开发,使得在线流程设计器可以在未安装Flash客户端上使用。

4 结束语

通过介绍工作流的基本概念,着重介绍JBPM的系统架构、工作流程,以及它自身的不足。并且通过改进它的缺点,设计了一个改进的JBPM工作流管理系统,并将其运用在综合信息服务管理平台中。该系统经过初步试用,有效提高了流程的运行效率,取得了满意的结果。在后期能够根据业务流程的需要,方便地更改业务流程。

猜你喜欢
开发人员定义流程
吃水果有套“清洗流程”
Semtech发布LoRa Basics 以加速物联网应用
违反流程 致命误判
四川省高考志愿填报流程简图
析OGSA-DAI工作流程
成功的定义
后悔了?教你隐藏开发人员选项
修辞学的重大定义
山的定义
三星SMI扩展Java论坛 开发人员可用母语