https://blog.csdn.net/lxxiang1/article/details/82262109
http://hackday.cn/info/activiti-5.21/Activiti_manual_cn.htm#_%E7%AE%80%E4%BB%8B
https://doc.yonyoucloud.com/doc/activiti-5.x-user-guide/index.html
https://blog.csdn.net/zezezuiaiya/article/details/78121663
Activiti 是由 jBPM 的创建者 Tom Baeyens 离开 JBoss 之后建立的项目,构建在开发 jBPM 版本 1 到 4 时积累的多年经验的基础之上,旨在创建下一代的 BPM 解决方案。
Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。
Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台
,其核心是基于Java的超快速、超稳定的BPMN2.0 流程引擎
,强调流程服务的可嵌入性和可扩展性,同时更加强调面向业务人员。
Activiti 流程引擎重点关注在系统开发的易用性和轻量性上。每一项 BPM 业务功能, Activiti 流程引擎都以服务的形式提供给开发人员。通过使用这些服务,开发人员能够构建出功能丰富、轻便且高效的 BPM 应用程序。
1)数据持久化
Activiti的设计思想是简洁、快速。有过应用开发经验的开发人员都知道应用的瓶颈体现在和数据库交换数据的过程中,针对这一点Activiti选择了使MyBatis
,从而可以通过最优的SQL语句执行Command,仅凭如此就能让引擎在速度上保持最高的性能。
2)引擎service接口
Activiti 流程引擎重点关注在系统开发的易用性和轻量性上。每一项 BPM 业务功能 Activiti 流程引擎都以服务的形式提供给开发人员
。通过使用这些服务,开发人员能够构建出功能丰富、轻便且高效的 BPM 应用程序。
ctiviti.cfg.xml文件为核心配置文件,该配置文件集成在Spring的IOC容器当中,可以产生ProcessEngineConfiguration对象,这个对象就是流程引擎的配置对象,ProcessEngine对象则为流程引擎对象,该对象是工作流业务系统的核心,所有的业务操作都是由这个对象所派生出来的对象实现。
Activiti引擎提供了七大Service接口,均通过ProcessEngine获取,并且支持链式API编程风格。
流程设计器
原生支持Spring
分离运行时与历史数据
作为最核心的模块,提供针对BPMN 2.0规范的解析、执行、创建、管理(任务、流程实例)、查询历史记录并根据结果生成报表。
是模型设计器,其并非由Activiti公司所开发,而是由业界认可的Signavio公司赠送的(Signavio e原本是收费的产品,现在被免费授权给Activiti用户使用)。适用于业务人员把需求转换为规范流程定义。
功能和Activiti Modeler类似,同样提供了基于BPMN 2.0规范的可视化设计功能,但是目前还没有完全支持BPMN规范的定义。适用于开发人员,可以把业务需求人员用Signavio设计的流程定义(XML格式)导入到Designer中,从而让开发人员将其进一步加工成为可以运行的流程定义。
可以用来管理仓库、用户、组,启动流程、任务办理等。此组件使用REST风格API,提供一个基础的设计模型。如果业务简单,也可以直接使用无需开发。还可以作为后台管理员的流程、任务管理系统使用。
提供Restful风格的服务,允许客户端以JSON的方式与引擎的REST API交互,通用的协议具有跨平台、跨语言的特性。
工作流(Workflow)
,就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。
工作流管理系统(Workflow Management System, WfMS)
是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流规则进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。
工作流管理联盟(WfMC,Workflow Management Coalition)
给出的关于工作流管理系统的定义是:工作流管理系统是一个软件系统,它通过执行经过计算的流程定义去支持一批专门设定的业务流程。工作流管理系统被用来定义、管理、和执行工作流程。
工作流管理系统的目标
:管理工作的流程以确保工作在正确的时间被期望的人员所执行——在自动化进行的业务过程中插入人工的执行和干预。
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 .
ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。
BPMN :业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)
表名称 | 表含义 |
---|---|
act_evt_log | 事件处理日志表 |
act_ge_bytearray | 通用的流程定义和流程资源 |
act_ge_property | 系统相关属性 |
表名称 | 表含义 |
---|---|
act_hi_actinst | 历史的流程实例 |
act_hi_attachment | 历史的流程附件 |
act_hi_comment | 历史的说明性信息 |
act_hi_detail | 历史的流程运行中的细节信息 |
act_hi_identitylink | 历史的流程运行过程中用户关系 |
act_hi_procinst | 历史的流程实例 |
act_hi_taskinst | 历史的任务实例 |
act_hi_varinst | 历史的流程运行中的变量信息 |
表名称 | 表含义 |
---|---|
act_id_group | 身份信息-组信息 |
act_id_info | 身份信息-组信息 |
act_id_membership | 身份信息-用户和组关系的中间表 |
act_id_user | 身份信息-用户信息 |
表名称 | 表含义 |
---|---|
act_procdef_info | 死信任务 |
表名称 | 表含义 |
---|---|
act_re_deployment | 部署单元信息 |
act_re_model | 模型信息 |
act_re_procdef | 已部署的流程定义 |
表名称 | 表含义 |
---|---|
act_ru_deadletter_job | 执行失败任务表 |
act_ru_event_subscr | 运行时事件 |
act_ru_execution | 运行时流程执行实例 |
act_ru_identitylink | 运行时用户关系信息 |
act_ru_job | 运行时作业 |
act_ru_suspended_job | 运行时暂停任务 |
act_ru_task | 运行时任务 |
act_ru_timer_job | 运行时定时任务 |
act_ru_variable | 运行时变量表 |
开始和结束之间的所有步骤(或元素)称为任务
,任务可以是各种类型的。最常用的任务是UserTasks和ServiceTasks。
UserTasks
需要由用户手动执行,另一方面,ServiceTasks配置了一段代码,每当执行到达这段代码时,代码将被执行。
SequenceFlows
用来连接任务,我们可以通过它将源元素和目标元素连接起来定义一个SequenceFlows;同样,我们还可以在SequenceFlow上定义条件,这样能在流程中创建条件路径。
ProcessEngine
说明:
各个Service的作用:
·RepositoryService ·
管理流程定义
RuntimeService
· 执行管理,包括启动、推进、删除流程实例等操作
·TaskService
·任务管理
·HistoryService·
历史管理(执行完的数据的管理)
IdentityService
·组织机构管理
·FormService
· 一个可选服务,任务表单管理
ManagerService
ProcessDefinition
: 流程定义类。可以从这里获得资源文件等。
ProcessInstance
:代表流程定义的执行实例。请了一天的假,她就必须发出一个流程实例的申请。一个流程实例包括了所有的运行节点。我们可以利用这个对象来了解当前流程实例的进度等信息。流程实例就表示一个流程从开始到结束的最大的流程分支,即一个流程中流程实例只有一个。
Execution
:Activiti用这个对象去描述流程执行的每一个节点。在没有并发的情况下,Execution就是同ProcessInstance。流程按照流程定义的规则执行一次的过程,就可以表示执行对象Execution。
这个例子有一个特点:wire money(汇钱)和archive(存档)是并发执行的。 这个时候,总线路代表ProcessInstance,而分线路中每个活动代表Execution。
总结
:*一个流程中,执行对象可以存在多个,但是流程实例只能有一个
。
当流程按照规则只执行一次的时候,那么流程实例就是执行对象
。使用RepositoryService部署流程定义,addClasspathResource表示从类路径下加载资源文件,一次只能加载一个文件 。
这里使用RuntimeService启动流程实例 ,
这里使用TaskService完成任务的查询
**完成我的个人任务 **
这里使用TaskService完成任务的办理