工作流引擎简介
工作流引擎被广泛应用于各种信息化系统中,将原本散乱的业务梳理后定制成业务规范流程,进而约束业务的规范化处理和运转,定制流程规范后,将其部署到工作流引擎中,由他自动驱动业务流程的进行。
Activiti可以运行在任何类型的java程序中,例如服务器、集群、云服务等。
Activiti可以完美的与spring集成。
Activiti的特点
- 数据持久化,底层使用MyBatis
- 引擎Service接口
- 流程设计器(Eclipse Designer、IDEA actiBMP、基于web的Activiti Modeler)
- 原生支持Spring
- 分离运行时与历史数据
Activiti引擎的七大Service接口
Service接口 | 作用 |
---|---|
RepositoryService | 流程仓库Service,用于管理流程仓库,例如部署、删除、读取流程资源 |
IdentifyService | 身份Service,用于管理和查询用户、组之间的关系 |
RuntimeService | 运行时Service,可以也拿过来处理所有正在运行状态的流程实例、任务等 |
TaskService | 任务Service,用于管理和查询任务,例如签收、办理、指派等 |
FormService | 表单Service,用于读取流程、任务相关的表单数据 |
HistoryService | 历史Service,用于查询所有历史数据,例如流程实例、任务、活动、变量、附件 |
ManagementService | 引擎管理Service,和具体业务无关,主要可以查询引擎配置、数据库、作业等 |
Activiti架构
Activiti与BPMN 2.0规范
启动事件与结束事件(Event)
启动事件
启动事件都是触发型的,等待第三方触发后才可以启动。在ACTIVITI中可以通过调用API触发启动事件。
空启动事件
<process id="myProcess_1" isClosed="false" isExecutable="true" processType="None">
<startEvent id="_9" name="StartEvent"/>
</process>
由于startEvent 标签中没有任何其他的元素定义,所以称为空启动事件。
属性列表为
form key:用来指定空启动事件关联的表单文件
initiator:用来记录启动流程的人的ID
定时启动事件
定时启动事件用来一次性定时启动、特定时间间隔后启动。
timeDate:一次性定时启动
timeDuration:设置多长时间后启动流程
timeCycle:周期性启动任务,用来设定循环的时间间隔、表示多长时间执行一次循环。
异常启动事件
异常启动事件可以触发一个异常子流程,但不能通过API方式启动,他总是在另外一个流程抛出异常结束事件的时候被触发。
空结束事件
空结束事件
结束事件是抛出型的,空结束时间不处理抛出的结果。
异常结束事件
异常结束事件定义了需要抛出的错误代码,如果找到合适的异常开始时间则触发异常开始事件,否则按照空结束事件处理。
终止结束事件
可以终止一个流程实例的运行。
取消结束事件
可以取消一个事务子流程的执行,同时只能在子流程中使用。
顺序流(Sequence Flow)
如果一个元素在流程期间被访问,流程会沿着该元素所有的输出顺序流继续执行。多个输出顺序流会创建多条独立的、并行的执行路径。
标准顺序流
允许添加监听器
条件顺序流
添加条件表达式,只有满足条件才能通过顺序流到达目标活动。
条件顺序流的XMl描述是在顺序流中添加条件表达式标签conditionExpression,并且在conditionExpression中设置UEL表达式用于计算逻辑值。
任务(Task)
用户任务
必须人为的触发
脚本任务
脚本任务可以运行引擎依赖语言之外的脚本语言,如Groovy、JavaScript
web service任务
通过web service任务可以调用外部的web service资源,完成调用只需要一些必须的配置就可以,并且支持标准的web service和rest风格的service。
业务规则任务
业务规则任务可以根据流程变量的值处理预设的业务规则。
邮件任务
邮件任务可以通过activiti发送邮件,其中邮件信息通过变量方式传递。
Camel任务
Camel是用来解决消息路由的框架。
Mule任务
Mule任务和Camel任务相似,但他们是基于不同标准实现的。
手动任务
activiti把手动任务当作一个空任务来处理,当到达此任务时由引擎自动完成并转向下一个任务。
接收任务
接收任务是一个功能简单且单一的任务,在任务创建后开始等待消息的到来,直到被触发才会完成任务。
Shell任务
Shell任务允许在流程运行过程中执行本地操作系统中的脚本、命令,是Activiti基于serviceTask扩展的一种任务。
网关(Gateway)
排他网关
排他网关用来对流程中的决定进行建模。
并行网关
并行网关用来对并发的任务进行流程建模,它能把单条线路任务拆分成多个路径并行执行或将多条路线合并。
包容网关
包含网关融合了排它网关和并行网关的特性,排它网关运行在每条线路上设置条件,并行网关可以同时执行多条线路,包含网关既可以同时执行多条线路,又允许在网关上设置条件。
事件网关
它允许多个输出流指向多个不同的中间捕获时间。
子流程(Subprocess)
边界事件(Boundary Event)
边界事件
边界事件是绑定在活动上的“捕获型”事件,会一直监听所有处于活动的某种事件的触发,在捕获到事件之后中断活动,然后从边界事件类型的数据流继续执行。
中间事件(Intermediate Event)
中间捕获事件
中间抛出事件
监听器(Listener)
监听器是业务和流程的“非侵入式粘合剂”,在activiti中开发人员可以通过配置监听器的方式监听各种动作,例如流程启动、结束、任务创建、任务完成。
监听器分为两类:执行监听器和任务监听器。