Flowable进阶学习(一)表结构、ProcessEngine、Service、BPMN图标

文章目录

  • 一、Flowable表结构
    • 1.表结构讲解
  • 二、ProcessEngine讲解
    • 2.1 加载默认的配置文件
    • 2.2 加载自定义配置文件
    • 2.3 ProcessEngine源码
    • 2.4 ProcessEngineConfiguration中的init()方法
    • 2.5 ProcessEngine各种方式对比
  • 三、Service服务接口
    • 3.1 Service创建方式与名称作用简介
  • 四、Flowable图标介绍

一、Flowable表结构

1.表结构讲解

  工作流程的相关操作都是操作存储在对应的表结构中,为了能更好的弄清楚Flowable的实现原理和细节,我们有必要先弄清楚Flowable的相关表结构及其作用。在Flowable中的表结构在初始化的时候会创建五类表结构,具体如下:

  • ACT_RE :'RE’表示 repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
  • ACT_RU:'RU’表示 runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Flowable只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
  • ACT_HI:'HI’表示 history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
  • ACT_GE: GE 表示 general。 通用数据, 用于不同场景下
  • ACT_ID: ’ID’表示identity(组织机构)。这些表包含标识的信息,如用户,用户组,等等。

具体的表结构的含义:

表分类 表名 解释
一般数据 表名 解释
[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_RE_DEPLOYMENT] 部署单元信息
[ACT_RE_MODEL] 模型信息
[ACT_RE_PROCDEF] 已部署的流程定义
运行实例表 表名 解释
[ACT_RU_EVENT_SUBSCR] 运行时事件
[ACT_RU_EXECUTION] 运行时流程执行实例
[ACT_RU_IDENTITYLINK] 运行时用户关系信息,存储任务节点与参与者的相关信息
[ACT_RU_JOB] 运行时作业
[ACT_RU_TASK] 运行时任务
[ACT_RU_VARIABLE] 运行时变量表
用户用户组表 表名 解释
[ACT_ID_BYTEARRAY] 二进制数据表
[ACT_ID_GROUP] 用户组信息表
[ACT_ID_INFO] 用户信息详情表
[ACT_ID_MEMBERSHIP] 人与组关系表
[ACT_ID_PRIV] 权限表
[ACT_ID_PRIV_MAPPING] 用户或组权限关系表
[ACT_ID_PROPERTY] 属性表
[ACT_ID_TOKEN] 记录用户的token信息
[ACT_ID_USER] 用户表

二、ProcessEngine讲解

2.1 加载默认的配置文件

示例:

@Test
public void test_processEngine02(){
    // getDefaultProcessEngine会帮我们加载一个配置文件
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
    System.out.println("defaultProcessEngine = " + defaultProcessEngine);
}
// 其中一路跟随代码getProcessEngine -> init()
// resources = classLoader.getResources("flowable.cfg.xml");
// 会发现读取了resources下的配置文件。

使用这种方式,则必须要在resources目录下新建配置文件flowable.cfg.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="processEngineConfiguration" class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcUrl"
                  value="jdbc:mysql://localhost:3306/flowable_learn?serverTimeZone=UTC"/>
        <property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="jdbcUsername" value="root"/>
        <property name="jdbcPassword" value="admin"/>
        <property name="databaseSchemaUpdate" value="true"/>
        <property name="asyncExecutorActivate" value="false"/>
    bean>
beans>

2.2 加载自定义配置文件

@Test
public void test_processEngine03() {
//        ProcessEngines.getProcessEngines(name)注意区别是自定义流程引擎的名称,而不是加载自定义名称配置文件的方法。
//        ProcessEngines.getProcessEngine("name");
   ProcessEngineConfiguration configuration =
           ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("flowable.cfg.xml");
   System.out.println("configuration = " + configuration);
}

2.3 ProcessEngine源码

Flowable进阶学习(一)表结构、ProcessEngine、Service、BPMN图标_第1张图片

package org.flowable.engine;
// ProcessEngineImpl实现类完成对象的注入操作
public interface ProcessEngine {
    String VERSION = "6.3.0.1";		// 版本
    String getName();		//名称
    void close();
    // 以下是各种服务
    RepositoryService getRepositoryService();		// 资源服务
    RuntimeService getRuntimeService();		// 运行时服务
    FormService getFormService();		// 表单
    TaskService getTaskService();		// 任务
    HistoryService getHistoryService();		// 历史
    IdentityService getIdentityService();	// 用户
    ManagementService getManagementService();		// 管理
    DynamicBpmnService getDynamicBpmnService();		// 动态bpmn
    // 配置对象
    ProcessEngineConfiguration getProcessEngineConfiguration();
}

2.4 ProcessEngineConfiguration中的init()方法

// 这里对init方法做了一些截取,详细的需要自行查找
// org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl#init
// 模板模式的一个实现
public void init() {
   this.initConfigurators();	//初始化配置
   this.configuratorsBeforeInit();
   // 省略......
   // 如果使用关系型数据库,则初始化数据源等
   if (this.usingRelationalDatabase) {
       this.initDataSource();
       this.initDbSchemaManagers();
   }
   this.initHelpers();
   this.initVariableTypes();		// 初始化流程变量相关
   this.initBeans();
   this.initFormEngines();		   // 初始化表单引擎
   this.initFormTypes();
   this.initScriptingEngines();		// 初始化表达式引擎
   this.initClock();
   this.initCommandExecutors();
   this.initServices();
   this.initBpmnParser();
   this.initProcessDefinitionCache();
   this.initAppResourceCache();
   this.initJobHandlers();
   this.initHistoryJobHandlers();
   this.initTransactionFactory();
   if (this.usingRelationalDatabase) {
       this.initSqlSessionFactory();
   }

   this.initSessionFactories();
   this.initDataManagers();
   this.initEntityManagers();
   this.initCandidateManager();
   this.initHistoryManager();
   this.initProcessValidator();
   this.initFlowable5CompatibilityHandler();
   this.configuratorsAfterInit();
   this.afterInitTaskServiceConfiguration();
}

2.5 ProcessEngine各种方式对比

Flowable进阶学习(一)表结构、ProcessEngine、Service、BPMN图标_第2张图片

Flowable进阶学习(一)表结构、ProcessEngine、Service、BPMN图标_第3张图片

三、Service服务接口

Service是工作流引擎提供用于进行工作部署、执行、管理的服务接口,我们使用这些接口可以操作对应的数据表。
Flowable进阶学习(一)表结构、ProcessEngine、Service、BPMN图标_第4张图片

3.1 Service创建方式与名称作用简介

// Flowable的资源管理服务
RepositoryService repositoryService = processEngine.getRepositoryService();
// Flowable的流程运行时管理服务
RuntimeService runtimeService = processEngine.getRuntimeService();
// Flowable的任务管理服务
TaskService taskService = processEngine.getTaskService();
// Flowable的历史管理服务
HistoryService historyService = processEngine.getHistoryService();
// Flowable的引擎管理服务
ManagementService managementService = processEngine.getManagementService();
// 这里只做重点的的列举,关于其他部分详见类:org.flowable.engine.impl.ProcessEngineImpl
名称 简介
RepositoryService 1. 是activiti的资源管理类。提供给了管理和控制流程部署、发布、定义的操作。
2. 使用工作流建模工具设计的流程图需要使用此service来将流程定义文件的内容部署。
3. 暂停、激活发布包,对应全部和特定流程定义。获取多种资源,如发布包中的文件,或流程引擎自动生成的流程图。获取流程定义的pojo版本,可以通过java来解析流程,而不是xml。
RuntimeService Activiti的流程运行管理类。获取关于流程执行的相关信息。
TaskService Activiti的任务管理类。获取关于任务的相关信息。
HistoryService Flowable的历史管理类。可查询历史信息。执行流程时,引擎会根据配置保存信息,如流程实例启动时间、任务参与者、完成任务时间、每个流程实例的执行路径等。
ManagementService Activiti的引擎管理类。提供了对Flowable流程引擎的管理和维护功能。这些功能不在工作流驱动的应用程序中使用,主要用于Flowable的日常维护。

四、Flowable图标介绍

BPMN2.0是业务流程建模符号2.0(Business Process Model Notation)的缩写。使用一些符号来明确业务流程设计图的符号规范,增进业务建模沟通效率。作用于BPM上下文布局和可视化。

图标类型 示例图
事件图标 Flowable中事件包括:启动事件、边界事件、中间事件、结束事件。 Flowable进阶学习(一)表结构、ProcessEngine、Service、BPMN图标_第5张图片
活动(任务)图标 活动是任务或工作的一个术语。一个活动可以是一个任务,也可以是当前流程的子流程。可以为活动指定不同的类型。 Flowable进阶学习(一)表结构、ProcessEngine、Service、BPMN图标_第6张图片
结构图标 结构图标可以看作是整个流程活动的结构,一个流程中可以包括子流程。 Flowable进阶学习(一)表结构、ProcessEngine、Service、BPMN图标_第7张图片
网关图标 网关用来处理决策 Flowable进阶学习(一)表结构、ProcessEngine、Service、BPMN图标_第8张图片

你可能感兴趣的:(工作流,flowable,工作流)