敖丽敏 苗吴琼 刘斌
摘要:针对目前工作票管理系统存在的开发成本和系统性能不能得到保证等问题,该文通过分析JBPM工作流引擎的系统架构和使用方法,提出了一个将JBPM应用到电气工作票自动化管理中的设计方案。基于JBPM的电气工作票管理系统,既提高了电力部门的办公效率又降低了系统的开发费用。
关键词:工作票;工作流技术;工作流引擎;JBPM
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)01-0064-06
Study and Design of Electrical Work-orders Management System Based on JBPM
AO Li-min1,MIAO Wu-qiong1, LIU Bin2
(1.Information Engineer Institute, Northeast Dianli University, Jilin 132012 , China; 2.Baishan Power Supply Company, Baishan 134300, China)
Abstract: In order to solve the problems of high development costs, low system performance and other issues in current electrical work-orders management system, this paper put forward a design of electrical work-orders automated management system based on the open-source workflow engine JBPM, by studying the system architecture and the use. Electrical work-orders management system based on JBPM, can not only enhance the office efficiency of the power department and decrease the system development costs.
Key words: electrical work-orders; workflow; workflow engine; JBPM
工作票制度是电力系统保障安全的重要把关之一,办好工作票,是电力安全施工的第一步[1]。传统的工作票管理模式以手工填票为主,并由专人在各地之间传递,不仅工作量大、效率低、周期长,而且容易出现疏漏,影响电网的安全运行,已越来越不能满足现代化电力系统的需要[2]。
目前多数电气工作票管理系统,只是实现计算机辅助开票的功能,在一定程度上减少了人员工作量,降低笔误[3,4];参考部分电厂的工作票管理系统,虽然进一步使用基于流程化处理的系统开发方法,但工作票流程仍采用硬编码的方式固化在系统之中,缺乏适应流程变化的灵活性,并不适合企业级应用[5]。
工作流是一类能够完全或者部分自动执行的业务过程,它可以按照为实现完整业务目标而定义的一系列过程规则,在不同的参与者之间传递文档、信息或任务并执行[6,7]。引入工作流技术,能对各种工作票的流程进行灵活的设置和管理,实现工作票的灵活流转。JBoss jBPM提供了一个完整的工作流管理系统实现,简单灵活,采用独立的流程定义语言,能够方便地与企业应用程序集成,为设计和开发工作流和业务流程管理系统提供了一个先进的平台。
基于JBPM所设计的电气工作票管理系统,有效避免了因工作票误填而可能发生的事故,灵活适应工作流程的变化,进一步提高人员工作效率,降低开发成本,使系统在可重用性、可维护性和可扩展性等方面得以改善。
1 JBPM简介
1.1 JBPM系统架构
JBPM(Java Business Process Management),是一个基于J2EE的轻量级工作流管理系统[8]。JBPM主要包括以下组件:基于Eclipse的流程设计器GPD(Graphical Designed)、用于流程管理和监控的Web控制台JBPM Web Console以及JBPM核心组件JPDL(JBoss JBPM Process Definition Language)核心库。图1展示了JBPM组件库结构。
JPDL是建立在JBPM框架之上的一种流程定义语言,其语法结构包括结点、变迁和动作等。JBPM结合应用了状态机、UML2.0活动图和Petri网算法三方面的知识,利用了状态机中用于控制工作流状态的变迁,把UML2.0中的动作改名为状态(State),同时引进了转移(Transition)的概念,借鉴了Petri网算法的Token思想,从而能够迅速而准确的定位当前流程状态,同时又扩充了Token的功能,使它具有维护父子关系的能力,以解决流程并
行执行的情况[9]。
1.2 JBPM使用方法
使用JBPM开发工作流管理系统一般包括以下几个步骤:
1)配置JBPM数据源。
JBPM本身使用Hibernate管理数据,理论上来说,任何Hibernate支持的数据库都可以用于系统的开发。数据源配置有两种方法,一种是使用JBPM开发包jbpm-jpdl-3.2.3db目录下自带的对应各种类型数据库的SQL脚本,一种是通过配置hibernate.cfg.xml文件逆向创建数据库。
2)安装JBPM流程设计工具GPD,在Eclipse中作相应配置。
3)设计业务流程。
GPD安装配置完成后即可进行流程定义。可视化建模完成后,即可得到流程的格式化输出,即流程定义文件processdefinition. xml。同样,也可以直接在该文件中进行流程定义。
4)部署并运行业务流程。
流程定义完成后需要部署流程定义到数据库,才可以使用JBPM操作流程定义和流程实例。
2基于JBPM的电气工作票管理系统的设计
设计本系统首先要在了解实际工作票流转过程的基础上使用JPDL流程设计语言进行流程定义,然后为任务指定参与者,扩展流程流转逻辑,开发业务流程执行相关细节,最后将流程部署到系统客户端操作页面,用户即可对流程定义进行相关操作,如新建流程实例,完成任务实例等。
2.1工作票流程分析
电气工作票主要包括变电站第一种工作票、变电站第二种工作票、线路第一种工作票和线路第二种工作票,功能包括填票、签发、收票、许可、确认、终结和废票等。以变电一种工作票为例说明工作票的执行过程:首先由工作负责人填写新建工作票,然后由工作票签发人决定是否签发,当工作票签发人完成签票后由值班负责人收票审核,工作负责人确认收票后交予工作许可人回应,再由值班负责人确认回应(值班负责人可以随时查看回应情况,值班负责人确认回应后工作许可人不可以再回应),工作开始时由工作负责人和工作许可人许可工作开始,工作票签发人可以更改工作负责人,工作负责人可以延期,工作终结时由工作负责人和工作许可人确认工作终结,最后由工作许可人终结工作票。
2.2工作票流程定义
结合上节流程分析,变电一种工作票流程定义如图2所示。
2.3工作票流程定义说明
由图2可以看出,流程定义就是由一系列的结点和变迁组成,这些结点主要包括开始和结束结点(Start State、End State)、任务结点(Task Node)、动作结点(Node)、决策结点(Decision)、分支结点(Fork)和汇聚结点(Join)。其中,任务结点包含一个或多个任务;决策结点用于选择流程的执行路径;分支汇聚结点解决并发执行问题;动作结点含有计算机自动执行的任务;开始和结束结点分别表示流程的开始和结束。
在发电一种工作票流程定义中主要完成的工作有:
1)给角色分配任务。
以本系统中工作票签发人签票为例。工作负责人填票完成后要将工作票提交给本部门工作票签发人签票。也就是说,“签票”这个任务只有拥有“工作票签发人”这个角色的用户才可以拥有。在本系统流程定义中由“填票”任务结点来完成填票的工作,由“签票”任务结点来完成签票的工作。在流程实例运行时,任务结点创建任务实例并将任务实例分配给特定的参与者。例如:
当流程实例流转到“签票”这个任务结点时,JBPM创建任务实例后会首先调用QianPAssignmentHandler类来进行任务分配。QianPAssignmentHandler类实现了JBPM工作流引擎的任务分配处理器接口AssignmentHandler,该任务分配处理器声明了一个as? sign(Assignable assignable, ExecutionContext executionContext)方法用于指定当前任务的参与者。参数assignable是任务实例的引用,executionContext是流程实例上下文,调用assignable.setActorId(String userid)即可将任务分配给userid代表的用户,或者调用assign? able.setPooledActors(pooledActors)将任务分配给一组用户。
2)给多个参与者分配任务,且任务全部完成后流程才可以进行运转。
工作需通过工作负责人和工作许可人的许可才可以开始,如果其中一个人不许可工作开始,则这项工作不能往下进行。工作终结也是如此。JBPM提供的Generalized AND-Join模式实现了该功能。Fork结点和Join结点提供了该模式的语义支持。例如:
图2发电一种工作票流程定义
name="to工作许可人许可">
流程执行到Fork结点后分割成“工作负责人许可”和“工作许可人许可”两条相互独立的并发执行的子路径,当这些子路径全部完成到Join结点汇合后工作流引擎才可以继续执行流程,如果还有任何一个子路径没有完成,则Join结点必须等待。
给多个参与者分配任务,且其中一个分支完成后,流程继续向下流转。
工作许可人回应工作票的同时,值班负责人可以随时确认回应,值班负责人确认回应后工作许可人不可以再进行回应,也就是说此时流程必须继续向下运转。JPDL语言在JBPM3中没有提供对此种模式的支持,需要流程实例化后代码实现。本系统的解决方法是给一个分支绑定ActionHandler,在离开结点事件中,结束其他分支的任务。如: