最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述详解工作流框架Activiti的服务架构和组件相关的知识,希望能为你提供帮助。
摘要:通过这篇文章,可以对工作流有一个基本的认识,为后续工作流框架Activiti的学习打下坚实的基础。本文分享自华为云社区??《BPMN工作流的基本概念!详解工作流框架Activiti的服务架构和组件》??,作者: 攻城狮Chova 。
工作流工作流简介
- 工作流(Workflow): 工作流就是通过计算机技术对业务流程进行自动化管理。实现多个参与者按照预定的流程去自动执行业务流程。
主要解决的是: 使在多个参与者之间按照某种预定义的规则自动进行传递文档,信息或任务的过程.从而实现某个预期的业务目标,或者促使此目标的实现
- 工作流管理系统的目标:
在自动化进行的业务过程中插入人工的执行和干预
- 工作流框架:
工作流框架底层需要有数据库提供支持
工作流术语
工作流引擎
- ProcessEngine对象: 这是Activiti工作的核心.负责生成流程运行时的各种实例及数据,监控和管理流程的运行
- 业务流程管理:
常见商业管理教育如EMBA,MBA等均将BPM包含在内
BPMN
- 业务流程建模与标注:
讨论BPMN的各种的用途:包括以何种精度来影响一个流程图中的模型
BPMN作为一个标准的价值
BPMN未来发展的远景
流对象
一个业务流程图有三个流对象的核心元素
- 事件
事件影响流程的流动.一般有一个原因(触发器)或一个影响(结果)
基于它们对流程的影响,有三种事件:开始事件,中间事件,终止事件
- 活动
- 条件
可以作为选择,包括路径的分支与合并
内部的标记会给出控制流的类型
Activiti开源工作流框架Activiti简介
- Activiti是一个开源的工作流引擎,它实现了BPMN2.0规范,可以发布设计好的流程定义,并通过api进行流程调度
- Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于java的超快速,超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌入性和可扩展性,同时更加强调面向业务人员
- Activiti 流程引擎重点关注在系统开发的易用性和轻量性上.每一项BPM业务功能Activiti流程引擎都以服务的形式提供给开发人员.通过使用这些服务,开发人员能够构建出功能丰富,轻便且高效的BPM应用程序
Activiti系统服务结构图
- 核心类:
- 服务类:
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 系统的日常维护
- 核心业务对象:
根据不同职责实现相应接口的方法(如需要持久化则继承PersistentObject接口),与传统的实体类不同
Activiti组件
- Activiti上下文组件Context: 用来保存生命周期比较长,全局性的信息,类似Application.主要包括如下三类:
ProcessEngineConfigurationImpl: 流程引擎相关配置信息-整个引擎全局的配置信息.如数据源DataSource等.该对象为单例,在流程引擎创建的时候初始化
ExecutionContext: 持有ExecutionEntity对象
- 持久化组件:
在流程引擎创建时初始化,顶层接口Session,SessionFactory
Session有两个实现类:
DbSqlSession: 负责sql表达式的执行
AbstractManager: 负责对象的持久化操作
SessionFactory有两个实现类:
DbSqlSessionFactory: 负责DbSqlSession相关操作
GenericManagerFactory: 负责AbstractManager相关操作
- Event-Listener组件:
监听的事件类型:
TaskListener
JavaDelegate
Expression
ExecutionListener
ProcessEngineConfigurationImpl持有DelegateInterceptor的某个实例,方便调用handleInvocation
- Cache组件
Activiti基于List和Map来做缓存:如查询时先查缓存,没有则直接查询并放入缓存
- 异步执行组件
【详解工作流框架Activiti的服务架构和组件】JobAcquisitionThread
BlockingQueue
ThreadPoolExecutor
方法ProcessEngines在引擎启动时调用JobExecutor.start,JobAcquisitionThread 线程即开始工作,其run方法不断循环执行AcquiredJobs中的job,执行一次后线程等待一定时间直到超时或者JobExecutor.jobWasAdded方法,因为有新任务而被调用。
流程虚拟机PVM
- 流程虚拟机API暴露了流程虚拟机的POJO核心,流程虚拟机API描述了一个工作流流程必备的组件,这些组件包括:
PvmProcessInstance: 流程实例,用户发起的某个PvmProcessDefinition的一个实例.动态含义
PvmActivity: 流程中的一个节点
PvmTransition: 衔接各个节点之间的路径,形象点说就是图中各个节点之间的连接线
PvmEvent: 流程执行过程中触发的事件
Activiti架构
- Activiti Engine:
提供针对BPMN2.0规范的解析,执行,创建,管理(任务,流程实例),查询历史记录并根据结果生成报表
- Activiti Modeler:
适用于业务人员把需求转换为规范流程定义
- Activiti Designer:
可以把业务需求人员用Signavio设计的流程定义(XML格式)导入到Designer中,从而让开发人员将其进一步加工成为可以运行的流程定义
- Activiti Explorer:
此组件使用REST风格API,提供一个基础的设计模型.如果业务简单,也可以直接使用无需开发.还可以作为后台管理员的流程、任务管理系统使用
- Activiti REST:
允许客户端以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,仅凭如此就能让引擎在速度上保持最高的性能
- Activiti流程引擎重点关注在系统开发的易用性和轻量性上,每一项BPM业务功能Activiti流程引擎都以服务的形式提供给开发人员,通过使用这些服务,开发人员能够构建出功能丰富,轻便且高效的BPM应用程序
- activiti.cfg.xml文件为核心配置文件,该配置文件集成在Spring的IOC容器当中,可以产生ProcessEngineConfiguration对象,这个对象就是流程引擎的配置对象
- ProcessEngine对象为流程引擎对象,该对象是工作流业务系统的核心,所有的业务操作都是由这个对象所派生出来的对象实现
- Activiti引擎提供了七大Service接口,均通过ProcessEngine获取,并且支持链式API编程风格
- 基于Web的Activiti Modeler流程设计器
- IDEA的actiBPM插件
- Activiti原生支持Spring,可以很轻松地进行Spring集成,非常方便管理事务和解析表达式(Expression)
- Activiti继承自jBPM4,在表结构设计方面也遵循运行时与历史数据的分离
- 这样的设计可以快速读取运行时数据,仅当需要查询历史数据时再从专门的历史数据表中读取.这种设计方式可以大幅提高数据的存取效率,尤其是当数据日积月累时依然能够快速反应
推荐阅读
- 准时下班系列!Excel合集之第1集—填充不连续单元格
- 定制你的Neo4j生产集群部署
- Redis分布式锁解锁案例讲解
- 腾讯云联网环境下搭建kubernetes集群
- dart系列之:数学什么的就是小意思,看我dart如何玩转它
- k8s.1.22.4 部署metricserver
- Spring认证中国教育管理中心-Spring Data Redis框架教程六
- 6000字加图文 | 抓包带你深入了解网关到底起什么样的作用(不同网段通信的过程详解)
- Unity实战篇 | 接入 声网SDK 实现 视频通话——自己动手做一个 视频通话