Activiti工作流引擎——组件说明

工作流引擎简介

工作流引擎被广泛应用于各种信息化系统中,将原本散乱的业务梳理后定制成业务规范流程,进而约束业务的规范化处理和运转,定制流程规范后,将其部署到工作流引擎中,由他自动驱动业务流程的进行。

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中开发人员可以通过配置监听器的方式监听各种动作,例如流程启动、结束、任务创建、任务完成。
监听器分为两类:执行监听器和任务监听器。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YEN_CSDN/article/details/54666658
所属专栏: JavaEE专业技能
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭