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