摘要:通过这篇文章,可以对工作流有一个基本的认识,为后续工作流框架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是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度
  • Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于Java的超快速,超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌入性和可扩展性,同时更加强调面向业务人员
  • Activiti 流程引擎重点关注在系统开发的易用性和轻量性上.每一项BPM业务功能Activiti流程引擎都以服务的形式提供给开发人员.通过使用这些服务,开发人员能够构建出功能丰富,轻便且高效的BPM应用程序

Activiti服务结构

  • Activiti系统服务结构图

  • 核心类:
    • ProcessEngine: 流程引擎的抽象,可以通过此类获取需要的所有服务
  • 服务类:
    • XxxService: 通过ProcessEngine获取,Activiti将不同生命周期的服务封装在不同Service中,包括定义,部署,运行.通过服务类可获取相关生命周期中的服务信息
      • RepositoryService
        • Repository Service提供了对repository的存取服务
        • Activiti中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据(例如BPMN2.0XML文件,表单定义文件,流程定义图像文件等),这些文件都存储在Activiti内建的Repository中
      • RuntimeService
        • Runtime Service提供了启动流程,查询流程实例,设置获取流程实例变量等功能.此外它还提供了对流程部署,流程定义和流程实例的存取服务
      • TaskService
        • Task Service提供了对用户Task和Form相关的操作.它提供了运行时任务查询,领取,完成,删除以及变量设置等功能
      • HistoryService
        • History Service用于**获取正在运行或已经完成的流程实例的信息,**与Runtime Service中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化
      • FormService
        • 使用Form Service可以存取启动和完成任务所需的表单数据并且根据需要来渲染表单
        • Activiti中的流程和状态Task均可以关联业务相关的数据
      • IdentityService
        • Identity Service提供了对Activiti系统中的用户和组的管理功能
        • Activiti中内置了用户以及组管理的功能,必须使用这些用户和组的信息才能获取到相应的Task
      • ManagementService
        • Management Service提供了对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:
    • 最核心的模块
    • 提供针对BPMN 2.0规范的解析,执行,创建,管理(任务,流程实例),查询历史记录并根据结果生成报表
  • Activiti Modeler:
    • 模型设计器
    • 适用于业务人员把需求转换为规范流程定义
  • Activiti Designer:
    • 功能和Activiti Modeler类似,同样提供了基于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,在表结构设计方面也遵循运行时与历史数据的分离
  • 这样的设计可以快速读取运行时数据,仅当需要查询历史数据时再从专门的历史数据表中读取.这种设计方式可以大幅提高数据的存取效率,尤其是当数据日积月累时依然能够快速反应

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

详解工作流框架Activiti的服务架构和组件的更多相关文章

  1. 【入门】广电行业DNS、DHCP解决方案详解(三)——DNS部署架构及案

    [入门]广电行业DNS.DHCP解决方案详解(三)——DNS部署架构及案 DNS系统部署架构 宽带业务DNS架构 互动业务DNS架构 案例介绍 案例一 案例二 本篇我们将先介绍DNS系统部署架构体系, ...

  2. 详解Executor框架

    在Java中,使用线程来异步执行任务.Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源.同时,为每一个任务创建一个新线程来执行 ...

  3. 工作流框架Activiti

    最近在看一些项目设计方面的文章,涉及到了工作流技术,于是了解一下. 1.概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照 ...

  4. hadoop之yarn详解(框架进阶篇)

    前面在hadoop之yarn详解(基础架构篇)这篇文章提到了yarn的重要组件有ResourceManager,NodeManager,ApplicationMaster等,以及yarn调度作业的运行 ...

  5. [转载] 多图详解Spring框架的设计理念与设计模式

    转载自http://developer.51cto.com/art/201006/205212_all.htm Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框 ...

  6. JavaWeb配置详解(结合框架SpringMVC)

    详解 先说一说常识性的东西,我们的JavaWeb程序运行一开始走的是web.xml文件,这是我们的核心文件,可以说没有web.xml文件我们就无法运行项目,这个文件长什么样子,读者自己新建一个web项 ...

  7. JAVA Eclipse使用Maven构建web项目详解(SSM框架)

    tips: 启动项目后,welcome-file的链接即为测试用例 部署maven web项目 Eclipse使用Maven构建web项目详解 pom.xml添加webapp依赖: <depen ...

  8. Java高并发高性能分布式框架从无到有微服务架构设计

    微服务架构模式(Microservice Architect Pattern).近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注 微服务架构是一种架构模式,它提倡将单一应用程序划分成 ...

  9. SpringCloud微服务架构分布式组件如何共享session对象

    一.简单做一个背景说明1.为说明问题,本文简单微服务架构示例如下 2.组件说明分布式架构,每个组件都是集群或者主备.具体说明如下:zuul service:网关,API调用都走zuul service ...

随机推荐

  1. 梦开始的地方(Noip模拟3) 2021.5.24

    T1 景区路线规划(期望dp/记忆化搜索) 一看题目发现肯定是概率期望题,再仔细想想这三天做的题,就知道是个期望dp. 考试思路(错): 因为聪聪与可可的10分打法根深蒂固,导致在考试时想到了用深搜( ...

  2. 单片机I/O口推挽与开漏输出详解(力荐)

    推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止. 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电 ...

  3. MyBatis源码分析(六):Spring整合分析

    一.Mybatis-Spring源码结构 二.Myabtis交给Spring管理的组件 1. dataSource 数据源 配置一个数据源,只要是实现了javax.sql.DataSource接口就可 ...

  4. [CSP-S 2021] 廊桥分配 题解

    写篇题解来纪念我炸掉的CSP 唯一会做的题代码写挂了(痛苦面具 思路 我看到这道题第一眼想到的是线段树,感觉可以用线段树维护飞机入站到出战的这段时间,想了半天想不到代码怎么写. 国内机场与国外机场要分 ...

  5. .Net Core微服务——网关(1):ocelot集成及介绍

    网关是什么 简单来说,网关就是暴露给外部的请求入口.就和门卫一样,外面的人想要进来,必须要经过门卫.当然,网关并不一定是必须的,后端服务通过http也可以很好的向客户端提供服务.但是对于业务复杂.规模 ...

  6. 学好Python不加班系列之SCRAPY爬虫框架的使用

    scrapy是一个爬虫中封装好的一个明星框架.具有高性能的持久化存储,异步的数据下载,高性能的数据解析,分布式. 对于初学者来说还是需要有一定的基础作为铺垫的学习.我将从下方的思维导图中进行逐步的解析 ...

  7. LeetCode刷题 DFS+回溯

    一.DFS介绍 二.LeetCode 实战 LC 17. 电话号码的字母组合 解法思路 解题步骤 代码 LC 79. 单词搜索 解题思路 解题步骤 代码 LC 46. 全排列 解题思路一 解题步骤 代 ...

  8. cwRsync 实现两台服务器Windows Server 2012 R2间的文件同步(备份)

    sync下载链接:https://pan.baidu.com/s/1aZeGDA5bU9f1h6nxvVJsDw  提取码:jtv3 1.配置IP地址 Server端:192.167.1.2(自定义) ...

  9. Mac下Shell脚本使用学习笔记(二)

    参考文献 Shell 教程 MAC常用终端命令行 Mac下Shell脚本使用 (7)Shell echo命令: 命令格式:echo string ①显示普通字符串:echo "It is a ...

  10. Python基础(偏函数)

    import functools#functools.partial就是帮助我们创建一个偏函数的,functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一 ...