Activiti工作流技术在OA系统中的研究与实现
作者:施俊 李艳会
来源:《软件导刊》2014年第12期
摘 要:工作流技术是企业信息化的重要技术之一,在办公自动化领域,如何更好地处理流程运行过程中的相关环节,提高企业运行效率,是工作流管理方案着力解决的问题。介绍了工作流概念及BPMN 2.0规范,分析了开源Activiti工作流引擎的体系结构和模块组件。系统总体架构采用SSH2框架,选择Activiti对系统流程进行管理,通过这种设计,各个框架有效地结合在一起,发挥了各自的优势。结合请假流程,阐述了主要设计思路及实现过程。 关键词:OA系统;Activiti工作流;BPMN2.0;SSH2框架 DOI:10.11907/rjdk.143761 中图分类号:TP302
文献标识码:A ; ; 文章编号:1672-7800(2014)012-0052-03
基金项目:江苏省高等教育教改研究项目(2011JSJG438,指南编号3-5);江苏省现代教育技术研究项目(2012-R-22691)
作者简介:施俊(1978-),男,江苏扬州人,硕士,扬州市职业大学信息工程学院讲师,研究方向为软件工程、计算机网络;李艳会(1978-),女,吉林四平人,硕士,扬州市职业大学信息工程学院讲师,研究方向为计算机应用。 0 引言
办公自动化(OA)系统能提高管理效率,实现各部门之间的协同工作、资源共享和信息流转,降低企业运行成本。常见的业务流程有请假、报销、评审、公文流转等,这些流程可通过使用工作流技术来实现。本文以Activiti轻量级工作流引擎为核心,将其引入到OA系统中,减少业务人员对开发人员的依赖,提高了效率,方便了管理。 1 相关理论和开发技术 1.1 工作流和工作流管理系统
龙源期刊网 http://www.qikan.com.cn
工作流就是为实现特定目标,必须完成的任务序列及这些任务的执行过程,它是业务流程的全部或部分自动化过程,通过将相关工作活动分解为相应的任务、角色、规则和过程来执行和监控,从而达到提升工作效率的目标。在流程中,相关任务、信息和文档按照预设的原则从一个参与者流转到另一个参与者,进行处理。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。
工作流管理系统功能是:将相关人员、组织、资源设备、信息源(例如DataBase、File System、Email、CAD等)组合成整体,这样,工作流管理系统就成为一个理想的用来收容业务逻辑的业务仓库,并使业务逻辑易于操作及控制。 1.2 SSH2框架
当前,主流的JavaEE轻量级框架由Struts2、Spring、Hibernate组成,SSH2框架是中小型企业Java web应用程序开发较好的解决方案,可降低各层之间耦合度,减少开发复杂度,缩短开发周期,节省开发成本,提升软件质量。采用轻量级框架要尽可能地采用基于POJO(简单Java对象)的方法,使应用不依赖于任何容器,提高开发调试效率。另外,轻量级框架绝大多数是开源的,开源社区为框架提供了良好的设计、快速构建工具以及可供参考的开源代码,有助于快速开发项目,提高系统可扩展性、可维护性和处理效率[1]。 1.3 BPMN 2.0规范
BPMN 2.0规范定义了业务流程的符号及模型。为了实现流程定义可移植,设置了转换格式。通过BPMN 2.0规范可建立简单易懂的业务流程模型,处理复杂度较高的业务流程[2]。BPMN 2.0规范对流程描述文件做了语法上的定义,定义了XML规范,流程描述文件可在不同的引擎中使用,提供了平行、分流、决策、聚合等多种复杂的工作流程种类。
1.4 Activiti引擎
Activiti是轻量级的工作流引擎,易于与Spring集成使用,采用了宽松的Apache Licenece 2.0开源协议,促进了Activiti BMP引擎和BPMN 2.0的匹配。Activiti在jBPM4项目之上进行构建,延用了流程虚拟机(PVM),企业的业务流程通过直观的业务流程语言来描述,支持H2、SQL Server、Oracle、MySQL等数据库系统,并可部署在任何应用服务器上。
Activiti核心组件包括:Activiti Engine(流程引擎)、Activiti Modeler(基于Web的流程建模器)、Activiti Designer(基于Eclipse插件的设计器)、Activiti Explorer(基于Web的管理控制台)、协作工具和Spring集成等。流程引擎与Activiti其它组件一起设计和实现流程管理解决方案,可用于图形化建模、测试、部署BPMN 2.0的流程[3]。Activiti组件工具如图1所示。
龙源期刊网 http://www.qikan.com.cn
图1 Activiti组件工具 2 基于Activiti的OA系统实现 2.1 系统总体架构
系统采用B/S结构,使用Eclipse IDE作为开发平台,选择Struts2+Spring+Hibernate组合的Web架构,应用jQuery等开发技术,并将Activiti工作流引擎整合到SSH2框架中。逻辑上划分为表现层、应用层和数据层,当业务改变时,只需改进流程,无需修改系统,系统总体架构如图2所示。 图2 系统总体架构
(1) 表现层是应用程序和用户交互的桥梁,使用JSP和Struts2中的视图技术作为表现层页面,结合Ajax实现业务流程,应用与后台无关的前端jQuery框架,用于创建前端界面,支持多种平台的http访问。
(2) 业务层运行在开源的Tomcat服务器上,包含Web控制、业务处理和数据访问3部分。Web控制采用Struts2实现,处理用户的请求采用拦截器机制实现;业务处理采用轻量级Spring框架实现,Spring能够控制反转(Ioc)和面向切面(AOP),容易实现Bean的装配和事务管理等特性。其中Activiti用于处理所有与流程相关的数据操作,使用Service层控制事务属性,通过Spring的AOP让Service层进行事务管理处理。数据库部署采用易于扩展的Dao层,Dao层将Hibernate的CRUD 原子操作进行封装,为业务层提供底层支持;数据访问由对象关系映射框架Hibernate实现,封装底层细节,屏蔽不同数据库异构问题。Activiti的流程引擎配置文件本身就是一份Spring配置文件,将Activiti整合到Spring中一起使用。
(3) 数据层采用开源的MySQL数据库,用来保存流程产生、执行及结束等环节中与之相关的各类数据。Activiti数据表的命名与服务API接口命名方法类似,分为5大部分,包括通用数据表、流程存储表、身份数据表、运行时数据表及历史数据表,以ACT开头,中间是1~2个字符的用例标识,例如ACT_RE_*,RE代表respository,表示流程定义存储;ACT_RU_*,RU代表runtime,表示流程执行记录。 2.2 框架整合及系统实现
(1) SSH2框架的搭建整合。首先向项目导入对应jar包;其次把Struts2的Action、Hibernate的SessionFactory和DataSource整合到Spring容器中,统一让Ioc管理;配置web.xml、struts.xml、applicationContext.xml文件[4]。
龙源期刊网 http://www.qikan.com.cn
(2) jQuery与Struts2整合。从传输速率上考虑,系统采用JSON数据格式把数据从后台传给前台。
(3) Activiti与Spring的整合应用。为了统一管理对象,由Spring来处理流程的实例化,为applicationContext.xml配置文件,加入Activiti的流程引擎配置bean,流程引擎bean和相关服务bean配置如下:
<!-- 流程引擎的配置bean,需要向其注入datasource -->
<!-- 流程引擎的bean,需要注入引擎配置bean -->
<!-- 服务组件的bean,通过factory-bean的方法来获取实例 -->
在请假流程中,员工需填写请假申请,如果天数小于等于3天由经理审批即可;大于3天则需总监审批,然后人力资源审批,同意则完成申请,不同意则调整申请。
(1)绘制流程图。利用Activiti引擎实现,可用Activiti Modeler,也可用Activiti Designer,绘制出符合BPMN2.0规范的请假审批流程定义文件[5],如图3所示。 图3 请假审批流程
利用Activiti Modeler绘制相应流程图时,会自动生成相应的BPMN2.0代码。
龙源期刊网 http://www.qikan.com.cn
(2) 部署流程定义文件,需将本机上的单个.bpmn20.xml文件上传,或将流程图文件和含有格式的表单文件一起打包上传。利用流程引擎提供的RepositoryService接口将流程定义文件部署到Activiti引擎中,关键代码如下:
ProcessEngine processEngine =
processEngineConfiguration.createProcessEngineConfigurationFromResource (\"activiti.cfg.xml\").buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment().addClasspathResource (\"diagrams/VocationRequest.bpmn20.xml\").deploy(); // VocationRequest.bpmn20.xml为流程定义文件
(3)启动流程实例。需要在工作流引擎中注入processEngine,通过Activiti的API读取流程定义文件,根据流程定义以及当前的任务状态,判断是继续执行还是向下跳转,启动请假流程代码如下:
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionKey
(\"Vacation\").singleResult(); // 查找流程定义 Map < String, Object> vars = new HashMap < String, Object>(); // 初始化任务参数 vars.put(\"arg\", vacation);
ProcessInstance pi = this.runtimeService.startProcessInstanceByKey(pd .getKey()); // 启动流程
调用Activiti的API启动流程并完成第一个任务后,需要将请假记录保存到
OA_VACATION表中,使用ApplicationDao来完成,调用Hibernate的API来实现数据的写入。
(4) 审核流程。不同的审核人登录后,可以得到待办任务列表进行审核,关键代码如下:
龙源期刊网 http://www.qikan.com.cn
TaskServic taskService = processionEngine.getTaskService(); List this.taskService.complete(task.getId()); // 完成审批任务 } 3 结语 本文通过探讨工作流技术,选择当前开源领域流行的Activiti工作流作为研究对象,整合Struts2、Spring、Hibernate三大开源框架,将用户界面、业务逻辑和数据访问分离开来,并在企业应用中整合Activiti,让流程业务系统的耦合变得松散,使系统结构清晰,提升了业务流程管理的灵活性和方便性。以OA系统中的请假流程为例,给出了核心实现代码,业务流程的实现严格按照Activiti标准。与传统开发相比,Activiti消除了硬编码方式的工作流系统,使业务人员可以独立进行流程设计,提高了业务流程需求变化时的响应速度。 参考文献: \[1\] 高亮,刘旸,宗传玉.基于SSH2与JBPM 的OA系统应用研究[J].微处理机,2011(8):38-40. [2] 杨恩雄.疯狂Workflow——基于Activiti的工作流应用开发[M].北京:电子工业出版社,2014. [3] 何佳.基于Activiti5的Web管理控制台的设计与实现[D].昆明:昆明理工大学,2012. [4] 许爱军.JBPM工作流管理系统的研究与实现[J].计算机技术与发展,2013(12):100-104. [5] 叶小路,钱真坤.基于Activiti5的公司OA系统设计与实现[J].软件导刊,2013(6):93-95. (责任编辑:杜能钢) 因篇幅问题不能全部显示,请点此查看更多更全内容