Activiti工作流框架学习一:概述

工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。

示例:
这里写图片描述

工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流逻辑进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。

工作流框架即用于处理工作流相关问题的框架。常见的工作流框架有:

  1. Activiti 5.13
  2. JBPM 4.4
  3. OSWorkflow

工作流框架:Activiti

Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。

这里写图片描述

工作流引擎

这是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。

BPMN2.0

业务流程建模与标注(Business Process Model and Notation,BPMN)
描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)

数据库

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。
第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
工作流框架底层需要有数据库支持,activiti5.13版本对应23张表,框架底层使用mybatis操作数据库。

1) ACT_RE_*: ‘RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。

2) ACT_RU_*: ‘RU’表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。
Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。

3) ACT_ID_*: ‘ID’表示identity。 这些表包含身份信息,比如用户,组等等。

4) ACT_HI_*: ‘HI’表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。

5) ACT_GE_*: 通用数据, 用于不同场景下。

资源库流程规则表
1) act_re_deployment——部署信息表
2) act_re_model————流程设计模型部署表
3) act_re_procdef———–流程定义数据表

运行时数据库表
1) act_ru_execution——–运行时流程执行实例表
2) act_ru_identitylink ——运行时流程人员表,主要存储任务节点与参与者的相关信息
3) act_ru_task—————运行时任务节点表
4) act_ru_variable———运行时流程变量数据表

历史数据库表
1) act_hi_actinst———–历史节点表
2) act_hi_attachment—–历史附件表
3) act_hi_comment——历史意见表
4) act_hi_identitylink—–历史流程人员表
5) act_hi_detail———–历史详情表,提供历史变量的查询
6) act_hi_procinst——–历史流程实例表
7) act_hi_taskinst——–历史任务实例表
8) act_hi_varinst———历史变量表

组织机构表
1) act_id_group————–用户组信息表
2) act_id_info —————用户扩展信息表
3) act_id_membership—–用户与用户组对应信息表
4) act_id_user—————用户信息表
注:这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足

通用数据表
1) act_ge_bytearray 二进制数据表
2) act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录

重要术语

流程定义(ProcessDefinition)

流程定义(ProcessDefinition)就是一个流程的步骤说明,比如我们接下来要说的这个流程,申请人王三发起提交申请,李四作为部门经理进行审批,审批完成后,此申请到达下一级总经理王五,进行审批。就这么整个流程说明其实就是流程定义,不过在Activiti中整个流程定义是以helloworld.bpmn与helloworld.png格式存在的。

流程实例(ProcessInstance )

流程实例(ProcessInstance)和上一篇文章中流程定义(ProcessDefinition)的关系,与类和实例对象的关系有点像
ProcessDefinition是整个流程步骤的说明而ProcessInstance就是指流程定义从开始到结束的那个最大的执行路线。

执行对象(Execution)

提到ProcessInstance同时又会出现另一个名词,那就是执行对象(Execution),Execution是按照ProcessDefinition的规则执行的当前的路线。
如果ProcessDefinition只有一个执行路线的话,那么Execution和ProcessInstance就是完全一样了。如果ProcessDefinition中有多个执行路线的话,Execution和ProcessInstance可能是同一个也可能不是同一个。
所以得出结论:一个流程中ProcessInstance有且只能有一个,而Execution可以存在多个。

任务(Task )

任务(Task)应该比较好理解,就是当流程执行到某步骤或某环节时生产的任务信息。

猜你喜欢

转载自blog.csdn.net/Code_shadow/article/details/80383449