这段时间在学习Activiti,网上找了一些资料,感觉挺不错的,给汇总一下,一方面怕关掉后就找不到了,另一方面也方便后面的人能更快上手,于是就写了这么一篇文章。
工作流介绍:工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递信息的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。 通俗的说,流程就是多个人在一起合作完成某件事情的步骤,把步骤变成计算机能理解的形式就是工作流。
WfMC
提到工作流就不能不提到工作流管理联盟(WfMC,WorkflowManagementCoalition),它是一个由涉及工作流和业务流程管理的推广学者(adopters)、开发工程师、顾问、分析师、大学和研究团体的全球性组织,它的成立,标志着工作流技术开始进入相对成熟的阶段。该组织创建并完善了工作流管理系统的相关术语、体系结构及应用编程接口等方面制定了一系列标准,是唯一的致力于工作流标准的专业组织。
WfMS
接下来要说的是工作流管理系统(WorkflowManagement System,WfMS),它完成了工作量的定义和管理,并按照在系统中预先定义好的工作流规则进行工作流实例的执行的软件系统,这里要说明一下的是,并不是我们企业自己的系统应用了工作流就是工作流管理系统了,工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。WfMS被用来定义、管理和执行工作流程,它的目标是管理工作的流程以确保工作在正确的时间被期望的人员所执行。同时也可以在自动化进行的业务过程中插入人工的执行和干预。常见的wfms有Activiti、JBPM、OSWorkflow、ActiveBPEL、YAWL等。本文主要讲的是Activiti。
工作流生命周期:
一个完整的工作流生命周期会经过五个步骤,并且迭代循环:
定义:工作流生命周期总是从流程定义开始。此阶段的任务主要是收集业务需求并转化为流程定义。一般由业务需求人员进行,然后交由开发人员加工转化为计算机可以识别的流程定义。
发布:由开发人员打包各种资源,然后在系统管理(平台)中发布流程定义。在具体的流程引擎中包括流程定义文件、自定义表单、任务监听类。
执行:具体的流程引擎(例如,Activiti)按照事先定义的流程处理路线以任务驱动的方式执行业务流程。
监控:此阶段是依赖执行阶段。业务人员在办理任务的同时收集每个任务(Task)的结果,然后根据结果做出相应处理,例如,在采购办公用品流程中,在通过领导审批之后,采购人员就要根据申请单外出采购。
优化:在此阶段,一个完整的流程已经结束,或许能满足业务需求,或许需要优化,而糟糕的情况是需要重新设计(流程没结束就异常终止),优化与设计正是此阶段需要处理的。根据整个流程的运行过程结果分析问题的根源,然后在此基础上进一步改进,并再次开始一个新的周期。
Activiti基本信息
Activiti简介:Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。通常activiti引擎需要嵌入到业务系统中去运行。
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务
流程图。.
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数据库表
activiti自带24张表
ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。
表类型 | 表名 | 描述 |
---|---|---|
ACT_EVT | ACT_EVT_LOG | 事件日志表 |
ACT_GE_* | ACT_GE_BYTEARRAY | 二进制数据表,存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件都是以二进制形式存储在数据库中 |
ACT_GE_PROPERTY | 属性数据表,存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录。 | |
ACT_HI_* | ACT_HI_ACTINST | 历史节点表,存放历史所有完成的活动。 |
ACT_HI_ATTACHMENT | 历史附件表 | |
ACT_HI_COMMENT | 历史意见表 | |
ACT_HI_DETAIL | 历史详情表,提供历史变量的查询 | |
ACT_HI_IDENTITYLINK | 历史流程人员表,存储任务的办理人,包括个人任务和组任务,表示历史任务 | |
ACT_HI_PROCINST | 历史流程实例表,存储已经执行完的历史流程实例信息 | |
ACT_HI_TASKINST | 历史流程任务表,存储已经执行完的历史任务信息 | |
ACT_HI_VARINST | 历史变量表,存储已经执行完的历史流程变量信息 | |
ACT_ID_* | ACT_ID_GROUP | 用户组信息表 |
ACT_ID_INFO | 用户扩展信息表 | |
ACT_ID_MEMBERSHIP | 用户与用户组关系信息表 | |
ACT_ID_USER | 用户信息表 | |
ACT_RE_* | ACT_RE_DEPLOYMENT | 部署信息表,存放流程定义的显示名和部署时间 |
ACT_RE_MODEL | 流程设计模型部署表,存储流程定义的数据信息。 | |
ACT_RE_PROCDEF | 流程定义数据表,存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。注意:当流程定义的key相同的情况下,使用的是版本升级 | |
ACT_RU_* | ACT_RU_EVENT_SUBSCR | throwEvent、catchEvent时间监听信息表 |
ACT_RU_EXECUTION | 运行时流程执行对象表,当流程达到一个节点中时,会在执行对象表中产生一条数据,当流程结束后,流程实例将会在正在执行的执行对象表中被删除 | |
ACT_RU_IDENTITYLINK | 运行时流程人员表,主要存储任务的办理人,包括个人任务和组任务,表示正在执行的任务 | |
ACT_RU_JOB | 运行时定时任务数据表 | |
ACT_RU_TASK | 运行时任务节点表,当流程达到一个节点中时,会在执行对象表中产生一条数据,如果当前节点是用户任务节点,这时也会在用户任务节点表中增加一条记录,当流程结束后,流程实例将会在正在执行的任务节点表中被删除 | |
ACT_RU_VARIABLE | 运行时流程变量数据表,设置流程变量的时候,向act_ru_variable这个表添加数据 |
Activiti七大service接口
RepositoryService: 流程仓库Service,用于管理流程仓库,例如:部署,删除,读取流程资源
IdentityService:身份Service,可以管理,查询用户,组之间的关系
RuntimeService:运行时Service,可以处理所有正在运行状态的流程实例,任务等
TaskService:任务Service,用于管理,查询任务,例如:签收,办理,指派等
HistoryService:历史Service,可以查询所有历史数据,例如:流程实例,任务,活动,变量,附件等
FormService:表单Service,用于读取和流程,任务相关的表单数据
ManagementService:引擎管理Service,和具体业务无关,主要是可以查询引擎配置,数据库,作业等
Activiti 与jBPM 5的比较
序号 | 技术组成 | Activiti | jBPM 5 |
---|---|---|---|
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 |
总结
本文先介绍了工作流的基本信息引出Activiti,再介绍Activiti的一些基本资料,特点,组件,最后对比了JBPM5进行了对比。
本文参考以下多篇文章
https://blog.csdn.net/lxxiang1/article/details/82229772
https://blog.csdn.net/lxxiang1/article/details/82262109
https://blog.csdn.net/zwk626542417/article/details/46592471