图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