背景

Activiti 是一个开源架构的工作流引擎,基于 bpmn2.0 标准进行流程定义,其前身是 jBPM,Activiti 相对于 jBPM 更轻量,更易上手,且天然集成了 Spring。2010年 jBPM 创始人 Tom Baeyens 离开 JBoss,随之加入 Alfresco 后很快推出了新的基于 jBPM4 的开源工作流系统 Activiti5 :

附 Activiti 官方地址:

  • Activiti 官方主页:https://www.activiti.org/

  • Activiti github 代码:https://github.com/Activiti/Activiti

  • Activiti 官方文档:https://www.activiti.org/userguide/#_introduction

Activiti 使用

1)Activiti 官方 demo 使用

Activiti 官方提供了 demo 供初学者入门使用,使用流程如下(尽量参考官方文档):

Step 1:下载 activiti-6.0.0.zip,并解压,找到 activiti-admin.war、activiti-app.war、activiti-rest.war 所在目录

activiti-admin.war、activiti-app.war 和 activiti-rest.war 是 Activiti 官方提供的 demo 应用(详细使用可参考官方文档:https://www.activiti.org/userguide/):

  • activiti-admin.war:连接好 Activiti endpoint 后,可通过该模块查看流程定义、发起的流程实例、任务等

  • activiti-app.war:核心 Activiti demo,提供在线流程设计器、表单管理、应用管理、用户管理等功能

  • activiti-rest.war:提供 Restful 风格的服务

附 activiti-6.0.0.zip 下载地址:https://www.activiti.org/get-started

Step 2:将上述三个 war 包放到 tomact webapps 目录中,启动 tomcat

注意,tomcat 版本使用 Tomcat 9.0.0 以下,否则无法启动。

Step 3:activiti-admin 示例。访问 http://localhost:8080/activiti-admin,并账密(admin/admin)登录

activiti-admin 主要提供数据监控,访问时需要提前连接 Activiti endpoint,否则没有任何数据,这里配置了 activiti-app(主核心demo)的端口,即在 activiti-app demo 中操作的流程任务数据在这里都可以查看到。

Step 4:activiti-app 示例。访问 http://localhost:8080/activiti-app,并账密(admin/test)登录

activiti-app 是 Activiti 官方提供的核心 activiti demo,也可称为 Activiti UI,提供了在线流程设计器、任务管理和用户管理模块,运行时数据默认存储在 H2(也可修改配置来替换数据库),下图为示例页面:

Step 5:activiti-rest 示例。访问 http://127.0.0.1:8080/activiti-rest/docs/,并账密(kermit/kermit)登录

Activiti 包含一个连接到 Activiti engine 的 rest api,可以通过将 activiti-rest.war 文件部署到 servlet 容器(如Apache Tomcat)来安装该 API。默认情况下,Activiti engine 将连接到内存 H2 数据库(可以更改 WEB-INF/classes 文件夹中 db.properties 文件配置来修改数据库,Activiti 启动后会自动初始化 23 张数据表)。另外,可通过引入 rest api 依赖将 rest api 集成到项目中,不再详述。

  • 更多详细有关 Activiti rest api 说明参考:https://www.activiti.org/userguide/#_rest_api

2)Activiti 请假 demo 示例

以请假流程作为 Activiti 基本使用示例(流程示例同上述 acitiviti-app 应用流程文件示例),员工发起请假,然后项目经理审批,再HR审批,最后CEO审批,若其中任意一个人拒绝,员工则需要重新提交流程。

其中 demo 示例如下,完整源码参考:https://download.csdn.net/download/zhuqiuhui/87462382

3)Activiti 与 Spring Boot 集成

Activiti 与 Spring Boot 集成比较简单,只需要要引入以下依赖即可(不再示例),详细参考 Activiti 官方文档与 Spring 集成章节:https://www.activiti.org/userguide/#springintegration

<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter-basic</artifactId><version>${activiti.version}</version>
</dependency>

4)Activiti 与 jBPM 对比

Activiti 与 Spring 天然集成,同时有基于 Web 的 Activiti 流程设计器(详细参考上述官方 demo 中的 activiti-app.war 使用),另外,Activiti 在表结构设计上遵循运行时与历史数据的分离,可以快速读取运行时数据,仅当需要查询历史数据时再从专门的历史数据表中读取,这样大大的提高了数据的存取效率。

另外,相对于 jBPM,jBPM 与 jBoss 技术栈耦合太过紧密,国内社区不如 Activiti 活跃。

Activiti5 整体架构及相关核心类

Activiti5 整体架构

Activiti 工作流程如下:

  • Step 1:通过入口配置文件 activiti.cfg.xml 或者自定义 ProcessEngineConfiguration 实例,得到流程引擎配置

  • Step 2:由 ProcessEngineConfiguration实例得到 ProcessEngine 实例

  • Step 3:通过 ProcessEngine 实例得到 Activiti 提供所有接口服务

  • Step 4:执行流程引擎

使用示例:

ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration().....;
ProcessEngine processEngine = cfg.buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
//......

另外,Activiti 使用命令模式作为基础开发模式,流程引擎服务类(如TaskService等)中定义的各个方法都有对应用的命令对象(如开启流程命令:StartProcessInstanceCmd 等), 流程引擎服务类把各种请求委托成 xxCmd 交给 CommandExecutor 来执行,CommandExecutor 进一步交付给 CommandInterceptor 责任链来执行,xxCmd 来决定命令的接收者(参考 CommandContext),接收者执行后返回结果(参考下述 UML 图)。

Activiti5 核心类

1)EngineServices

该接口中定义了获取各种服务类实例对象的方法。

2)ProcessEngine 及默认实现类 ProcessEngineImpl

ProcessEngine 继承 EngineServices 接口,并增加了对流程引擎名称的获取以及关闭流程引擎的支持。ProcessEngineImpl 是 ProcessEngine 引擎的默认实现类,实际上是由 ProcessEngineConfigurationImpl 构造的,即 ProcessEngineImpl 调用 ProcessEngineConfigurationImpl 的方法获得服务。

3)ProcessEngineConfiguration 及默认实现 ProcessEngineConfigurationImpl

ProcessEngineConfiguration 是流程引擎配置类,ProcessEngineConfigurationImpl 继承 ProcessEngineConfiguration,负责创建一系列服务类实例对象、流程引擎实例对象以及ProcessEngineImpl 类实例对象,该类可以通过流程配置文件交给Spring容器管理或者使用编程方式动态构建。

常用的流程配置类如下:

  • StandaloneProcessEngineConfiguration:标准的流程引擎配置类

  • StandaloneInMemProcessEngineConfiguration:开发环境中自测使用,默认采用H2数据库存储数据。

  • .......

4)ProcessEngines

该类负责管理所有的流程引擎 ProcessEngine 集合,并负责流程引擎实例对象的注册、获取、注销等操作。

5)流程引擎服务类

RepositoryService

RepositoryService 是 Activiti 的资源管理类,提供流程定义和部署相关的存储服务。

RepositoryService repositoryService = processEngine.getRepositoryService();// 获取流程部署
Deployment deployment = repositoryService.createDeployment().addClasspathResource("MultiTask.bpmn").name("流程测试").category("").deploy();
// 获取流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
RuntimeService

RuntimeService 是 Activiti 的流程运行管理类,提供流程运行时相关的服务,如启动流程。

RuntimeService runtimeService = processEngine.getRuntimeService();// 启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess", "Key001", vars);
TaskService

TaskService 是 Activiti 的任务管理类,提供任务节点的操作接口(如complete、delete、delegate等)

TaskService taskService = processEngine.getTaskService();
// 获取任务列表
List<Task> taskList = taskService.createTaskQuery().taskAssignee("mary").orderByTaskCreateTime().desc().list();
HistoryService

HistoryService 是 Activiti 的历史管理类,示例:

List<HistoricActivityInstance> historicActivityInstances = processEngine.getHistoryService()// 创建历史活动实例查询.createHistoricActivityInstanceQuery()//.finished() // 查询已经完成的任务.orderByHistoricActivityInstanceEndTime().asc().list();
IdentityService

IdentityService 是 Activiti 的认证管理类,用于管理和查询用户、组之间的关系。

IdentityService identityService = processEngine.getIdentityService();
identityService.setAuthenticatedUserId("createUserId");
......

6)JavaDelegate

作为 Activiti 的 ServiceTask 的实现,必须实现 JavaDelegate 接口,但是不需要实现序列化接口,Activiti 会使用反射机制将类初始化,因此在实现 JavaDelegate 接口的时候需要提供一个无参数的构造器,否则会抛出异常。

流程引擎系列文章

• 流程引擎之发展史及对比总结:https://blog.csdn.net/zhuqiuhui/article/details/128986403

• 流程引擎之KIE项目简介:https://blog.csdn.net/zhuqiuhui/article/details/129035796

• 流程引擎之jBPM简介:https://blog.csdn.net/zhuqiuhui/article/details/129052162

• 流程引擎之Activiti简介:https://blog.csdn.net/zhuqiuhui/article/details/129107741

• 流程引擎之Camunda简介:https://blog.csdn.net/zhuqiuhui/article/details/129107897

• 流程引擎之Flowable简介:https://blog.csdn.net/zhuqiuhui/article/details/129109273

• 流程引擎之compileflow简介:https://blog.csdn.net/zhuqiuhui/article/details/129109391

流程引擎之Activiti简介相关推荐

  1. 流程引擎之Flowable简介

    背景 Flowable 是一个流行的轻量级的采用 Java 开发的业务流程引擎,通过 Flowable 流程引擎,我们可以部署遵循 BPMN2.0 协议的流程定义(一般为XML文件)文件,并能创建流程 ...

  2. 流程引擎之compileflow简介

    背景 compileflow 是一个非常轻量.高性能.可集成.可扩展的流程引擎.compileflow Process 引擎是淘宝工作流 TBBPM 引擎之一,是专注于纯内存执行,无状态的流程引擎,通 ...

  3. 流程引擎之Camunda简介

    背景 Camunda 是支持 BPMN(工作流和流程自动化).CMMN(案例管理) 和 DMN(业务决策管理) java 框架.Camunda 基于Activiti5 保留了 PVM,其开发团队也是从 ...

  4. 流程引擎之KIE项目简介

    一.KIE 工程是什么 近期学习流程 jBPM 引擎时,发现 jBPM 是基于 jBoss 公司的 KIE 工程建设的,所以在学习 jBPM 之前需要弄明白 KIE 工程是什么.KIE 是" ...

  5. 流程引擎之发展史及对比总结

    流程引擎渊源 市场上比较有名的开源流程引擎有 jBPM.Activiti.Camunda.Flowable 和 Compileflow.其中 jBPM.Activiti.Flowable.camund ...

  6. 流程引擎课堂(一)| 关于开源流程引擎Activiti 的需要注意的几点

    编者按:流程引擎在各个行业都有应用,其重要性不言而喻,充分了解流程引擎是一项重要课题.本文详细介绍了开源流程引擎Activiti 的优点与局限性,为流程引擎的选型提出了参考性建议. 基础概念 首先,我 ...

  7. Spring Boot 整合流程引擎 Flowable,so easy

    为啥想写 flowable 呢?原因很简单,因为最近在录的 tienchin 项目视频会用到,先写一篇文章和大家打打预防针,后面视频再细讲. 流程引擎,也算是一个比较常见的工具了,我们在日常的很多开发 ...

  8. 流程引擎activiti

    1.Activiti简介 2.入门程序 3.使用详解 4.springboot2.0整合工作流activiti6.0以及与业务集成时的一些坑 5.删除异常的流程 6.系列文章 7.提交.审批.撤销 8 ...

  9. Jflow;JBoss JBPM ;Activiti以及FixFlow ;SWF五大流程引擎的对比

    几种工作流引擎的简介: jBPM是公开源代码项目,jBPM在2004年10月18日,发布了2.0版本,并在同一天加入了JBoss,成为了JBoss企业中间件平台的一个组成部分,它的名称也改成JBoss ...

最新文章

  1. Moodle的qq登录版块的使用
  2. mysql 密码字段加密_phpmyadmin密码字段加密方法
  3. javaweb学习总结(四十五)——监听器(Listener)学习二
  4. jmeter上传文件搞了一天,才搞定,没高人帮忙效率就是低,赶紧记下来,以备后用...
  5. 1.7 编程基础之字符串 16 忽略大小写的字符串比较 python
  6. python调用cmd执行命令_详解python调用cmd命令三种方法
  7. EventLoop,TcpClient,TcpServer 中的生命周期
  8. RandomForest随机森林模型训练
  9. linux编译gdal geos,使用nmake编译GDAL+GEOS(傻瓜教程)
  10. Macbook Pro M1(macOS 12.0)读取NTFS移动硬盘方法
  11. 东财《国际贸易法》综合作业
  12. Create user中采用externally操作系统认证方式详解
  13. OpenDDS制作编译idl文件之一
  14. T1005: 地球人口承载力估计(信息学一本通C++)
  15. 2022-2028全球军用弩行业调研及趋势分析报告
  16. PostgreSQL 源码解读(31)- 查询语句#16(查询优化-表达式预处理#1)
  17. 日历控件CalendarView
  18. 计算机ncre教材,ncre教材
  19. 英语思维导图大全 代词(四)
  20. 田忌赛马-贪心算法实现

热门文章

  1. 转贴:放心走吧,谷歌中国——谷歌员工所写博客
  2. 机械中计算机的应用研究,机械设计制造及其自动化中计算机技术的应用研究
  3. 织梦dedecms响应式精密机械模具公司网站模板(自适应手机移动端)
  4. leek()函数使用
  5. 【洛谷P1462】通往奥格瑞玛的道路
  6. android最新版本9.1,微信9.1.0版本
  7. 计算机操作系统虚拟内存管理
  8. android 分区 f2fs,一加5 切换data分区为f2fs格式,随机读写暴涨8倍!30秒开机,APP秒开!...
  9. 用python画雪人-萌系新潮玩,唱多多小雪人麦克风天猫独家首发
  10. uniapp 拉起微信客服功能