乐趣区

关于工作流:BPMN工作流的基本概念详解工作流框架Activiti

工作流

工作流简介

  • 工作流(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, 在表结构设计方面也遵循运行时与历史数据的拆散
  • 这样的设计能够疾速读取运行时数据, 仅当须要查问历史数据时再从专门的历史数据表中读取. 这种设计形式能够大幅提高数据的存取效率, 尤其是当数据与日俱增时仍然可能快速反应
退出移动版