工作流技术的主要特点是:过程的自动化处理(包含人与系统交互为基础的人工活动)。
目前被广泛应用于办公环境中,比如:
作为企业应用集成(Enterprise Application Integration,EAI)的平台:
大型企业一般都运行着各种各样的异构应用以及数据,而大部分的工作流管理系统能够结合专门的业务应用,从而构建出统一的 EAI 平台。
嵌入式工作流引擎:工作流引擎可作为一个组件,嵌入到业务信息系统中,这样可以增强应用的可扩展性与系统的可维护性。
引入工作流管理技术可以:
假设有这样的一个流程:
如果不使用工作流,那么我们将要做这些工作:
使用了工作流的应用系统,有这些明显的优势和好处:
综上所述,使用工作流技术有这些好处:
目前业界用的比较广泛的开源工作流框架是 jBPM 与 Activiti 框架。我们对其进行分析说明。
jBPM(java Business Process Management),是一种基于JavaEE 的轻量级工作流管理框架(Framework)。
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 的"无限"扩展和集成提供了有力的底层功能支持。
经过这么多年的发展,JBoss jBPM 已经成为一流的开源工作流产品:
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)技术的基础上,能够同时支持多种流程定义语言。
(1) 嵌入式的工作流引擎
开发者可以把 jBPM4 框架作为业务流程管理的基础,在此基础上开发自己独特的业务流程管理模块和功能。在部署时,只需要把 jBPM4 作为项目的依赖库发布就可以咯 O(∩_∩)O哈哈~
(2) 可插拔的体系架构
jBPM4 采用了模块化的架构设计,采用了 IOC(依赖注入)的设计理念,各模块之间可以比较方便地解除耦合或替换不同的实现,例如持久化、事务处理、身份认证、日志服务等,都是由可选模块实现的。jBPM 的可插拔体系架构,为开发者灵活选择 jBPM 的功能、自定义已有功能和拓展新功能提供了"无限可能"。
(3) 易扩展的流程语言
开发者还可以通过定制新的活动类型或者完全重新设计一种新的流程定义语言来描述特定领域的业务流程,满足独特环境下的业务需求。
(4) 技术方面的特点
Activiti 是一个针对企业用户、开发人员 、系统管理员的轻量级工作流业务管理平台,其核心是使用 java 开发的快速 、 稳定的 BPMN2.0 流程引擎 。它可以与 spring 完美集成。
创始人 Tom Baeyens 曾经是 JBoss jBPM 的项目架构师,所以之前接触过 jBPM4 的同学,会觉得 Activiti5 很亲切。
(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 的设计理念一脉相承。这样的设计架构使得引擎可以快速地读取运行时数据,只有在需要时才会从历史表中查询历史数据。 这样可以极大地提高数据的存取效率。
组件 | 说明 |
---|---|
流程引擎(Activiti Engine) | 提供针对 BPMN 2.0 规范的解析;执行 、创建和管理流程实例与任务;以及查询历史记录并根据结果生成报表等功能。 |
业务模型设计器(Activiti Modeler) | 由 Signavio 公司设计实现,适用于业务人员把需求转换为流程定义。 |
开发模型设计器(Activiti Designer) | 开发人员可以导入业务需求人员用业务模型设计器设计的流程定义文件( XML 格式),这样就可以进一步加工成为可以运行的流程定义信息 。 |
流程管理器(Activiti Explorer) | 用于管理仓库、用户、组、流程实例和任务等流程对象。 |
流程 REST 服务(Activiti REST) | 提供 Restful 风格的服务,允许客户端以 JSON 的数据格式与引擎的 REST API 进行交互。 |
首先从技术实现上进行比较:
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 的形式来描述业务流程。差别如下:
因为 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 架构风格已成为企业级服务的标配。