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中每⼀个不同版本的业务流程的定义都需要使⽤⼀些定义⽂件,部署⽂件和⽀持数据(例如BPMN
2.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 系统的⽇常维护
核⼼业务对象:
ine.ity包下的类,包括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配置⽂件
l: Activiti核⼼配置⽂件,配置流程引擎创建⼯具的基本参数和数据库连接池参数
定义数据库配置参数
配置连接池参数
Activiti特点
数据持久化
Activiti的设计思想是简洁,快速
瓶颈体现在和数据库交换数据的过程中,针对这⼀点Activiti选择了使MyBatis,从⽽可以通过最优的SQL语句执⾏Command,仅凭如此就能让引擎在速度上保持最⾼的性能
引擎service接⼝
Activiti流程引擎重点关注在系统开发的易⽤性和轻量性上,每⼀项BPM业务功能Activiti流程引擎都以服务的形式提供给开发⼈员,通过使⽤这些服务,开发⼈员能够构建出功能丰富,轻便且⾼效的BPM应⽤程序
l⽂件为核⼼配置⽂件,该配置⽂件集成在Spring的IOC容器当中,可以产⽣ProcessEngineConfiguration对象,这个对象就是流程引擎的配置对象
ProcessEngine对象为流程引擎对象,该对象是⼯作流业务系统的核⼼,所有的业务操作都是由这个对象所派⽣出来的对象实现
Activiti引擎提供了七⼤Service接⼝,均通过ProcessEngine获取,并且⽀持链式API编程风格
流程设计器
基于Web的Activiti Modeler流程设计器
IDEA的actiBPM插件
原⽣⽀持Spring
Activiti原⽣⽀持Spring,可以很轻松地进⾏Spring集成,⾮常⽅便管理事务和解析表达式(Expression)
分离运⾏时与历史数据
Activiti继承⾃jBPM4,在表结构设计⽅⾯也遵循运⾏时与历史数据的分离
spring启动流程面试回答这样的设计可以快速读取运⾏时数据,仅当需要查询历史数据时再从专门的历史数据表中读取.这种设计⽅式可以⼤幅提⾼数据的存取效率,尤其是当数据⽇积⽉累时依然能够快速反应

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。