Activiti 學習筆記九:並行閘道器(parallelGateWay)
一、流程圖
二、演示程式碼
package jiankunking.parallelGateWay;
import java.io.InputStream;
import java.util.List;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
public class ParallelGateWayTest {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/** 部署流程定義(從inputStream) */
@Test
public void deploymentProcessDefinition_inputStream() {
InputStream inputStreamBpmn = this.getClass().getResourceAsStream("parallelGateWay.bpmn");
InputStream inputStreamPng = this.getClass().getResourceAsStream("parallelGateWay.png");
Deployment deployment = processEngine.getRepositoryService()// 與流程定義和部署物件相關的Service
.createDeployment()// 建立一個部署物件
.name("並行閘道器")// 新增部署的名稱
.addInputStream("parallelGateWay.bpmn", inputStreamBpmn)//
.addInputStream("parallelGateWay.png", inputStreamPng)//
.deploy();// 完成部署
System.out.println("部署ID:" + deployment.getId());//
System.out.println("部署名稱:" + deployment.getName());//
}
/** 啟動流程例項 */
@Test
public void startProcessInstance() {
// 流程定義的key
String processDefinitionKey = "parallelGateWay";
ProcessInstance pi = processEngine.getRuntimeService()// 與正在執行的流程例項和執行物件相關的Service
.startProcessInstanceByKey(processDefinitionKey);// 使用流程定義的key啟動流程例項,key對應helloworld.bpmn檔案中id的屬性值,使用key值啟動,預設是按照最新版本的流程定義啟動
System.out.println("流程例項ID:" + pi.getId());// 流程例項ID 101
System.out.println("流程定義ID:" + pi.getProcessDefinitionId());// 流程定義ID
// helloworld:1:4
}
/** 查詢當前人的個人任務 */
@Test
public void findMyPersonalTask() {
String assignee = "商家";
List<Task> list = processEngine.getTaskService()// 與正在執行的任務管理相關的Service
.createTaskQuery()// 建立任務查詢物件
/** 查詢條件(where部分) */
.taskAssignee(assignee)// 指定個人任務查詢,指定辦理人
// .taskCandidateUser(candidateUser)//組任務的辦理人查詢
// .processDefinitionId(processDefinitionId)//使用流程定義ID查詢
// .processInstanceId(processInstanceId)//使用流程例項ID查詢
// .executionId(executionId)//使用執行物件ID查詢
/** 排序 */
.orderByTaskCreateTime().asc()// 使用建立時間的升序排列
/** 返回結果集 */
// .singleResult()//返回惟一結果集
// .count()//返回結果集的數量
// .listPage(firstResult, maxResults);//分頁查詢
.list();// 返回列表
if (list != null && list.size() > 0) {
for (Task task : list) {
System.out.println("任務ID:" + task.getId());
System.out.println("任務名稱:" + task.getName());
System.out.println("任務的建立時間:" + task.getCreateTime());
System.out.println("任務的辦理人:" + task.getAssignee());
System.out.println("流程例項ID:" + task.getProcessInstanceId());
System.out.println("執行物件ID:" + task.getExecutionId());
System.out.println("流程定義ID:" + task.getProcessDefinitionId());
System.out.println("########################################################");
}
}
}
/** 完成我的任務 */
@Test
public void completeMyPersonalTask() {
// 任務ID
String taskId = "12507";
processEngine.getTaskService()// 與正在執行的任務管理相關的Service
.complete(taskId);
System.out.println("完成任務:任務ID:" + taskId);
}
}
三、小結
1) 一個流程中流程例項只有1個,執行物件有多個
比如在一個並行閘道器中
當流程啟動後,會在act_ru_execution表中生成如下3條記錄,第一條是流程例項,而第2、3條則是執行物件(執行器)
2) 並行閘道器的功能是基於進入和外出的順序流的:
分支(fork): 並行後的所有外出順序流,為每個順序流都建立一個併發分支。
匯聚(join): 所有到達並行閘道器,在此等待的進入分支, 直到所有進入順序流的分支都到達以後, 流程就會通過匯聚閘道器。
3) 並行閘道器的進入和外出都是使用相同節點標識
4) 如果同一個並行閘道器有多個進入和多個外出順序流, 它就同時具有分支和匯聚功能。 這時,閘道器會先匯聚所有進入的順序流,然後再切分成多個並行分支。
5) 並行閘道器不會解析條件。 即使順序流中定義了條件,也會被忽略。
6) 並行閘道器不需要是“平衡的”(比如, 對應並行閘道器的進入和外出節點數目不一定相等)。如圖中標示是合法的:
演示demo下載:http://download.csdn.net/detail/xunzaosiyecao/9627448
本文部分內容整理自itcast講義,在此表示感謝。
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- Activiti 學習筆記八:排他閘道器(ExclusiveGateWay)筆記Gateway
- 並行閘道器 Parallel Gateway並行ParallelGateway
- Springcloud原始碼學習筆記1—— Zuul閘道器原理SpringGCCloud原始碼筆記Zuul
- activiti學習筆記二筆記
- activiti學習筆記(四)managementService筆記
- Activiti 學習筆記 小結筆記
- springcloud微服務實戰 學習筆記六 服務閘道器SpringGCCloud微服務筆記
- Activiti 學習筆記六:流程執行歷史記錄筆記
- Activiti 學習筆記七:連線(SequenceFlow)筆記
- Activiti 學習筆記五:流程變數筆記變數
- Activiti 學習(三)—— Activiti 流程啟動並完成
- Activiti 學習筆記四:流程例項、任務的執行筆記
- Activiti工作流基礎學習筆記筆記
- Activiti 學習筆記12:分配個人任務筆記
- Activiti 學習筆記13:分配組任務筆記
- Activiti學習筆記三:管理流程定義筆記
- activiti學習記錄
- scala學習筆記:理解並行集合par筆記並行
- Activiti學習筆記一:建立資料庫表筆記資料庫
- HexMap學習筆記(九)——地形特徵筆記特徵
- robot framework學習筆記之九-雜記Framework筆記
- 筆記本出現“預設閘道器不可用”筆記
- Activiti 學習筆記一到六小結筆記
- ES6學習筆記(九)【class】筆記
- Java並行流誤區(學習筆記探討)Java並行筆記
- Janusec應用安全閘道器(WAF閘道器)
- Ceph物件閘道器,多區域閘道器物件
- Linux學習筆記(九)Vim文字編輯器的使用Linux筆記
- Activiti學習筆記二:簡單順序流演示demo筆記
- 監控docker0閘道器並關閉Docker
- Spring Cloud教程 第九彈 微服務閘道器ZuulSpringCloud微服務Zuul
- 飛機的 PHP 學習筆記九:安全PHP筆記
- ReactNative學習筆記九之TabNavigatorReact筆記
- hive學習筆記之九:基礎UDFHive筆記
- JavaWeb學習筆記——第九天JavaWeb筆記
- 閘道器GatewayGateway
- gateway 閘道器Gateway
- 什麼是閘道器?閘道器的作用是什麼,閘道器的作用詳解