写点什么

详解工作流框架 Activiti 的服务架构和组件

  • 2021 年 12 月 03 日
  • 本文字数:4715 字

    阅读完需:约 15 分钟

摘要:通过这篇文章,可以对工作流有一个基本的认识,为后续工作流框架 Activiti 的学习打下坚实的基础。

 

本文分享自华为云社区《BPMN工作流的基本概念!详解工作流框架Activiti的服务架构和组件》,作者: 攻城狮 Chova 。

工作流

工作流简介


  • 工作流(Workflow): 工作流就是通过计算机技术对业务流程进行自动化管理。实现多个参与者按照预定的流程去自动执行业务流程。

定义: 通过计算机对业务流程自动化执行管理

主要解决的是: 使在多个参与者之间按照某种预定义的规则自动进行传递文档,信息或任务的过程.从而实现某个预期的业务目标,或者促使此目标的实现


  • 工作流管理系统的目标:

管理工作的流程以确保工作在正确的时间被期望的人员所执行

在自动化进行的业务过程中插入人工的执行和干预


  • 工作流框架:

Activiti,JBPM,OSWorkFlow,WorkFlow

工作流框架底层需要有数据库提供支持

工作流术语


工作流引擎

  • ProcessEngine 对象: 这是 Activiti 工作的核心.负责生成流程运行时的各种实例及数据,监控和管理流程的运行


BPM

  • 业务流程管理:

是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方法

常见商业管理教育如 EMBA,MBA 等均将 BPM 包含在内


BPMN

  • 业务流程建模与标注:

这些图如何组合成一个业务流程图(Business Process Diagram)

讨论 BPMN 的各种的用途:包括以何种精度来影响一个流程图中的模型

BPMN 作为一个标准的价值

BPMN 未来发展的远景


流对象

一个业务流程图有三个流对象的核心元素


  • 事件

一个事件用圆圈来描述,表示一个业务流程期间发生的东西

事件影响流程的流动.一般有一个原因(触发器)或一个影响(结果)

基于它们对流程的影响,有三种事件:开始事件,中间事件,终止事件



  • 活动

用圆角矩形表示,一个流程由一个活动或多个活动组成



  • 条件

条件用菱形表示,用于控制序列流的分支与合并。

可以作为选择,包括路径的分支与合并

内部的标记会给出控制流的类型

Activiti 开源工作流框架

Activiti 简介


  • Activiti 是一个开源的工作流引擎,它实现了 BPMN2.0 规范,可以发布设计好的流程定义,并通过 api 进行流程调度

  • Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于 Java 的超快速,超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌入性和可扩展性,同时更加强调面向业务人员

  • Activiti 流程引擎重点关注在系统开发的易用性和轻量性上.每一项 BPM 业务功能 Activiti 流程引擎都以服务的形式提供给开发人员.通过使用这些服务,开发人员能够构建出功能丰富,轻便且高效的 BPM 应用程序

Activiti 服务结构


Activiti 系统服务结构图



  • 核心类:

ProcessEngine: 流程引擎的抽象,可以通过此类获取需要的所有服务


  • 服务类:

XxxService: 通过 ProcessEngine 获取,Activiti 将不同生命周期的服务封装在不同 Service 中,包括定义,部署,运行.通过服务类可获取相关生命周期中的服务信息

RepositoryService

RepositoryService 提供了对 repository 的存取服务

Activiti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据(例如 BPMN2.0XML 文件,表单定义文件,流程定义图像文件等),这些文件都存储在 Activiti 内建的 Repository 中

RuntimeService

Runtime Service 提供了启动流程,查询流程实例,设置获取流程实例变量等功能.此外它还提供了对流程部署,流程定义和流程实例的存取服务

TaskService

Task Service 提供了对用户 Task 和 Form 相关的操作.它提供了运行时任务查询,领取,完成,删除以及变量设置等功能

HistoryService

History Service 用于**获取正在运行或已经完成的流程实例的信息,**与 Runtime Service 中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化

FormService

使用 FormService 可以存取启动和完成任务所需的表单数据并且根据需要来渲染表单

Activiti 中的流程和状态 Task 均可以关联业务相关的数据

IdentityService

Identity Service 提供了对 Activiti 系统中的用户和组的管理功能

Activiti 中内置了用户以及组管理的功能,必须使用这些用户和组的信息才能获取到相应的 Task

ManagementService

ManagementService 提供了对 Activiti 流程引擎的管理和维护功能

这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护


  • 核心业务对象:

org.activiti.engine.impl.persistence.entity 包下的类,包括 Task,ProcessInstance,Execution 等

根据不同职责实现相应接口的方法(如需要持久化则继承 PersistentObject 接口),与传统的实体类不同

Activiti 组件


  • Activiti 上下文组件 Context: 用来保存生命周期比较长,全局性的信息,类似 Application.主要包括如下三类:

CommandContext: 命令上下文-保存每个命令必要的资源,如持久化需要的 session

ProcessEngineConfigurationImpl: 流程引擎相关配置信息-整个引擎全局的配置信息.如数据源 DataSource 等.该对象为单例,在流程引擎创建的时候初始化

ExecutionContext: 持有 ExecutionEntity 对象


  • 持久化组件:

Activiti 使用 mybatis 作 OR 映射,并在此基础上增加设计了自己的持久化框架

在流程引擎创建时初始化,顶层接口 Session,SessionFactory

Session 有两个实现类:

DbSqlSession: 负责 sql 表达式的执行

AbstractManager: 负责对象的持久化操作

SessionFactory 有两个实现类:

DbSqlSessionFactory: 负责 DbSqlSession 相关操作

GenericManagerFactory: 负责 AbstractManager 相关操作


  • Event-Listener 组件:

Activiti 允许客户代码介入流程执行,提供了事件监听组件

监听的事件类型:

TaskListener

JavaDelegate

Expression

ExecutionListener

ProcessEngineConfigurationImpl 持有 DelegateInterceptor 的某个实例,方便调用 handleInvocation


  • Cache 组件

DbSqlSession 中有 cache 的实现

Activiti 基于 List 和 Map 来做缓存:如查询时先查缓存,没有则直接查询并放入缓存


  • 异步执行组件

Activiti 可以执行任务,JobExecutor 为其核心类,JobExecutor 包含三个主要属性:

JobAcquisitionThread

BlockingQueue

ThreadPoolExecutor

方法 ProcessEngines 在引擎启动时调用 JobExecutor.start,JobAcquisitionThread 线程即开始工作,其 run 方法不断循环执行 AcquiredJobs 中的 job,执行一次后线程等待一定时间直到超时或者 JobExecutor.jobWasAdded 方法,因为有新任务而被调用。

流程虚拟机 PVM


  • 流程虚拟机 API 暴露了流程虚拟机的 POJO 核心,流程虚拟机 API 描述了一个工作流流程必备的组件,这些组件包括:

PvmProcessDefinition: 流程的定义,形象点说就是用户画的那个图.静态含义

PvmProcessInstance: 流程实例,用户发起的某个 PvmProcessDefinition 的一个实例.动态含义

PvmActivity: 流程中的一个节点

PvmTransition: 衔接各个节点之间的路径,形象点说就是图中各个节点之间的连接线

PvmEvent: 流程执行过程中触发的事件

Activiti 架构



  • Activiti Engine:

最核心的模块

提供针对 BPMN2.0 规范的解析,执行,创建,管理(任务,流程实例),查询历史记录并根据结果生成报表


  • Activiti Modeler:

模型设计器

适用于业务人员把需求转换为规范流程定义


  • Activiti Designer:

功能和 ActivitiModeler 类似,同样提供了基于 BPMN 2.0 规范的可视化设计功能,但是目前还没有完全支持 BPMN 规范的定义

可以把业务需求人员用 Signavio 设计的流程定义(XML 格式)导入到 Designer 中,从而让开发人员将其进一步加工成为可以运行的流程定义


  • Activiti Explorer:

可以用来管理仓库,用户,组,启动流程,任务办理等

此组件使用 REST 风格 API,提供一个基础的设计模型.如果业务简单,也可以直接使用无需开发.还可以作为后台管理员的流程、任务管理系统使用


  • Activiti REST:

提供 RESTful 风格的服务

允许客户端以 JSON 的方式与引擎的 REST API 交互

通用的协议具有跨平台,跨语言的特性

Activiti 数据库支持


  • Activiti 的后台由有数据库的支持

  • 所有的表都以 ACT_开头

  • 第二部分是表示表的用途的两个字母标识

  • 用途也和服务的 API 对应


ACT_RE_* : 'RE'表示repository. 这个前缀的表包含了流程定义和流程静态资源(图片,规则...)ACT_RU_* : 'RU'表示runtime.这些运行时的表,  包含流程实例,任务,变量,异步任务,等运行中的数据.			Activiti只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录.这样运行时表可以一直很小速度很快ACT_ID_* : 'ID'表示identity.这些表包含身份信息,  比如用户,组...ACT_HI_* : 'HI'表示history.这些表包含历史数据,  比如历史流程实例,变量,任务...ACT_GE_* :通用数据. 用于不同场景下,  如存放资源文件
复制代码


  • 资源库流程规则表 (ACT_RE_*:'RE’表示 repository.这个前缀的表包含了流程定义和流程静态资源(图片,规则…))


act_re_deployment  		部署信息表act_re_model			流程设计模型部署表act_re_procdef			流程定义数据表
复制代码


  • 运行时数据库表 (ACT_RU_*:'RU’表示 runtime.这些运行时的表, 包含流程实例,任务,变量,异步任务,等运行中的数据.Activiti 只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录.这样运行时表可以一直很小速度很快)


act_ru_execution 		运行时流程执行实例表act_ru_identitylink		运行时流程人员表,主要存储任务节点与参与者的相关信息act_ru_task				运行时任务节点表act_ru_variable			运行时流程变量数据表
复制代码


  • 组织机构表 (ACT_ID_* : 'ID’表示 identity.这些表包含身份信息, 比如用户,组…)


act_id_group			用户组信息表act_id_info				用户扩展信息表act_id_membership		用户与用户组对应信息表act_id_user				用户信息表这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足
复制代码


  • 历史数据库表 (ACT_HI_*:'HI’表示 history.这些表包含历史数据, 比如历史流程实例,变量,任务…)


act_hi_actinst 			历史节点表act_hi_attachment		历史附件表act_hi_comment			历史意见表act_hi_identitylink		历史流程人员表act_hi_detail			历史详情表,提供历史变量的查询act_hi_procinst			历史流程实例表act_hi_taskinst			历史任务实例表act_hi_varinst			历史变量表
复制代码


  • 组织机构表 (ACT_GE_*:通用数据. 用于不同场景下, 如存放资源文件)


act_ge_bytearray		二进制数据表act_ge_property			属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录
复制代码


Activiti 配置文件


  • activiti.cfg.xml: Activiti 核心配置文件,配置流程引擎创建工具的基本参数和数据库连接池参数

定义数据库配置参数

配置连接池参数

Activiti 特点


数据持久化

  • Activiti 的设计思想是简洁,快速

  • 瓶颈体现在和数据库交换数据的过程中,针对这一点 Activiti 选择了使 MyBatis,从而可以通过最优的 SQL 语句执行 Command,仅凭如此就能让引擎在速度上保持最高的性能


引擎 service 接口

  • Activiti 流程引擎重点关注在系统开发的易用性和轻量性上,每一项 BPM 业务功能 Activiti 流程引擎都以服务的形式提供给开发人员,通过使用这些服务,开发人员能够构建出功能丰富,轻便且高效的 BPM 应用程序

  • activiti.cfg.xml 文件为核心配置文件,该配置文件集成在 Spring 的 IOC 容器当中,可以产生 ProcessEngineConfiguration 对象,这个对象就是流程引擎的配置对象

  • ProcessEngine 对象为流程引擎对象,该对象是工作流业务系统的核心,所有的业务操作都是由这个对象所派生出来的对象实现

  • Activiti 引擎提供了七大 Service 接口,均通过 ProcessEngine 获取,并且支持链式 API 编程风格


流程设计器

  • 基于 Web 的 Activiti Modeler 流程设计器

  • IDEA 的 actiBPM 插件


原生支持 Spring

  • Activiti 原生支持 Spring,可以很轻松地进行 Spring 集成,非常方便管理事务和解析表达式(Expression)


分离运行时与历史数据

  • Activiti 继承自 jBPM4,在表结构设计方面也遵循运行时与历史数据的分离

  • 这样的设计可以快速读取运行时数据,仅当需要查询历史数据时再从专门的历史数据表中读取.这种设计方式可以大幅提高数据的存取效率,尤其是当数据日积月累时依然能够快速反应


点击关注,第一时间了解华为云新鲜技术~

发布于: 3 小时前阅读数: 6
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
详解工作流框架Activiti的服务架构和组件