一 代码
/**
* Copyright (C), 2020-2020, 软件公司
* FileName: SignaleEventReceived.java
* Author: cakin
* Date: 2020/4/23
* Description: signaleEventReceived方法触发信号事件
*/
package com.syc.activiti.chapter9;
import java.util.List;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
/**
* @className: SignaleEventReceived
* @description: signaleEventReceived方法触发信号事件
* @date: 2020/4/23
* @author: cakin
*/
public class SignaleEventReceived {
public static void main( String[] args ) {
// 创建流程引擎
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 得到流程存储服务实例
RepositoryService repositoryService = engine.getRepositoryService();
// 得到运行时服务组件
RuntimeService runtimeService = engine.getRuntimeService();
// 部署流程描述文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/chapter9/signalEventReceived.bpmn").deploy();
// 开始流程
ProcessInstance pi = runtimeService
.startProcessInstanceByKey("testProcess");
// 查询执行流
Execution exe = runtimeService.createExecutionQuery().activityId("usertask1").singleResult();
/******************************************************************************
mysql> select ID_, REV_,PROC_INST_ID_ ,BUSINESS_KEY_ ,PARENT_ID_ ,PROC_DEF_ID_ ,SUPER_EXEC_,ROOT_PROC_INST_ID_ ,ACT_ID_ from act_ru_execution;
+--------+------+---------------+---------------+------------+----------------------+-------------+--------------------+-----------+
| ID_ | REV_ | PROC_INST_ID_ | BUSINESS_KEY_ | PARENT_ID_ | PROC_DEF_ID_ | SUPER_EXEC_ | ROOT_PROC_INST_ID_ | ACT_ID_ |
+--------+------+---------------+---------------+------------+----------------------+-------------+--------------------+-----------+
| 192505 | 1 | 192505 | NULL | NULL | testProcess:1:192504 | NULL | 192505 | NULL |
| 192506 | 1 | 192505 | NULL | 192505 | testProcess:1:192504 | NULL | 192505 | usertask1 |
+--------+------+---------------+---------------+------------+----------------------+-------------+--------------------+-----------+
******************************************************************************/
System.out.println("当前执行流:" + exe.getId() + " 当前节点:" + exe.getActivityId());
// 触发receiveTask
runtimeService.trigger(exe.getId());
// 查询当前节点
exe = runtimeService.createExecutionQuery().activityId("signalCatchEvent").singleResult();
/******************************************************************************
mysql> select ID_, REV_,PROC_INST_ID_ ,BUSINESS_KEY_ ,PARENT_ID_ ,PROC_DEF_ID_ ,SUPER_EXEC_,ROOT_PROC_INST_ID_ ,ACT_ID_ from act_ru_execution;
+--------+------+---------------+---------------+------------+----------------------+-------------+--------------------+------------------+
| ID_ | REV_ | PROC_INST_ID_ | BUSINESS_KEY_ | PARENT_ID_ | PROC_DEF_ID_ | SUPER_EXEC_ | ROOT_PROC_INST_ID_ | ACT_ID_ |
+--------+------+---------------+---------------+------------+----------------------+-------------+--------------------+------------------+
| 192505 | 1 | 192505 | NULL | NULL | testProcess:1:192504 | NULL | 192505 | NULL |
| 192506 | 2 | 192505 | NULL | 192505 | testProcess:1:192504 | NULL | 192505 | signalCatchEvent |
+--------+------+---------------+---------------+------------+----------------------+-------------+--------------------+------------------+
******************************************************************************/
System.out.println("当前执行流:" + exe.getId() + " 调用trigger方法后当前节点:" + exe.getActivityId());
// 发送信号给事件,流程结束
runtimeService.signalEventReceived("testSignal");
List exes = runtimeService.createExecutionQuery()
.processInstanceId(pi.getId()).list();
/******************************************************************************
mysql> select ID_, REV_,PROC_INST_ID_ ,BUSINESS_KEY_ ,PARENT_ID_ ,PROC_DEF_ID_ ,SUPER_EXEC_,ROOT_PROC_INST_ID_ ,ACT_ID_ from act_ru_execution;
Empty set (0.00 sec)
******************************************************************************/
System.out.println(" 触发Catch事件后,执行流数量:" + exes.size());
}
}
二 流程文件
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<signal id="testSignal" name="testSignal"></signal>
<process id="testProcess" name="testProcess">
<startEvent id="startevent1" name="Start"></startEvent>
<intermediateCatchEvent id="signalCatchEvent"
name="SignalCatchEvent">
<signalEventDefinition signalRef="testSignal"></signalEventDefinition>
</intermediateCatchEvent>
<endEvent id="endevent1" name="End"></endEvent>
<receiveTask id="usertask1" name="First Task"></receiveTask>
<sequenceFlow id="flow1" name="" sourceRef="startevent1"
targetRef="usertask1"></sequenceFlow>
<sequenceFlow id="flow2" name="" sourceRef="usertask1"
targetRef="signalCatchEvent"></sequenceFlow>
<sequenceFlow id="flow3" name="" sourceRef="signalCatchEvent"
targetRef="endevent1"></sequenceFlow>
</process>
</definitions>
三 执行结果
当前执行流:192506 当前节点:usertask1
当前执行流:192506 调用trigger方法后当前节点:signalCatchEvent
触发Catch事件后,执行流数量:0
来源:oschina
链接:https://my.oschina.net/u/4276629/blog/3652291