流程中的网关主要用于控制流程的流向
1、单向网关
依据条件只能选择一条路,没有符合条件的顺序流则会抛出异常。
2、并行网关(ParallelGateWay)
可以同时执行多个流程, 直到总流程的结束. 可以对流程进行分支和聚合, 此时流程实例(processInstance)id和执行对象(execution)id是不一样的
流程(并行网关)部署启动后相关表数据变化(2个分支)
2.1、正在执行的执行对象表 act_ru_execution (3条数据, 并行分支数2+流程实例1)
2.2、流程实例的历史表 act_hi_procinst (1条数据)、
2.3、正在执行的任务表 act_ru_task (2条数据, 并行分支数)
2.4、历史任务表 act_hi_taskinst (2)
2.5、历史活动节点表 act_hi_actinst (4, +并行网关)
备注:a、一个流程可以有多个执行对象,但是只有一个流程实例
b、并行网关的功能是基于进入和外出的顺序流的:
分支(fork): 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。
汇聚(join): 所有到达并行网关,在此等待的进入分支,直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。
c、并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略
d、并行网关的进入和外出节点数目不一定相等
e、如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。 这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支
3、包容网关
包容网关(Inclusive Gateway)就是并行网关(Parallel Gateway)和排他网关(Exclusive Gateway)的组合。可以在出口顺序流上定义条件,包容网关会计算它们。然而主要的区别是,包容网关与并行网关一样,可以选择多于一条(出口)顺序流
3.1、分支(fork):所有出口顺序流都会被计算,对于计算为true的分支都会被执行
3.2、聚合(join):所有到达包容网关的并行执行,都会在网关处等待,直到每一条具有流程标志的入口顺序流,都有一个执行到达。这是与并行网关的重要区别。换句话说,包容网关只会等待将会被执行的入口顺序流。在合并后,流程穿过合并并行网关继续
4、事件网关
该网关在执行出口处,要连接一个捕获中间事件。当流程执行到该网关时,流程类似处于等待的状态,此时执行被暂停,Activiti会为全部的中间Catching事件创建相应的数据,哪个事件先被触发,则流程会往该事件所处方向执行。
基于事件网关的外出顺序流和普通顺序流不同,这些顺序流不一定真的"执行", 相反它们让流程引擎去决定执行到基于事件网关的流程需要订阅哪些事件
备注:a、事件网关的进入和外出节点数目不一定相等
