Activiti是由Alfresco软件发布的业务流程管理(BPM)框架。它为新的BPMN 2.0标准提供了支持,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构,提供技术实现。
Activiti API
Activiti API是与 Activiti 交互的最常见方式。中心起点是ProcessEngine,可以通过多种方式创建。从 ProcessEngine,您可以获得包含工作流/BPM 方法的各种服务。ProcessEngine 和服务对象是线程安全的。因此,您可以为整个服务器保留对其中 1 个的引用,然后通过ProcessEngine来获得以下的服务进行操作:
RepositoryService: 管理 Deployments
RuntimeService: 用于启动和搜索 流程实例 (ProcessInstance)
TaskService: 公开用于管理人工(独立)任务的操作,例如声明、完成和分配任务
IdentityService: 用于管理用户、组及其之间的关系
ManagementService: 公开引擎管理和维护操作,这些操作与业务流程的运行时执行无关
HistoryService: 公开有关正在进行和过去的流程实例的信息。
FormService: 访问表单数据和呈现表单,以启动新流程实例并完成任务。
事件侦听器的唯一要求是实现org.activiti.engine.delegate.event.ActivitiEventListener
数据库表结构
Activiti 的数据库名称都以ACT_ 开头。第二部分是表格用例的双字符标识。这个用例也将大致匹配服务 API。
ACT_RE_ *:RE代表repository. 带有此前缀的表包含静态信息,例如流程定义和流程资源(图像、规则等)。
ACT_RU_ *:RU代表runtime. 这些是运行时表,包含流程实例、用户任务、变量、作业等的运行时数据。Activiti 只在流程实例执行期间存储运行时数据,并在流程实例结束时删除记录。这使运行时表既小又快。
ACT_ID_ *:ID代表identity。这些表包含身份信息,例如用户、组等。
ACT_HI_ *:HI代表history. 这些是包含历史数据的表,例如过去的流程实例、变量、任务等。
ACT_GE_ *:general数据,用于各种用例。
流程符号说明
事件:包含开始事件、 中间事件、 结束事件
活动:包含 用户任务、 服务任务、 子流程
网关:分为并行网关、排他网关、包含网关、综合网关和事件网关。
并行网关: 如:需要直接上级和领导审批完成
排他网关:如:三天以下假期,不需要总经理审批,三天以上假期,需要总经理审批
包含网关:如:当你请病假找项目经理审批,如果不是病假,找总经理审批
综合网关:用来在流程中实现聚合决策。 当流程执行到这个网关,根据所设定的聚合规则进行计算,当聚合完毕时触发流转到下一节点。聚合规则可以是并行结束行为,也可以是多重聚合行为,或者多路聚合行为。
事件网关:基于事件网关允许根据事件判断流向,用来在流转中实现异或分支决策。当流程执行到这个网关,网关的每个流出分支都要连接到一个中间捕获事件,网关会进入等待状态:流程会暂停执行。与此同时,会为每个流出分支建相对的事件订阅,当捕获取事件源时触发条件计算,计算结果为ture时分支被选中,其它分支将被忽略,并选取最先被选中的分支执行流转。
事件处理
Activiti 5.15 引入了事件机制。它允许您在引擎内发生各种事件时得到通知。
可以为某些类型的事件注册一个侦听器,而不是在调度任何类型的事件时收到通知。您可以通过配置添加引擎范围的事件监听器,使用 API 在运行时添加引擎范围的事件监听器,或者将事件监听器添加到BPMN XML 中的特定流程定义。
调度的所有事件都是 的子类型org.activiti.engine.delegate.event.ActivitiEvent。该事件自曝(如果有的话)type,executionId,processInstanceId和processDefinitionId。
总结
到目前为止,Activiti共有三个版本体系:
activiti5.x ,这是很多公司在使用的版本,虽然后面有新的版本,但是很多公司目前使用的还是activiti5
activiti6.0 ,最大的变化点就是对代码进行了重构,该版本修复以往的Bug并不多,但内部实现相对来说变化比较大,如 只支持Async Executor,Async Executor 将以可插拔的方式,支持两种模式;ACT_RU_JOB表被拆分,减少了以往处理timer和异步任务时轮询这张表的压力,提高处理高负载高并发任务的能力
activiti7.x,把之前的API进行了封装,使用新的ProcessRuntime和TaskRuntime进行流程与任务的控制,并且默认使用SpringSecurity进行身份控制。以及弃用了activiti modeler改为BPMN-JS等