activiti基础介绍

1、工作流基本概念

工作流:业务过程的部分或整体在计算机应用环境下的自动化,是对工作流程及其各操作步骤之间业务规则的抽象、概括描述”,它主要解决的是“使在多个参与者之间按照一种提前定义好的规则流程来传递与执行文档、信息或任务的过程,让这个过程可以自动进行或者部分自动执行,从而完成预期的业务目标”。
工作流管理系统:工作流的定义和管理,按照在系统中预定义好的工作流规则进行工作流实例的执行。
工作流管理系统的目标:管理工作流程以确保工作在正确的时间被期望的人员执行–在自动化进行的业务过程中插入人工的执行和干预。

2、工作流生命周期

定义
业务人员收集业务需求并转化为流程定义,交与开发人员加工转化为计算机可以识别的流程定义
发布
开发人员打包各种资源,发布流程定义,在具体的流程中包括流程定义文件(bpmn20.xml结尾)、自定义表单、任务监听类
执行
具体的流程引擎按照实现定义的流程处理路线以任务驱动的方式驱动执行业务流程
监控
业务人员在办理任务的时候收集每个任务的执行结果,根据结果作出处理。如请假申请后领导批准即可休假
优化
根据流程执行结果作出改进优化

3、activiti是什么

Activiti是一个针对企业用户、开发人员、系统管理员的轻量级工作流业务管理平台,其核心是使用Java开发的快速、稳定的BPMN2.0流程引擎。Activiti是在ApacheV2许可下发布的,可以运行在任何类型的java程序中,例如服务器、集群、云服务等。Activiti可以完美的与Spring集成。同时,基于简约思路的设计使Activiti非常轻量级。
activiti的特点

4、activiti优点

  • 数据持久化,底层使用MyBatis
  • 引擎Service接口
  • 流程设计器
  • 原生支持Spring
  • 分离运行时与历史数据

5、引擎Service接口

RepositoryService
流程仓库Service,用于管理流程仓库,例如:部署、删除、读取流程资源
Activiti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件,表单定义文件,流程定义图像文件等 ),这些文件都存储在 Activiti 内建的 Repository 中。RepositoryService 提供了对 repository 的存取服务。
IdentityService:
身份Service,可以管理和查询用户、组之间的关系
RuntimeService:
运行时Service,可以处理所有正在运行状态的流程实例、任务等
在 Activiti 中,每当一个流程定义被启动一次之后,都会生成一个相应的流程对象实例。Runtime Service 提供了启动流程、查询流程实例、设置获取流程实例变量等功能。此外它还提供了对流程部署,流程定义和流程实例的存取服务。
TaskService:
任务Service,用于管理、查询任务,例如:签收、办理、指派等
在 Activiti 中业务流程定义中的每一个执行节点被称为一个 Task,对流程中的数据存取,状态变更等操作均需要在 Task 中完成。Task Service 提供了对用户 Task 和 Form 相关的操作。它提供了运行时任务查询、领取、完成、删除以及变量设置等功能。
FormService:
表单Service,用户读取和流程、任务相关的表单数据
Activiti 中的流程和状态 Task 均可以关联业务相关的数据。通过使用 Form Service 可以存取启动和完成任务所需的表单数据并且根据需要来渲染表单。
HistoryService:
历史Service,可以查询所有历史数据,例如:流程实例、任务、活动、变量、附件等。
History Service 用于获取正在运行或已经完成的流程实例的信息,与 Runtime Service 中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化。
ManagementService:
引擎管理Service,和具体业务无关,主要是可以查询引擎配置、数据库、作业等
Management Service 提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。

6、关键对象

Deployment:流程部署对象,部署一个流程时创建。
ProcessDefinitions:流程定义,部署成功后自动创建。
ProcessInstances:流程实例,启动流程时创建。
Task:任务,在Activiti中的Task仅指有角色参与的任务,即定义中的UserTask。
Execution:执行计划,流程实例和流程执行中的所有节点都是Execution,如UserTask、ServiceTask等。

7、核心表结构

7.1数据表的命名规则

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_RE_*: ‘RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: ‘RU’表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: ‘ID’表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: ‘HI’表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。

7.2 具体表
通用数据表:

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_RE_DEPLOYMENT: 存储工作流部署信息,比如工作流名称等
ACT_RE_MODEL: 存储流程设计模型信息
ACT_RE_PROCDEF: 存储流程定义数据

运行时数据表:

ACT_RU_EVENT_SUBSCR: 如果流程到达某个事件节点,Activiti会往该表中加入事件描述数据,这些事件描述数据将会决定流程事件的触发。
ACT_RU_EXECUTION: 存储运行时流程执行实例信息
ACT_RU_IDENTITYLINK: 存储运行时流程人员操作信息,主要存储任务节点与参与者的相关信息
ACT_RU_JOB: 存储运行时定时任务信息
ACT_RU_TASK: 存储运行时任务节点信息
ACT_RU_VARIABLE: 存储运行时流程变量信息

其他:

CT_EVT_LOG: 存储事件日志信息
ACT_PROCDEF_INFO: 存储流程定义的动态变更信息

8、任务

8.1 用户任务
用户任务需要人来参与,因为它必须人为触发(完成任务动作)。用户任务可以定义任务的名称(例如:“领导审批”)、优先级、到期日和任务代理人(可以是人、组或者两者的组合)。

8.2 脚本任务
脚本任务可以运行引擎依赖的语言之外的脚本语言,例如Activiti支持的Groovy、Javascript、Juel。值得注意的是,在脚本任务的代码符合JSR-223(Java 平台脚本,scripting for the java plateform)规范。

8.3 java Service任务
java Service不属于BPMN 2.0规范,而是Activiti扩展的专门应用于java语言的serviceTask。java Service 任务允许定义一个实现了指定接口的Java类,或者执行一个表达式;还可以像脚本任务一样把结果保存到一个变量中。

8.4 Web Service任务
通过Web Service任务 可以调用外部的 Web Service 资源,完成调用只需要一些必须的配置就可以,并且支持标准的Web Service 和 REST 风格的 Service。

8.5 业务规则任务
在企业应用中一般都会使用可维护的规则库来管理负载多变的业务规则,可以把业务逻辑和规则分开维护,一点规则有变动,只需要更改预设规则即可。业务规则任务可以根据流程变量的值处理预设的业务规则。
Activiti对对业务规则提供了很好的支持,目前支持比较流行的JBoss规则引擎—Drools。只需把还有业务规则任务的流程文件和规则引擎文件“.drl”一同打包部署到系统中,同时把Drools的jar包添加到classpath即可实现Activiti驱动规则引擎。

8.6 邮件任务
邮件任务可以通过Activiti发送邮件,其中的邮件信息通过变量方式传递。邮件任务不属于BPMN2.0规则而是和 java Service 任务类似,由Activiti扩展而来专门用于处理邮件任务。邮件任务是在 serviceTask的基础上由Activiti添加扩展属性 activiti:type=”mail”实现的。

8.7 Canmel任务
Canmel是由 Apache 开源组织开发的基于Apache 2 协议的企业系统整合框架,是EIP(Enterprise Integration Patterns,企业集成模式)的实现,是用来解决消息路由的框架。类似的产品还有 Mule,Spring Intergretion等。

8.8 Mule任务
Mule任务是由 MuleSoft 开发的一款轻量级开源 ESB (Enterprise System Bus,企业系统总线)产品,和Camel任务功能类似,但是它们是基于不同的标准实现的,Camel任务是基于传统EIP实现的。在使用方式上Camel任务使用链式编程配置路由,而 Mule 使用非侵入(或者很少侵入)方式,通过可视化的IDE工具使用流程图模式配置路由。

8.9 手动任务
手动任务是比较特殊的任务之一,它不做任何事情,仅用来定义 BPM 不能完成的任务,需要人工参与建模,流程引擎无需关心如何处理它,因为根本不需要处理,所以 Activiti 把手动任务当做一个空任务来处理,当到达此任务时有引擎自动完成并转向下一个任务。

8.10 接收任务
接收任务是一个功能简单且单一的任务,在任务创建之后开始等待消息的到来,直到被触发才会完成任务。在Activiti实际上把接收任务作为一个java类型的接收任务,仅能通过RuntimeService接口的singal()方法发送信号(signal)触发接收任务。原理类似于线程的等待和恢复执行,只不过线程是在内存中操作,而接收任务的状态保存在数据库中,在调用 Activiti 的 API触发流程的接收任务后,引擎把当前流程由等待状态恢复为可执行状态。

8.11 Shell任务
Shell任务允许在流程运行过程中执行本地操作系统中的脚本、命令、是 Activiti 基于 serviceTask 扩展的一种任务(activiti:type=”shell”)。

8.12 多实例
多实例允许业务流程中某一个任务甚至子流程可以重复执行多次,在实际应用中一个申请由多人审批是多实例的典型应用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值