偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Flowable中的各種網(wǎng)關(guān),你知道幾個(gè)?

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
當(dāng)流程到達(dá)一個(gè)基于事件網(wǎng)關(guān),網(wǎng)關(guān)會(huì)進(jìn)入等待狀態(tài):會(huì)暫停執(zhí)行。與此同時(shí),會(huì)為每個(gè)外出順序流創(chuàng)建相對(duì)的事件訂閱。

網(wǎng)關(guān)

網(wǎng)關(guān)用來(lái)控制流程的流向。

1.排他網(wǎng)關(guān)

排他網(wǎng)關(guān)(exclusive gateway)(也叫異或網(wǎng)關(guān) XOR gateway,或者更專業(yè)的,基于數(shù)據(jù)的排他網(wǎng)關(guān) exclusive data-based gateway),用于對(duì)流程中的決策建模。當(dāng)執(zhí)行到達(dá)這個(gè)網(wǎng)關(guān)時(shí),會(huì)按照所有出口順序流定義的順序?qū)λ鼈冞M(jìn)行計(jì)算。選擇第一個(gè)條件計(jì)算為true的順序流(當(dāng)沒(méi)有設(shè)置條件時(shí),認(rèn)為順序流為true)繼續(xù)流程。

請(qǐng)注意這里出口順序流的含義與BPMN 2.0中的一般情況不一樣。一般情況下,會(huì)選擇所有條件計(jì)算為true的順序流,并行執(zhí)行。而使用排他網(wǎng)關(guān)時(shí),只會(huì)選擇一條順序流。當(dāng)多條順序流的條件都計(jì)算為true時(shí),會(huì)且僅會(huì)選擇在XML中最先定義的順序流繼續(xù)流程。如果沒(méi)有可選的順序流,會(huì)拋出異常。

排他網(wǎng)關(guān)用內(nèi)部帶有’X’圖標(biāo)的標(biāo)準(zhǔn)網(wǎng)關(guān)(菱形)表示,'X’圖標(biāo)代表異或的含義。請(qǐng)注意內(nèi)部沒(méi)有圖標(biāo)的網(wǎng)關(guān)默認(rèn)為排他網(wǎng)關(guān)。BPMN 2.0規(guī)范不允許在同一個(gè)流程中混合使用有及沒(méi)有X的菱形標(biāo)志。

案例:

  /**
* 部署流程
*/
@Test
public void deploy(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();

Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("請(qǐng)假流程-排他網(wǎng)關(guān).bpmn20.xml")
.name("請(qǐng)求流程-排他網(wǎng)關(guān)")
.deploy();
System.out.println("deploy.getId() = " + deploy.getId());
System.out.println(deploy.getName());
}

/**
* 啟動(dòng)流程實(shí)例
*/
@Test
public void runProcess(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
// 給流程定義中的UEL表達(dá)式賦值
Map<String,Object> variables = new HashMap<>();
// variables.put("g1","group1");
variables.put("num",3); // 給流程定義中的UEL表達(dá)式賦值
runtimeService.startProcessInstanceById("holiday-exclusive:1:4",variables);
}


/**
* 啟動(dòng)流程實(shí)例
*/
@Test
public void setVariables(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
// 給流程定義中的UEL表達(dá)式賦值
Map<String,Object> variables = new HashMap<>();
// variables.put("g1","group1");
variables.put("num",4); // 給流程定義中的UEL表達(dá)式賦值
runtimeService.setVariables("12503",variables);
}



/**
* 完成任務(wù)
*/
@Test
public void completeTask(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
Task task = taskService.createTaskQuery()
//.processInstanceId("2501")
.processDefinitionId("holiday-exclusive:1:4")
.taskAssignee("zhangsan")
.singleResult();
if(task != null){
// 完成任務(wù)
taskService.complete(task.getId());
System.out.println("完成Task");
}
}

如果從網(wǎng)關(guān)出去的線所有條件都不滿足的情況下會(huì)拋出系統(tǒng)異常。

但是要注意任務(wù)沒(méi)有介紹,還是原來(lái)的任務(wù),我們可以重置流程變量。

@Test
public void setVariables(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
// 給流程定義中的UEL表達(dá)式賦值
Map<String,Object> variables = new HashMap<>();
// variables.put("g1","group1");
variables.put("num",4); // 給流程定義中的UEL表達(dá)式賦值
runtimeService.setVariables("12503",variables);
}

前面我們可以直接在連接線上定義條件,那為什么還要有排他網(wǎng)關(guān)呢?直接在線上的情況,如果條件都不滿足,流程就結(jié)束了,是異常結(jié)束!

2.并行網(wǎng)關(guān)

并行網(wǎng)關(guān)允許將流程分成多條分支,也可以把多條分支匯聚到一起,并行網(wǎng)關(guān)的功能是基于進(jìn)入和外出順序流的:

  • fork分支:并行后的所有外出順序流,為每個(gè)順序流都創(chuàng)建一個(gè)并發(fā)分支。
  • join匯聚: 所有到達(dá)并行網(wǎng)關(guān),在此等待的進(jìn)入分支, 直到所有進(jìn)入順序流的分支都到達(dá)以后, 流程就會(huì)通過(guò)匯聚網(wǎng)關(guān)。

注意,如果同一個(gè)并行網(wǎng)關(guān)有多個(gè)進(jìn)入和多個(gè)外出順序流, 它就同時(shí)具有分支和匯聚功能。 這時(shí),網(wǎng)關(guān)會(huì)先匯聚所有進(jìn)入的順序流,然后再切分成多個(gè)并行分支。

與其他網(wǎng)關(guān)的主要區(qū)別是,并行網(wǎng)關(guān)不會(huì)解析條件。 即使順序流中定義了條件,也會(huì)被忽略。

案例:

當(dāng)我們執(zhí)行了創(chuàng)建請(qǐng)假單后,到并行網(wǎng)關(guān)的位置的時(shí)候,在ACT_RU_TASK表中就有兩條記錄。

然后同時(shí)在ACT_RU_EXECUTION中有三條記錄,一個(gè)任務(wù)對(duì)應(yīng)的有兩個(gè)執(zhí)行實(shí)例。

3.包含網(wǎng)關(guān)

包含網(wǎng)關(guān)可以看做是排他網(wǎng)關(guān)和并行網(wǎng)關(guān)的結(jié)合體。 和排他網(wǎng)關(guān)一樣,你可以在外出順序流上定義條件,包含網(wǎng)關(guān)會(huì)解析它們。 但是主要的區(qū)別是包含網(wǎng)關(guān)可以選擇多于一條順序流,這和并行網(wǎng)關(guān)一樣。

包含網(wǎng)關(guān)的功能是基于進(jìn)入和外出順序流的:

  • 分支: 所有外出順序流的條件都會(huì)被解析,結(jié)果為true的順序流會(huì)以并行方式繼續(xù)執(zhí)行, 會(huì)為每個(gè)順序流創(chuàng)建一個(gè)分支。
  • 匯聚:所有并行分支到達(dá)包含網(wǎng)關(guān),會(huì)進(jìn)入等待狀態(tài), 直到每個(gè)包含流程token的進(jìn)入順序流的分支都到達(dá)。 這是與并行網(wǎng)關(guān)的最大不同。換句話說(shuō),包含網(wǎng)關(guān)只會(huì)等待被選中執(zhí)行了的進(jìn)入順序流。 在匯聚之后,流程會(huì)穿過(guò)包含網(wǎng)關(guān)繼續(xù)執(zhí)行。

4.事件網(wǎng)關(guān)

事件網(wǎng)關(guān)允許根據(jù)事件判斷流向。網(wǎng)關(guān)的每個(gè)外出順序流都要連接到一個(gè)中間捕獲事件。 當(dāng)流程到達(dá)一個(gè)基于事件網(wǎng)關(guān),網(wǎng)關(guān)會(huì)進(jìn)入等待狀態(tài):會(huì)暫停執(zhí)行。與此同時(shí),會(huì)為每個(gè)外出順序流創(chuàng)建相對(duì)的事件訂閱。

事件網(wǎng)關(guān)的外出順序流和普通順序流不同,這些順序流不會(huì)真的"執(zhí)行", 相反它們讓流程引擎去決定執(zhí)行到事件網(wǎng)關(guān)的流程需要訂閱哪些事件。 要考慮以下條件:

事件網(wǎng)關(guān)必須有兩條或以上外出順序流;

事件網(wǎng)關(guān)后,只能使用intermediateCatchEvent類型(activiti不支持基于事件網(wǎng)關(guān)后連接ReceiveTask);

連接到事件網(wǎng)關(guān)的中間捕獲事件必須只有一個(gè)入口順序流。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2018-11-07 15:44:29

虛擬化服務(wù)器桌面

2024-05-09 10:28:46

容器ListElement?

2024-08-06 11:40:57

2024-02-19 08:07:31

Go版本語(yǔ)言

2019-06-03 10:14:07

API網(wǎng)關(guān)微服務(wù)

2025-03-25 10:49:13

2024-10-28 13:18:54

2022-03-29 07:20:04

密封類.NET性能

2024-03-01 13:48:00

Git配置系統(tǒng)

2021-06-01 05:16:49

前端開(kāi)發(fā)技術(shù)熱點(diǎn)

2021-11-04 11:54:30

Linux內(nèi)存系統(tǒng)

2022-02-15 07:26:31

Ncat工具Linux

2022-01-10 11:33:17

Go測(cè)試軟件

2023-04-27 08:15:09

2021-08-10 08:01:08

Synchronize鎖膨脹鎖消除

2024-01-18 00:16:07

2021-10-12 09:20:02

數(shù)據(jù)庫(kù)SQL腳本

2021-02-27 17:13:21

前端代碼邏輯

2023-05-30 14:54:17

Python循環(huán)語(yǔ)句工具

2023-11-26 00:26:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)