1 需求背景分析
工作流技术的主要特点是:过程的自动化处理(包含人与系统交互为基础的人工活动)。
目前被广泛应用于办公环境中,比如:
- 协助涉及多人或多部门的任务的执行。
- 工作流管理系统会生成并处理任务的电子表单,让各个部分的人员可以通过表单实现交互,从而参与到整个业务流程中。
- 对于需要 ISO 或 CMM 认证的组织,使用工作流系统能够显著地提升“流程规范化”的运转速度,从而提升生产效率。
- 工作流管理系统能够方便地通过流程建模来实现业务过程的定义以及自动化执行。
作为企业应用集成(Enterprise Application Integration,EAI)的平台:
大型企业一般都运行着各种各样的异构应用以及数据,而大部分的工作流管理系统能够结合专门的业务应用,从而构建出统一的 EAI 平台。嵌入式工作流引擎:工作流引擎可作为一个组件,嵌入到业务信息系统中,这样可以增强应用的可扩展性与系统的可维护性。
引入工作流管理技术可以:
- 提高运转效率 - 业务流程在运行过程中会暴露出某些不必要的步骤。
- 较好的流程控制 - 执行标准的工作方法以及跟踪审计。
- 方便重组业务流程。
- 促进业务改进 - 使业务更趋向于流畅与简单。
假设有这样的一个流程:
如果不使用工作流,那么我们将要做这些工作:
- 每个活动节点都需要开发交互界面和后台处理程序。
- 每一次活动的流转都需要硬性判断下一步活动节点和办理人。
- 每一次操作都需要维护业务数据以及流程相关数据。
- 一旦出现业务变更,那么就需要大面积地修改代码,有时甚至需要重新开发以及适应新的需求。
- 监控、分析流程的处理情况也需要开发且成本较高。
使用了工作流的应用系统,有这些明显的优势和好处:
- 工作流会维护所有涉及流程流转的数据。
- 提供流程设计的可视化工具。
- 工作流引擎是核心,它负责解释流程定义、管理流程数据、计算并驱动着流程实例的运行。它提供很多有用的 API 接口可以供客户端应用程序或外部业务系统调用。可以使用这些 API 来监视流程实例的执行过程、挂起或恢复流程实例的运行;还可以分析出工作完成的效率、找到业务流程的瓶颈等功能。
综上所述,使用工作流技术有这些好处:
- 降低开发风险 - 可以让业务分析师和开发人员使用统一的流程术语进行沟通交流。
- 流程代码的集中统一管理。
- 加速开发 - 流程的开发工作都由工作流框架接管了,所以开发会更快、出错更少,从而让系统变得更容易维护。
- 对迭代开发的支持 - 通过版本号的管理,流程可以重新设计并且很容易部署。
2 工作流框架介绍与对比分析
目前业界用的比较广泛的开源工作流框架是 jBPM 与 Activiti 框架。我们对其进行分析说明。
2.1 jBPM
jBPM(java Business Process Management),是一种基于JavaEE 的轻量级工作流管理框架(Framework)。
2.1.1 jBPM 的历史
jBPM 项目于 2002 年 3 月由Tom Baeyens发起,2003 年12 月发布1.0 版本。jBPM 在 2004 年 10 月 18 日,发布了 2.0 版本,并在同一天加入了JBoss 组织,成为了 JBoss 企业中间件平台的一个组成部分,它的名称也改成 JBoss jBPM。随着 jBPM 加入 JBoss 组织,以及 JBoss 被 RedHat公司收购,jBPM 也进入一个全新的发展时代,它获得了大量的社区和商业支持,因此发展前景十分光明。
jBPM4 引入了 PVM(流程虚拟机)的设计理念,为 jBPM4 的"无限"扩展和集成提供了有力的底层功能支持。
2.1.2 jBPM 的优势
经过这么多年的发展,JBoss jBPM 已经成为一流的开源工作流产品:
- 每月超过20 000 次的下载量。
- 极度活跃的用户论坛和开发者论坛。
- 频繁更新 Web 站点和 Wiki。
jBPM 不仅有着开源社区的支持,同时作为 RedHat/JBoss 的子项目,也具有一定的商业支持保证。所以它可以作为众多项目型公司低成本工作流应用解决方案。
jBPM 是 JBoss 旗下的子项目,JBoss下还包括有 Seam(JavaEE开发框架)、Drools(规则引擎)、 Hibernate(ORM持久化框架)等众多领域的优秀开源项目。由于同属于一个产品家族,所以它们能与 jBPM 完美结合,相互之间都留有接口,方便开发者对业务进行扩展,也为 jBPM 提供更多的可延伸价值。
jBPM 还是 JBoss SOA 平台的一个重要组件,与 JBoss Drools 规则引擎和 JBoss ESB 企业服务总线一起,可以为用户提供全面、完整的 SOA 解决方案。
jBPM 是一个支持"嵌入式"的业务流程管理产品,理论上可以运行在任何JavaEE应用服务器之上,也可以运行在桌面应用中。jBPM4 在流程虚拟机(PVM)技术的基础上,能够同时支持多种流程定义语言。
2.1.3 jBPM 的特点
(1) 嵌入式的工作流引擎
开发者可以把 jBPM4 框架作为业务流程管理的基础,在此基础上开发自己独特的业务流程管理模块和功能。在部署时,只需要把 jBPM4 作为项目的依赖库发布就可以咯 O(∩_∩)O哈哈~
(2) 可插拔的体系架构
jBPM4 采用了模块化的架构设计,采用了 IOC(依赖注入)的设计理念,各模块之间可以比较方便地解除耦合或替换不同的实现,例如持久化、事务处理、身份认证、日志服务等,都是由可选模块实现的。jBPM 的可插拔体系架构,为开发者灵活选择 jBPM 的功能、自定义已有功能和拓展新功能提供了"无限可能"。
(3) 易扩展的流程语言
开发者还可以通过定制新的活动类型或者完全重新设计一种新的流程定义语言来描述特定领域的业务流程,满足独特环境下的业务需求。
(4) 技术方面的特点
- jBPM4 的模型是基于UML Activity Diagram,这些需求人员和开发人员都能通过流程图来理解业务流程。
- jBPM4 提供了可定制的 Event - Listener 观察者模式来处理事件触发,以辅助活动扩展的处理。
- jBPM4 提供了灵活的 EL 条件表达式机制,来辅助条件解析、简单业务逻辑的脚本计算与处理。
- jBPM4 提供了可扩展的 Task 及任务分配机制,来满足复杂的人工活动处理。
- 借助 Hibernate ORM 的优势,jBPM4 能够运行在几乎所有的数据库系统
上。
2.2 Activiti
Activiti 是一个针对企业用户、开发人员 、系统管理员的轻量级工作流业务管理平台,其核心是使用 java 开发的快速 、 稳定的 BPMN2.0 流程引擎 。它可以与 spring 完美集成。
创始人 Tom Baeyens 曾经是 JBoss jBPM 的项目架构师,所以之前接触过 jBPM4 的同学,会觉得 Activiti5 很亲切。
2.2.1 Activiti 的特点
(1) MyBatis
Activiti 的设计思想是简洁 、 快速 。 所以它选择了MyBatis 作为数据持久层框架,从而可以通过最优的 SQL 语句执行 Command ,仅凭如此就能让引擎在速度上保持最高的性能 。
(2) 服务接口
Activiti 提供了 7 个服务接口,都通过 ProcessEngine 来获取,并且支持链式编程风格:
服务接口 | 说明 |
---|---|
RepositoryService | 仓库服务,用于管理仓库,比如部署或删除流程定义、读取流程资源等。 |
IdentifyService | 身份服务,管理用户、组以及它们之间的关系。 |
RuntimeService | 运行时服务,管理所有正在运行的流程实例、任务等对象。 |
TaskService | 任务服务,管理任务。 |
FormService | 表单服务,管理和流程、任务相关的表单。 |
HistroyService | 历史服务,管理历史数据。 |
ManagementService | 引擎管理服务,比如管理引擎的配置、数据库和作业等核心对象。 |
(3) 流程设计器
与 jBPM 类似,Activiti 也提供了基于 Eclipse 的流程设计器 —— Eclipse Designer。 此外还有 Signavio 公司为 Activiti 定制的基于 Web 的 流程设计器 —— Activiti Modeler。
(4) 原生支持 Spring
Activiti 可以很容易与 Spring 集成,这对于管理事务和解析表达式来说,非常方便。
(5) 分离运行时数据与历史数据
这一特性与 jBPM4 的设计理念一脉相承。这样的设计架构使得引擎可以快速地读取运行时数据,只有在需要时才会从历史表中查询历史数据。 这样可以极大地提高数据的存取效率。
2.2.2 Activiti 架构
组件 | 说明 |
---|---|
流程引擎(Activiti Engine) | 提供针对 BPMN 2.0 规范的解析;执行 、创建和管理流程实例与任务;以及查询历史记录并根据结果生成报表等功能。 |
业务模型设计器(Activiti Modeler) | 由 Signavio 公司设计实现,适用于业务人员把需求转换为流程定义。 |
开发模型设计器(Activiti Designer) | 开发人员可以导入业务需求人员用业务模型设计器设计的流程定义文件( XML 格式),这样就可以进一步加工成为可以运行的流程定义信息 。 |
流程管理器(Activiti Explorer) | 用于管理仓库、用户、组、流程实例和任务等流程对象。 |
流程 REST 服务(Activiti REST) | 提供 Restful 风格的服务,允许客户端以 JSON 的数据格式与引擎的 REST API 进行交互。 |
2.3 横向比较
2.3.1 技术实现
首先从技术实现上进行比较:
jPDL ( JBoss jBPM ProcessDefinitionLanguage )是构建于 jBPM 框架上的流程语言之一。在 jPDL 中提供了任务( tasks ) 、 待处理状态( waitstates ) 、 计时器( timers ) 、 自动处理( automatedactions ) … 等术语,并通过图型化的流程定义,直观地描述业务流程。
BPMN 是由 BPMI (TheBusinessProcessManagementInitiative) 开发了一套标准叫业务流程建模符号 ( BPMN -BusinessProcessModelingNotation)。 在 BPMI NotationWorkingGroup 超过2年的努力下,于 2004 年5月对外发布了 BPMN 1.0 规范。后 BPMI 并入到 OMG 组织, OMG 于 2011 年推出 BPMN 2.0 标准,对 BPMN 进行了重新定义(BusinessProcessModelandNotation)。 BPMN 的主要目标是提供一些被所有业务用户容易理解的符号,从创建流程轮廓的业务分析到这些流程的实现,直到最终用户的管理监控。 BPMN 也支持提供一个内部的模型可以生成可执行的 BPEL4WS。 因为 BPMN 的出现,弥补了从业务流程设计到流程开发的间隙。
jPDL 与 BPMN 的共同之处是,它们都可以使用直观的视图进行流程建模,用 XML 的形式来描述业务流程。差别如下:
- BPMN 是公开标准,而 jPDL 专属于 jBPM;
- BPMN 更加侧重于流程的建模,是类似于 UML 的建模语言,而 jPDL 侧重于流程的执行;
- 从 Java 开发者的角度来看, JPDL 更简单。
2.3.2 特性方面
因为 Activiti 与 jBPM4 一脉相承,所以 jBPM4 所拥有的优秀特性,Activiti 都拥有。
除此之外,Activiti 还加入了基于 Web 的流程设计器 —— Activiti Modeler,也叫做业务模型设计器,通过它,需求人员可以把需求转换为流程图,然后交给开发人员开展后续工作。
还有一个值得称道的特性是支持 Restful 风格的服务。REST( REpresentation State Transfer) 指的是用 URL 来定位资源,并使用 HTTP 动词( GET , POST , DELETE , PUSH 等)来定义操作动作。基于 REST 构建的 API 就是 Restful 风格的服务。 Restful 风格的服务可以通过一套统一的接口为 PC、 微信、IOS 和 Android 提供数据服务。 现如今,RESTful 架构风格已成为企业级服务的标配。
3 结论
- 如果项目时间紧,建议继续采用成熟的 jBPM4 框架,确保项目工期;
- 如果项目时间充裕(学习周期两周左右),建议更新换代到 Activiti 框架,为未来工作流产品化打下坚实的基础。