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