Activiti工作流知识点图表总结

       Acitivi是比较早的工作流引擎,后来居上者如Flowable或者Camunda,功能以及一些特性做了一些增强,这两个都是从Activiti的某个版本分离出来,独自发展。Flowable是由Activiti的主要开发者在离开Alfresco公司后创建的。Flowable项目是在Activiti的基础上发展起来的,它继承了Activiti的许多核心特性,并引入了新的特性和改进。Camunda是从Activiti的一个分支发展而来的,它保留了Activiti的许多概念和模型,同时引入了自己的一套特性,例如对CMMN(Case Management Model and Notation)的支持。

     不过提到Activiti,也避不开jBPM,jBPM是Activiti的前身之一,Activiti的一些核心理念和设计哲学受到了jBPM的影响。尽管jBPM和Activiti后来各自独立发展,但Activiti在某些方面仍然保留了jBPM的痕迹。

     之前有两份工作中分别用到了Activiti和Flowable,Camunda还没在项目实战中用过,对Camunda的了解和学习主要来自于在广州图书馆无意中看到了一本关于Camunda的技术书籍,目前市面上也主要有Activiti和Camunda的技术书籍,Flowable相关的书籍,我在当当网和广州图书馆检索,都没有相关结果,我当时学习Activiti也是主要参考的国内的一本蓝皮的Activiti的书籍,并配有相关视频课程和源码,Flowable学习是因为有了Activiti的基础,因为Flowable和Activit有太多相同的地方了,学习起来其实很快,只需要重点看一些差异的部分就差不多了,而且国内有一个中文的翻译教程不错:Flowable BPMN用户手册

    开始总结Activiti知识

目录

1. Activiti 架构

2.BPMN2.0支持 

3. 流程定义与部署

4.执行流与任务管理

5.表单集成

6.事件与异常处理

7.业务规则引擎

8. 数据关联

 9. 服务任务与脚本任务

10. 排他网关与并行网关

11. 用户与组管理

 12.权限与安全

13. 历史数据管理

14.外部系统集成

15.API 接口

16.数据库与持久化


1. Activiti 架构
组件 描述
Engine 核心运行时环境,负责流程实例的创建、执行和管理。
Repository 存储BPMN 2.0 XML流程定义的地方。
RuntimeService 提供API来启动流程实例,查询流程实例和执行对象。
TaskService 提供API来管理用户任务,如创建、查询、完成和删除。
IdentityService 管理用户和组,以及它们之间的关系。
HistoryService 提供API来查询历史数据,包括历史流程实例和变量。
ManagementService 提供API来管理引擎的内部,如表和批次操作。
Form Engine 表单渲染和管理。
Job Executor 异步执行器,用于处理异步任务,如发送邮件或调用外部系统。

示例:附上mermaid(美人鱼)图及图代码,将mermaid图代码复制到draw.io工具中可以绘制出来

graph LR
    A[Engine] --> B[Repository]
    A --> C[RuntimeService]
    A --> D[TaskService]
    A --> E[IdentityService]
    A --> F[HistoryService]
    A --> G[ManagementService]
    A --> H[Form Engine]
    A --> I[Job Executor]

2.BPMN2.0支持 

BPMN(Business Process Model and Notation)2.0是一种业务流程建模的标准,它提供了一个图形化的表示方法,用于描述业务流程。Activiti完全支持BPMN 2.0规范,以下是BPMN 2.0中一些关键元素的总结:

BPMN 2.0 元素 描述
Start Event 流程开始的事件。
End Event 流程结束的事件。
Task 需要执行的工作项。
Gateway 用于控制流程分支和合并的逻辑结构。
Sequence Flow 表示元素之间流转的箭头。
User Task 需要人工参与的任务。
Service Task 调用外部服务或业务逻辑的任务。
Script Task 执行脚本代码的任务。
Exclusive Gateway 排他网关,基于条件分流。
Parallel Gateway 并行网关,用于创建并行路径。
Sub-Process 一个可重用的子流程。
Call Activity 调用另一个流程定义的活动。
Boundary Event 附加在流程元素上的事件,用于中断或触发特定的行为。
Intermediate Catch Event 中间捕获事件,用于捕获在流程执行中发生的事件。
Intermediate Throw Event 中间抛出事件,用于在流程执行中抛出事件。

示例:

graph TD
    A[Start Event] --> B[User Task]
    B --> C[Exclusive Gateway]
    C --> D[Task A]
    C --> E[Task B]
    D --> F[End Event]
    E --> F

 这是一个简单的流程,开始于一个开始事件,然后通过一个排他网关分流到两个任务中的一个,最后以结束事件结束。

3. 流程定义与部署

在Activiti中,流程定义是业务流程的模型,通常通过BPMN 2.0 XML文件来表示。部署是将流程定义添加到Activiti引擎中的过程,以下是流程定义与部署的关键概念:

概念 描述
Process Model BPMN 2.0 XML文件,定义了流程的结构和行为。
Deployment 将Process Model添加到Activiti引擎的过程。
Process Definition 部署后,流程模型在Activiti中的表示。
Process Instance 流程定义的运行实例。
Diagram Generation 从BPMN XML生成流程图。
Resource 可以部署到Activiti的资源,如BPMN文件、表单文件等。

 说明:首先创建了一个BPMN XML文件作为流程模型,然后通过部署将其添加到Activiti引擎中,从而创建了流程定义。流程定义可以用于启动流程实例。同时,BPMN XML文件也可以用于生成流程图,并且作为资源被部署。

4.执行流与任务管理

执行流是Activiti中流程实例的执行路径,而任务管理涉及到用户任务的创建、分配、执行和完成。以下是执行流与任务管理的关键概念:

概念 描述
Execution Flow 表示流程实例中的执行路径,包括顺序流和条件流。
Execution 流程实例中的一个执行实体,可以是活动、网关或事件。
Task 需要用户交互的活动,如审批、填写表单等。
Task Instance 任务在流程实例中的一个实例。
Task Assignment 将任务分配给特定的用户或组。
Task Completion 用户完成任务,如审批通过或拒绝。
Task Form 与任务关联的表单,用于收集用户输入。
Task Listener 任务事件的监听器,可以在任务的特定事件时执行自定义逻辑。

示例:

graph LR
    A[Process Instance] --> B[Execution Flow]
    B --> C[Execution]
    C --> D[Task]
    D --> E[Task Instance]
    E --> F[Task Assignment]
    E --> G[Task Form]
    E --> H[Task Listener]
    F --> I[User/Group]
    H --> J[Custom Logic]

 这个示例中,流程实例产生了执行流,执行流由执行实体组成,这些实体可以是任务。任务在流程实例中创建了任务实例,任务实例可以被分配给用户或组,并且与任务表单和监听器相关联

5.表单集成

在Activiti中,表单集成是流程中收集用户输入的重要部分。表单可以是启动流程时填写的启动表单,也可以是流程中的任务表单。以下是表单集成的关键概念:

概念 描述
Start Form 启动流程实例时用户需要填写的表单。
Task Form 与特定用户任务相关联的表单,用于在执行任务时收集数据。
Form Field 表单中的输入字段,如文本框、下拉列表等。
Form Rendering 表单的呈现方式,可以是HTML、PDF或其他格式。
Form Submission 用户填写完表单后提交数据的动作。
Form Data Binding 表单数据与流程变量的绑定。
External Form 外部表单系统,如Web表单,与Activiti集成。

示例:

graph LR
    A[Process Instance] --> B[Start Form]
    A --> C[Task]
    C --> D[Task Form]
    B --> E[Form Field]
    D --> E
    E --> F[Form Data Binding]
    B --> G[Form Submission]
    D --> G
    D --> H[Form Rendering]
    H --> I[HTML/PDF]
    J[External Form System] --> K[Integration]
    K --> A

 

这个示例中,流程实例可能包括一个启动表单和一个或多个任务表单。表单字段用于收集用户输入,并通过数据绑定与流程变量关联。用户填写并提交表单后,表单数据被用于流程执行。此外,还可以将外部表单系统与Activiti集成。

6.事件与异常处理

在Activiti中,事件处理是流程设计中的一个重要组成部分,用于响应流程执行中的特定情况。以下是事件与异常处理的关键概念:

概念 描述
Start Event 定义流程开始的事件,可以是无事件、消息、定时器等。
End Event 定义流程结束的事件,可以是无事件、消息、错误、信号等。
Intermediate Event 中间事件,可以附加到活动上,用于中断或捕捉特定的事件。
Boundary Event 附加在活动边界上的事件,用于中断活动或触发特定行为。
Signal 在流程中发送和接收的信号,用于同步不同的流程实例。
Message 用于在流程之间或外部系统集成时交换信息的消息。
Error Event 用于处理错误情况的事件,可以是中间事件或边界事件。
Escalation 异常情况下的升级处理,如任务升级给更高级别的用户。
Compensation 对已经完成的活动进行补偿或撤销的操作。

示例:

graph LR
    A[Process Instance] --> B[Start Event]
    A --> C[User Task]
    C --> D[End Event]
    C --> E[Boundary Event]
    C --> F[Intermediate Event]
    E --> G[Compensation]
    F --> H[Signal]
    H --> I[Signal Catch]
    B -.-> J[Message Start]
    D -.-> K[Message End]
    E -.-> L[Error End]
    C -.-> M[Escalation]

 

 这个示例中,流程实例从开始事件启动,可能包括消息开始事件或定时器开始事件。用户任务可以有边界事件附加,用于处理异常情况,如错误或信号中断。中间事件可以用于捕捉信号或抛出消息。结束事件可以是消息结束事件或错误结束事件。此外,还有补偿和升级机制来处理异常。

7.业务规则引擎

业务规则引擎(Business Rule Engine, BRE)是Activiti中的一个组件,用于将业务逻辑从流程逻辑中分离出来,使业务规则可以独立于流程模型进行管理和维护。以下是业务规则引擎的关键概念:

概念 描述
Business Rules 定义业务决策的逻辑,可以是简单的或复杂的。
Rule Engine 用于执行业务规则的引擎。
Drools Activiti支持的业务规则引擎之一,用于编写和执行Drools规则。
Rule Task BPMN中的一个任务类型,用于执行业务规则。
Decision Table 用于以表格形式定义业务规则的工具。
Rule Dependency 业务规则之间的依赖关系。
Rule Versioning 业务规则的版本管理,用于跟踪和维护不同版本的规则。

示例:

graph LR
    A[Business Process] --> B[Rule Engine]
    B --> C[Business Rules]
    B -.-> D[Drools]
    C --> E[Rule Task]
    E --> F[Decision Table]
    C --> G[Rule Dependency]
    G --> H[Rule Versioning]

 

这个示例中,业务流程调用业务规则引擎来执行业务规则。Drools是Activiti支持的一个业务规则引擎,可以用于编写和执行规则。业务规则通过Rule Task在BPMN模型中实现,决策表(Decision Table)是定义业务规则的一种方式。业务规则的依赖关系和版本管理对于维护和更新规则非常重要。

如果想要了解Drools在项目中的使用,可以参考我2021年写的一篇博客:SpringBoot整合Drools规则引擎动态生成业务规则_kmodulebeanfactorypostprocessor-CSDN博客 

8. 数据关联

在Activiti中,数据关联是流程模型中不同元素之间交换数据的方式。以下是数据关联的关键概念:

概念 描述
Process Variables 流程级别的变量,用于在流程的不同部分之间传递数据。
Local Variables 局部变量,用于在单个活动中存储临时数据。
Data Objects 用于在子流程中存储和传递数据的对象。
Input Parameters 活动或子流程的输入参数,用于接收传递进来的数据。
Output Parameters 活动或子流程的输出参数,用于将数据传递给调用者。
Data Associations 定义变量、数据对象和流程元素之间的数据流。
Form Data 表单提交的数据,通常与流程变量进行绑定。
Script Task 使用脚本语言处理数据的特定任务类型。
 9. 服务任务与脚本任务

服务任务(Service Task)和脚本任务(Script Task)是BPMN中用于执行业务逻辑的两种任务类型。以下是服务任务与脚本任务的关键概念:

概念 描述
Service Task 用于执行特定的业务逻辑或服务调用的任务。
Script Task 允许使用脚本语言(如JavaScript)编写和执行业务逻辑的任务。
Business Logic 业务流程中的逻辑,可以是计算、数据处理或外部系统调用。
External System 服务任务可能调用的外部系统或服务。
Script Language 用于编写脚本任务的编程语言,如JavaScript或Python。
Task Configuration 服务任务和脚本任务的配置,如调用的类或方法。

示例:

graph LR
    A[BPMN Process] --> B[Service Task]
    B --> C[Business Logic]
    C --> D[External System]
    A --> E[Script Task]
    E --> F[Script Language]
    F --> G[JavaScript/Python]
    B --> H[Task Configuration]
    H --> I[Class/Method]
    E --> J[Task Configuration]
    J --> I

 

这个示例中,BPMN流程中可以包含服务任务和服务调用的业务逻辑,服务任务可能与外部系统集成。脚本任务允许使用指定的脚本语言来实现业务逻辑,通常涉及编写和执行脚本代码。任务配置是服务任务和脚本任务执行所必需的,它定义了执行的类或方法。

10. 排他网关与并行网关

在BPMN中,网关用于控制流程的分支和合并。排他网关(Exclusive Gateway)和并行网关(Parallel Gateway)是两种常见的网关类型。以下是排他网关与并行网关的关键概念:

概念 描述
Exclusive Gateway 排他网关,用于在多个分支中选择一个路径继续执行。
Parallel Gateway 并行网关,用于创建并行路径,所有分支同时执行。
Fork 流程分支的起点,由并行网关创建。
Join 流程分支的终点,由并行网关创建,合并所有并行路径。
Default Sequence Flow 默认的流程流转路径,当条件不满足时所采取的路径。
Conditions 用于排他网关的分支选择的条件表达式。

示例:

排他网关根据条件选择执行路径A或B,而并行网关则创建了两个并行路径C和D,它们同时执行并在另一个并行网关处合并

11. 用户与组管理

用户与组管理是Activiti中用于定义和管理用户和组的机制,它允许对用户和组进行授权和认证。以下是用户与组管理的关键概念:

概念 描述
Users 系统中的个人账户,用于代表个体用户。
Groups 用户的集合,通常用于角色或权限的分配。
Identity Management 用户和组的管理,包括创建、更新、删除用户和组。
Membership 用户与组之间的关系,一个用户可以是多个组的成员。
Permissions 定义用户或组可以执行的操作,如读取、写入、启动流程等。

示例:

graph TD
    A[Identity Management] --> B[Users]
    A --> C[Groups]
    B --> D[Permissions]
    C --> D
    E[Membership] --> B
    E --> C
    F[Process Instance] --> G[Task Assignment]
    G --> B
    G --> C

 

 这个示例中,身份管理负责管理用户和组。用户和组都有与之关联的权限,这些权限决定了它们在系统中可以执行的操作。成员关系定义了用户和组之间的关系,用户可以是多个组的成员。流程实例中的任务分配可以指定特定的用户或组来执行。

 12.权限与安全

在Activiti中,权限与安全是确保流程和数据安全的重要机制。以下是权限与安全的关键概念:

概念 描述
Authentication 确认用户身份的过程,确保只有授权用户才能访问系统。
Authorization 确定已认证用户可以执行的操作或访问的资源的过程。
Permissions 用户或组可以拥有的权限级别,如读取、写入、删除等。
Resource 系统中的一个实体,如流程定义、流程实例、任务等。
Role-Based Access Control (RBAC) 基于角色的访问控制,通过角色分配权限。
Attribute-Based Access Control (ABAC) 基于属性的访问控制,根据用户属性授予权限。

示例:

graph TD
    A[Security] --> B[Authentication]
    A --> C[Authorization]
    B --> D[Users]
    C --> E[Permissions]
    E --> F[Resource]
    G[Groups] --> H[RBAC]
    I[Attributes] --> J[ABAC]
    H --> E
    J --> E

 这个示例中,安全由认证和授权组成。用户通过认证过程确认身份,然后根据授权获得相应的权限。资源是系统中的实体,如流程实例或任务。基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)是两种常见的权限管理方式。

13. 历史数据管理

历史数据管理在Activiti中用于追踪和记录流程执行的历史信息,这对于审计和监控流程非常重要。以下是历史数据管理的关键概念:

概念 描述
Historical Data 流程实例、活动、任务、变量等的执行历史记录。
Process Instance History 记录流程实例的创建、结束等历史信息。
Activity Instance History 记录活动实例的执行历史,包括开始和结束时间。
Task Instance History 记录任务实例的创建、完成、分配给用户等信息。
Variable Instance History 记录变量值的变化历史。
History Level 定义历史数据记录的详细程度,如不记录、记录流程实例、记录所有实例等。
History Service 提供API来查询历史数据。
Audit Trail 用于审计的详细历史记录,包括谁、何时、做了什么。

示例:

graph TD
    A[History Data Management] --> B[Historical Data]
    B --> C[Process Instance History]
    B --> D[Activity Instance History]
    B --> E[Task Instance History]
    B --> F[Variable Instance History]
    A --> G[History Level]
    G --> H[History Configuration]
    A --> I[History Service]
    I --> J[Audit Trail]

 

 这个示例中,历史数据管理涵盖了流程实例、活动实例、任务实例和变量实例的历史记录。历史级别定义了记录的详细程度,而历史服务提供了查询这些历史数据的API。审计追踪是历史数据的一部分,用于记录详细的操作日志。

14.外部系统集成

Activiti可以与外部系统集成,以便在业务流程中利用外部资源和服务。以下是外部系统集成的关键概念:

概念 描述
Service Task 在BPMN中用于集成外部系统的服务调用。
Message Queue 用于异步通信的队列,如RabbitMQ或Kafka。
Web Service 通过网络提供的服务,Activiti可以通过HTTP请求与之交互。
Database 持久化存储流程数据,Activiti支持多种关系型数据库。
REST API 通过RESTful服务进行集成,Activiti可以作为客户端或服务端。
Event Listener 监听外部事件并触发流程中的相应动作。
Plugin 扩展Activiti功能的自定义组件,可以用于特殊集成需求。

示例:

graph LR
    A[Activiti Engine] --> B[Service Task]
    A --> C[Message Queue]
    A --> D[Web Service]
    A --> E[Database]
    A --> F[REST API]
    A --> G[Event Listener]
    A --> H[Plugin]

 

 这个示例中,Activiti通过服务任务与外部系统集成,可以与消息队列、Web服务、数据库、REST API以及事件监听器进行交互。此外,还可以使用插件来实现特定的集成需求。

15.API 接口

Activiti提供了丰富的API接口,允许开发者以编程方式与Activiti引擎交互。以下是API接口的关键概念:

概念 描述
Repository API 用于管理流程定义和部署的API。
Runtime API 用于管理流程实例和执行对象的API。
Task API 用于管理用户任务和任务实例的API。
Identity API 用于管理用户、组和权限的API。
History API 用于查询历史数据的API。
Management API 用于管理Activiti引擎的内部,如表和批次操作的API。
Query API 提供复杂查询功能的API。
Form API 用于管理表单和表单提交数据的API。

示例:

graph TD
    A[Activiti API] --> B[Repository API]
    A --> C[Runtime API]
    A --> D[Task API]
    A --> E[Identity API]
    A --> F[History API]
    A --> G[Management API]
    A --> H[Query API]
    A --> I[Form API]

 

 Activiti API分为不同的模块,每个模块负责不同的功能。开发者可以根据自己的需求选择相应的API进行流程管理、任务管理、用户管理等操作。

16.数据库与持久化

Activiti使用数据库来持久化流程实例、任务、变量、历史数据等信息。Activiti集成到项目中的时候,比如集成到SpringBoot项目,在部署工作流之后,启动项目,工作流引擎会自动创建必须的核心自带的工作流相关数据库表。

表名 描述
ACT_RE_DEPLOYMENT 存储部署的流程定义文件,每个部署单元在该表中有一条记录。
ACT_RE_MODEL 存储模型编辑器的模型。
ACT_RE_PROCDEF 存储流程定义信息。
ACT_RU_EXECUTION 存储运行中的流程实例的执行流。
ACT_RU_JOB 存储异步任务(如定时器、异步服务任务)。
ACT_RU_TASK 存储用户任务的信息。
ACT_RU_IDENTITYLINK 存储与流程元素(如任务)相关联的用户和组。
ACT_RU_VARIABLE 存储运行中的流程实例的变量。
ACT_HI_PROCINST 存储已结束的流程实例的历史信息。
ACT_HI_ACTINST 存储活动实例的历史信息。
ACT_HI_TASK 存储任务实例的历史信息。
ACT_HI_VARINST 存储变量实例的历史信息。
ACT_HI_DETAIL 存储历史细节信息,如流程变量的更改历史。
ACT_HI_COMMENT 存储历史备注,如用户评论。
ACT_HI_ATTACHMENT 存储流程中的附件信息,如用户上传的文件。
ACT_ID_GROUP 存储组信息。
ACT_ID_MEMBERSHIP 存储用户和组之间的关联关系。
ACT_ID_USER 存储用户信息。
ACT_ID_INFO 存储有关Activiti引擎的元数据信息。

最后说明:一般在项目中使用Activiti,最主要的工作是绘制工作流程BPMN图,首选是Activiti的官方explorer,集成的教程,贴上我之前写的集成安装过程:SpringBoot集成Activiti Explorer_activiti7集成 explorer2-CSDN博客 

最近几天把之前用到的一些技术及中间件知识总结一下,然后准备开始花多一些时间来学习英语口语以及总结英语单词,去年和今年感受到了行业的寒冬,找工作是真的难,希望可以好好学习英语,以后能多一点选择和机会!哎,真难!

相关推荐

  1. 媒体知识总结

    2024-05-02 10:00:01       62 阅读
  2. 【SpringBoot】知识总结

    2024-05-02 10:00:01       63 阅读
  3. JVM知识总结

    2024-05-02 10:00:01       58 阅读
  4. Qt知识总结

    2024-05-02 10:00:01       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-02 10:00:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-02 10:00:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-02 10:00:01       87 阅读
  4. Python语言-面向对象

    2024-05-02 10:00:01       96 阅读

热门阅读

  1. 美国CADS (原爱因斯坦NCPS计划) 2024年进展

    2024-05-02 10:00:01       25 阅读
  2. C++进阶——STL

    2024-05-02 10:00:01       27 阅读
  3. OceanBase在实际应用中有哪些优势和不足?

    2024-05-02 10:00:01       89 阅读
  4. 社交到底是什么?

    2024-05-02 10:00:01       32 阅读
  5. redis sorted Set命令基本使用

    2024-05-02 10:00:01       29 阅读
  6. 11、Flink 的 Keyed State 详解

    2024-05-02 10:00:01       26 阅读
  7. Kubernetes学习笔记01

    2024-05-02 10:00:01       24 阅读
  8. 关于HTML

    2024-05-02 10:00:01       38 阅读
  9. netty的继续学习一(相关概念)

    2024-05-02 10:00:01       31 阅读
  10. c#工控行业的视觉技术栈

    2024-05-02 10:00:01       26 阅读
  11. 串行化执行代码实践

    2024-05-02 10:00:01       34 阅读