工作流

工作流简介

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