张 瑞,罗金涛
(1.商丘师范学院 计算机与信息技术学院,河南 商丘 476000;2.东莞威远职业高级中学 广东 东莞 523909)
工作流(WorkFlow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算,其表现为参与者对文件、信息或者任务按照预定的规定来采用行动,并令其在参与者之间进行传递。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务,它需要人的参与[1]。工作流管理的最大优点是将应用逻辑和过程逻辑分离,可以不修改具体功能实现而只修改过程模型来改变系统功能,实现对生产经营部分或全部过程的集成管理,有效地把人、信息和应用工具合理地组织在一起,提高软件的重用率,发挥系统的最大效能。
管理),它是一个基于Java的工作流管理系统[2]。JBPM最大的特色就是它的逻辑定义没有采用目前的一些规范,如XPDL、BPEL等,而是采用了它自己定义的JBoss JBPM Process Definition Language(JPDL)。JPDL认为一个商务流程可以被看作是一个UML状态图[3]。JPDL就是详细定义了这个状态图的每个部分,如起始、结束状态,状态之间的转换等。
JBPM底层所采用的持久层技术是Hibernate[4],Hibernate是开源社区非常优秀的持久层技术,使用非常广泛,它能够方便的将数据对象和底层数据库进行映射,它能够支持包括oracle,mysql,MSSqlServer在内的各种主流数据库系统,并且提供缓存管理等多项其它优化技术,使用它可以更加方便的操作数据库。而JBPM采用Hibernate作为持久层访问技术,无疑是更加增强了JBPM的易用性和可扩展性[5]。
JBPM (Java Business Process Management,Java 业务流程
根据需求,本实例采用powerdesigner工具设计出users、application和checkup 3张用户表,其物理数据模型如图1所示。
图1 用户表数据模型Fig.1 User table datamodel
JBPM的所有操作对象以及操作状态都会存储到系统数据库当中,因此系统数据库是JBPM工作流引擎的核心,并且JBPM是采用Hibernate来进行持久层操作。有以下几种方法可以生成系统数据表:
1)手工方式
手动地把所需表的sql脚本通过MySQL的命令行方式来生成数据表,而且由于在JBPM套件包中的db目录中,已经自带了各种版本数据库系统的代码,mysql的对应代码脚本为:jbpm.jpdl.mysql.sql,通过简单修改,就可以通过命令行方式生成JBPM系统数据表,最后可以生成32张系统数据表。 但是对于用户数据表,也需要去单独生成。
2)调用JBPM内部方法
在配置好JBPM运行环境以及Hibernate映射关系的情况下,通过语句:
JbpmConfiguration.getInstance().createSchema(); 就 可 以在指定的数据库中生成32张系统表以及users、application和checkup 3张用户表。
通过系统业务流程的分析描述,可以通过JBPM在Eclipse下的图形化插件设计出如图2所示的流程定义[6]。
图2 JBPM流程定义Fig.2 JBPM process definition
JBPM流程的发布,有两种方式,第1种是简单的方式,只发布流程定义文件,第2种是完整的发布方式,就是将流程定义文件,gpd.xml已经 processimage.jpg 3 个文件进行打包成zip格式,然后再进行发布,以发布zip格式为例,其核心代码如下:
1)报销单的提交
在以Hibernate作为数据库持久层技术的JBPM工作流开发中,表单的提交处理和采用纯JDBC方式操作数据库时有了很大的变化。Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,通过它可以简化对数据库操作。 Hibernate可以用在任何JDBC可以使用的场合,从某种意义上来说,Hibernate可以在任何场合下取代JDBC.以下是本例中对于报销申请单的提交处理代码片段:
//对报销单内容进行持久化操作,在实际当中,这些数据是从前台表单取得,然后通过JavaBean中的setter方式,就可以将数据放入app中
2)流程实例的生成
流程实例就是业务的一次实际流转过程,流程和流程实例的关系相当于对象和类的关系,创建流程实例以后,还需要和公务进行绑定。该方法实现如下:
流程实例拥有自己的ContextInstance环境变量对象。它实际上是一个HashMap,以key-value方式记录了流程的上下文变量值,它以键值对的方式出现的,代码中的 processIns tance.getContext
Instance().createVariable("application",app.getAppid ());就是向环境变量中添加一个key为application的对象。每个流程实例都拥有自己令牌(token)对象,主流程有自己的根令牌 (RootToken),子流程也拥有自己的子Token。父流程的Token和子流程的 Token相互关联,形成Token树。 Token对象表示流程运行的当前位置,即流程运行到哪个节点了。最后通过对Token对象的signal()方法调用,可以使流程向下运行。
最近几年企业对于过程建模的需求为工作流提供了一个广阔的市场,使得工作流产品得以迅速发展。文中选择了开源领域当前最流行的JBPM工作流作为研究对象,并将其应用于OA领域,主要完成了以下研究工作:
1)研究了工作流管理系统的作用,意义,重点研究了标准工作流参考模型以及JBPM的系统架构以及软件体系结构。
2)分析设计了OA系统中的一个典型工作流模块,并给出了核心实现代码,业务流程的实现严格按照JBPM标准。
[1]王春华,吴业福,吴亚芳.工作流原理及应用[J].电脑知识与技术,2005(10):106.
WANG Chun-hua,WU Ye-fu,WU Ya-fang.The principle and application ofworkflow[J].Computer Knowledge and Technology,2005(10):106.
[2]JBoss Enterprise.JBPM Overview[EB/OL].(2010-04).http://www.jboss.org/jbpm.
[3]宋波.UML面向对象技术与实践[M].北京:北京科学出版社,2006.
[4]夏昕,曹晓钢,唐勇.深入浅出Hibernate[M].北京:电子工业出版社,2005.
[5]孙卫琴.精通Hibernate:Java对象持久化技术详解[M].北京:电子工业出版社,2005.
[6]顾文轩,王琼,徐汀荣.基于JBPM的工作流管理系统的研究与设计[J].计算机应用与软件,2009,26(5):104-106.GU Wen-xuan,WANG Qiong,XU Ting-rong.Study and design of JBPM based workflow management system[J].Computer Applications and Software,2009,26(5):104-106.