1 Star 1 Fork 5

Flowable_BPMN / demo08

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

环境:

jkd8+

mysql5.6+

flowable6.4.0

1、原理

1.1 排他网关

排他网关(也称为XOR网关或更专业的基于数据排他网关)用于对流程中的决策建模。当执行到达此网关时,将按照定义它们的顺序评估所有传出序列流。选择条件评估为真(或没有条件集,在概念上具有在序列流上定义的*'真'*)的第一序列流以继续该过程。

注意,在这种情况下,输出序列流的语义与BPMN 2.0中的一般情况的语义不同。通常,选择条件评估为真的所有序列流以并行方式继续,而在使用排他网关时仅选择一个序列流。如果多个序列流具有计算结果为true的条件,则选择XML中定义的第一个(并且只有那个!)以继续该过程。如果不能选择序列流,则会抛出异常

1.2 并行网关

并行网关还可用于对流程中的并发进行建模。在流程模型中引入并发性的最直接的网关是并行网关,它允许您分叉到多个执行路径或连接多个传入的执行路径。

并行网关的功能基于传入和传出顺序流:

  • **fork:**并行执行所有传出序列流,为每个序列流创建一个并发执行。
  • **join:**到达并行网关的所有并发执行在网关中等待,直到每个传入的序列流都到达执行。然后,该过程继续经过加入网关。

请注意,如果同一并行网关有多个传入和传出顺序流,并行网关可以同时具有分叉和连接行为。在这种情况下,网关将首先连接所有传入的序列流,然后再分成多个并发的执行路径。

1.3 包容网关

可以把**包容网关(inclusive gateway)**看做排他网关与并行网关的组合。与排他网关一样,可以在包容网关的出口顺序流上定义条件,包容网关会计算条件。然而主要的区别是,包容网关与并行网关一样,可以同时选择多于一条出口顺序流。

包容网关的功能取决于其入口与出口顺序流:

  • **分支:**流程会计算所有出口顺序流的条件。对于每一条计算为true的顺序流,流程都会创建一个并行执行。
  • **合并:**所有到达包容网关的并行执行,都会在网关处等待。直到每一条具有流程标志(process token)的入口顺序流,都有一个执行到达。这是与并行网关的重要区别。换句话说,包容网关只会等待可以被执行的入口顺序流。在合并后,流程穿过合并并行网关继续。

请注意,如果包容网关同时具有多条入口与出口顺序流,可以同时具有分支与合并的行为。在这种情况下,网关首先合并所有具有流程标志的入口顺序流,然后为每一个条件计算为true的出口顺序流分裂出并行执行路径。

包容网关的汇聚行为比并行网关更复杂。所有到达包容网关的并行执行,都会在网关等待,直到所有“可以到达”包容网关的执行都“到达”包容网关。 判断方法为:计算当前流程实例中的所有执行,检查从其位置是否有一条到达包容网关的路径(忽略顺序流上的任何条件)。如果存在这样的执行(可到达但尚未到达),则不会触发包容网关的汇聚行为。

1.4 基于事件的网关

基于事件的网关(event-based gateway)提供了根据事件做选择的方式。网关的每一条出口顺序流都需要连接至一个捕获中间事件。当流程执行到达基于事件的网关时,与等待状态类似,网关会暂停执行,并且为每一条出口顺序流创建一个事件订阅。

请注意:基于事件的网关的出口顺序流与一般的顺序流不同。这些顺序流从不实际执行。相反,它们用于告知流程引擎:当执行到达一个基于事件的网关时,需要订阅什么事件。有以下限制:

  • 一个基于事件的网关,必须有两条或更多的出口顺序流。
  • 基于事件的网关,只能连接至intermediateCatchEvent(捕获中间事件)类型的元素(Flowable不支持在基于事件的网关之后连接“接收任务 Receive Task”)。
  • 连接至基于事件的网关的intermediateCatchEvent,必须只有一个入口顺序流。

2、流程图

  • 排他网关

  • 并行网关

  • 包含网关

  • 基于事件的网关

3、配置

3.1 排他网关

<exclusiveGateway id="exculusivegateway" name="排他网关"></exclusiveGateway>

3.2 并行网关

<parallelGateway id="fork" name="fork"></parallelGateway>
...
<parallelGateway id="join" name="join"></parallelGateway>

3.3 包含网关

<inclusiveGateway id="fork" name="fork"></inclusiveGateway>

3.4 基于事件的网关

<eventBasedGateway id="gw1" name="基于事件的网关"></eventBasedGateway>

4、测试

4.1 排他网关

  • 运行demo
  • 查看数据库表
 SELECT * FROM flowable.ACT_RU_EXECUTION;
 SELECT * FROM flowable.ACT_RU_TASK;

4.2 并行网关

  • 运行demo
  • 查看数据库表
SELECT * FROM flowable.ACT_RU_EXECUTION;
SELECT * FROM flowable.ACT_RU_TASK;

4.3 包含网关

​ 在上面的示例中,在启动流程后,如果流程变量paymentReceived== false和shipOrder == true,则将创建两个任务。如果这些过程变量中只有一个等于true,则只创建一个任务。如果没有条件计算为true,则抛出异常。这可以通过指定默认的传出顺序流来防止。

4.4 基于事件的网关

​ 当执行到达基于事件的网关时,流程执行暂停。流程实例订阅alert信号事件,并创建一个10分钟后触发的定时器。流程引擎会等待10分钟,并同时等待信号事件。如果信号在10分钟内触发,则会取消定时器,流程沿着信号继续执行,激活Handle alert用户任务。如果10分钟内没有触发信号,则会继续执行,并取消信号订阅。

空文件

简介

网关实践:排他网关、并行网关、包容网关、基于事件的网关 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/Flowable_BPMN/demo08.git
git@gitee.com:Flowable_BPMN/demo08.git
Flowable_BPMN
demo08
demo08
master

搜索帮助