Activiti触发信号事件实战

一 代码

/**
* 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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值