Activiti简介
Activiti 是由 jBPM 的创建者 Tom Baeyens 离开 JBoss 之后建立的项目,构建在开发 jBPM 版本 1 到 4 时积累的多年经验的基础之上,旨在创建下一代的 BPM 解决方案。
Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。
Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于Java的超快速、超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌入性和可扩展性,同时更加强调面向业务人员。
Activiti 流程引擎重点关注在系统开发的易用性和轻量性上。每一项 BPM 业务功能 Activiti 流程引擎都以服务的形式提供给开发人员。通过使用这些服务,开发人员能够构建出功能丰富、轻便且高效的 BPM 应用程序。
Activiti是一个针对企业用户、开发人员、系统管理员的轻量级工作流业务管理平台,其核心是使用Java开发的快速、稳定的BPMN e 2.0流程引擎。Activiti是在ApacheV2许可下发布的,可以运行在任何类型的Java程序中,例如服务器、集群、云服务等。Activiti可以完美地与Spring集成。同时,基于简约思想的设计使Activiti非常轻量级。
Activiti的特点
1)数据持久化
Activiti的设计思想是简洁、快速。有过应用开发经验的开发人员都知道应用的瓶颈体现在和数据库交换数据的过程中,针对这一点Activiti选择了使MyBatis,从而可以通过最优的SQL语句执行Command,仅凭如此就能让引擎在速度上保持最高的性能。
2)引擎service接口
Activiti 流程引擎重点关注在系统开发的易用性和轻量性上。每一项 BPM 业务功能 Activiti 流程引擎都以服务的形式提供给开发人员。通过使用这些服务,开发人员能够构建出功能丰富、轻便且高效的 BPM 应用程序。
ctiviti.cfg.xml文件为核心配置文件,该配置文件集成在Spring的IOC容器当中,可以产生ProcessEngineConfiguration对象,这个对象就是流程引擎的配置对象,ProcessEngine对象则为流程引擎对象,该对象是工作流业务系统的核心,所有的业务操作都是由这个对象所派生出来的对象实现。
Activiti引擎提供了七大Service接口,均通过ProcessEngine获取,并且支持链式API编程风格。
3)流程设计器
在jBPM4时代有专门的Eclipse插件可以用来设计jPDL,同样Activiti团队也专门设计了用来设计BPMN 2.0规范的流程谩计器-Eclipse Designer。此外还有Signavio公司为Activiti定制的基于Web的Activiti Modeler流程设计器。喜欢用IDEA的,IDEA也有actiBPM插件支持。
4)原生支持Spring
Activiti原生支持Spring,这一点对企业应用来说尤为重要:可以很轻松地进行Spring集成,非常方便管理事务和解析表达式( Expression)。
5)分离运行时与历史数据
Activiti继承自jBPM4,在表结构设计方面也遵循运行时与历史数据的分离,这样的设计可以快速读取运行时数据,仅当需要查询历史数据时再从专门的历史数据表中读取。这种设计方式可以大幅提高数据的存取效率,尤其是当数据日积月累时依然能够快速反应。
Activiti架构与组件
Activiti Engine:
作为最核心的模块,提供针对BPMN 2.0规范的解析、执行、创建、管理(任务、流程实例)、查询历史记录并根据结果生成报表。
Activiti Modeler
是模型设计器,其并非由Activiti公司所开发,而是由业界认可的Signavio公司赠送的(Signavio e原本是收费的产品,现在被免费授权给Activiti用户使用)。适用于业务人员把需求转换为规范流程定义。
Activiti Designer:
功能和Activiti Modeler类似,同样提供了基于BPMN 2.0规范的可视化设计功能,但是目前还没有完全支持BPMN规范的定义。适用于开发人员,可以把业务需求人员用Signavio设计的流程定义(XML格式)导入到Designer中,从而让开发人员将其进一步加工成为可以运行的流程定义。
Activiti Explorer:
可以用来管理仓库、用户、组,启动流程、任务办理等。此组件使用REST风格API,提供一个基础的设计模型。如果业务简单,也可以直接使用无需开发。还可以作为后台管理员的流程、任务管理系统使用。
Activiti REST:
提供Restful风格的服务,允许客户端以JSON的方式与引擎的REST API交互,通用的协议具有跨平台、跨语言的特性。
Activiti与jBPM5的对比
jBPM5 和 Activiti 同样支持 BPMN2.0 规范,但是实际上jBPM5 已经推翻了 jBPM3 和 jBPM4 的架构,使用了 Drools Flow 作为工作流架构,这对于原来使用 jBPM3 和 jBPM4 的用户来说是非常郁闷的一件事(从零开始重新学习 jBPM5),而 Activiti 更像是原来 jBPM4 的延续,因此对于原来使用 jBPM3 和 jBPM4 的用户来说,更推荐使用 Activiti,但是由于 JBoss 中有一些优秀的项目(例如规则引擎 Drools、Seam 等),jBPM5 与这些项目进行整合具有先天的优势,因此如何进行选择还需要进行权衡。
从技术组成来看,Activiti最大的优势是采用了PVM(流程虚拟机),支持除了BPMN2.0规范之外的流程格式,与外部服务有良好的集成能力,延续了jBPM3、jBPM4良好的社区支持,服务接口清晰,链式API更为优雅;劣势是持久化层没有遵循JPA规范。jBPM最大的优势是采用了Apache Mina异步通信技术,采用JPA/JTA持久化方面的标准,以功能齐全的Guvnor作为流程仓库,有RedHat(jBoss.org被红帽收购)的专业化支持;但其劣势也很明显,对自身技术依赖过紧且目前仅支持BPMN2。
序号 | 技术组成 | Activiti | jBPM5 |
1 | 数据库持久层ORM | MyBatis3 | Hibernate3 |
2 | 持久化标准 | 无 | EJB JPA规范 |
3 | 事务管理 | MyBatis机制/Spring事务控制 | Bitronix,基于JTA事务管理 |
4 | 数据库连接方式 | Jdbc/DataSource | Jdbc/DataSource |
5 | 支持数据库 | Oracle、SQL Server、MySQL、H2、内存数据库等 | Oracle、SQL Server、MySQL、内存数据库等 |
6 | 设计模式 | 命令(Command)模式、观察者模式等 | |
7 | 内部服务通讯 | Service间通过API调用 | 基于Apache Mina异步通讯 |
8 | 集成接口 | SOAP、Mule、RESTful | 消息通讯 |
9 | 支持的流程格式 | BPMN2、xPDL、jPDL等(由PVM实现) | 目前仅只支持BPMN2 xml |
10 | 引擎核心 | PVM(流程虚拟机) | Drools |
11 | 技术前身 | jBPM3、jBPM4 | Drools Flow |
12 | 所属公司 | Alfresco | jBoss.org |
jBPM5 和 Activiti的主要相似之处:
1)都是BPMN2过程建模和执行环境。
2)都是BPM系统(符合BPM规范)。
3)都是开源项目-遵循ASL协议( Apache的 软件许可)。
4)都源自JBoss(Activiti5是jBPM4的衍生,jBPM5则基于Drools Flow)。
5)都很成熟,从无到有,双方开始约始于2年半前。
6)都有对人工任务的生命周期管理。 Activiti5和jBPM5唯一的区别是jBPM5基于WebService - HumanTask标准来描述人工任务和管理生命周期。 如有兴趣了解这方面的标准及其优点,可参阅WS - HT规范介绍 。
7)都使用了不同风格的 Oryx 流程编辑器对BPMN2建模。 jBPM5采用的是 Intalio 维护的开源项目分支。 Activiti5则使用了Signavio维护的分支。