• 工作流-流程实例【ProcessInstance】与执行实例【Execution】


    一、ProcessInstance与Execution的区别
    这是一个Activiti的难点,能够懂得这个,工作流也就入门大半了。
    下面,我就细致的讲解一下他们的区别。
    (1)首先,我们来看一张我总结的图片(这个图片中两条红色的execution包含网关与开始与结束节点,这个图片能够理解,那就不用再细致的看了)
    在这里插入图片描述
    这张图片就细致的说明了Activiti中流程实例ProcessInstance与Execution的区别,ProcessInstance与Execution的区别主要表现在有分支的流程中:
    (i)如果流程是单线流程,那么此时的ProcessInstance就是Execution,这可以再数据库表act_ru_execution表中看出,在数据库表act_ru_exection表中的ID_与PROC_INST_ID_的值相同,这时的数据代表的就是ProcessInstance的相关数据,标红的数据再与上面条数据进行对比,就会非长容易的发现,再标红的数据下面没有数据的PARENT_ID_是等与标红的PROC_INST_ID_的,因为act_ru_execution表就是执行实例表,所以ProcessInstance也就是Execution的一种特殊情况,所以此时的ProcessInstance就是Execution。

    在这里插入图片描述
    (ii)下面我们来说一下图中的分支流程部分,在图中可以看出,一个流程会对应一个ProcessInstance还有与分支数量相同的Execution,然后我们通过act_ru_exection表中的数据细致的分析与对比一下
    在这里插入图片描述
    此时我们图中所画的流程图在act_ru_execution表中对应的三条数据,与单线流程的知识相结合可以得知,此时得第一条数据对应的就是ProcessInstance的相关数据,三条数据的PROC_INST_ID_相等,可以得知它们是属于同一流程,再通过下面两条数据的PARENT_ID_等于第一条数据的PROC_INST_ID_可以知道,这两条数据是两条不同分支的执行实例信息Execution
    (2)然后,我们再在代码层面说说ProcessInstance与Execution的关系
    在这里插入图片描述
    在这里,我们可以看出ProcessInstance继承与Execution,本质上ProcessInstance与Execution是一个东西。

    二、多实例会签时的execution
    (1)串行,配置两人,生成了3个执行实例,第一个是流程实例的执行实例,第二个是执行实例的主节点,第三个是当前正在执行的实例。在这里插入图片描述在这里插入图片描述
    当第一个任务执行完后,会自动生成第二个任务,继续使用之前的执行实例,当前任务的执行实例不会改变,执行实例列表也无任何变化。

    等当前节点全部任务执行完毕后,会删除第二和第三条执行实例,生成下个节点的执行实例。

    (2)并行时,配置两人,发现共生成了4个执行实例。
    第一个:流程实例的执行实例;
    第二个:并行执行实例的父实例
    第三和第四:是真正任务的实例
    在这里插入图片描述
    并行执行实例的父实例,被标注为根节点,并且激活状态为false;
    在这里插入图片描述

    补充:

    1. 不要把它执行实例误以为流程实例表,当在并行网关和会签多实例时,它是会产生多个执行实例,刚创建时各个执行实例的**IS_ACTIVE_**这个字段的值都是为1,即激活状态。
      当每完成一个执行实例时,它会把IS_ACTIVE设为0,非激活状态,当所有执行实例完成后,它才会转移到历史,把这个多实例自动删除。
      另外当有子流程,子流程的实例是处于激活状态,而主干流程的实例处于非激活状态。
  • 相关阅读:
    MySQL 索引(一)
    You can’t specify target table ‘xxx’ for update in FROM clause
    快速排序算法
    如何评价一门编程语言的难易程度?
    设计模式-10组合模式(组合模式设计模式)详解
    Mesa新版来袭
    java微博 13 AJAX
    【嵌入式面试题】常见面试题梳理三
    连锁门店如何利用共享门店模式实现转型升级
    管理与系统思维
  • 原文地址:https://blog.csdn.net/qq_38747892/article/details/128119267