写在前面

activiti的监听器分为全局监听器,连线监听器,节点监听器,本文要监听流程实例的开始和结束需要通过全局监听器来实现,依赖的接口是org.activiti.engine.delegate.ExecutionListener,源码如下:

public interface ExecutionListener extends Serializable {// 流程实例开始String EVENTNAME_START = "start";// 流程实例结束String EVENTNAME_END = "end";// 监控连线时使用,即需要在线上设置String EVENTNAME_TAKE = "take";void notify(DelegateExecution execution) throws Exception;
}

1:测试

1.1:流程设计

  • 效果图

如下是设置流程实例startend的监听器以及其源码:

public class ProcessInstanceStartExecutionListener implements ExecutionListener {@Overridepublic void notify(DelegateExecution execution) throws Exception {System.out.println("流程实例启动了,实例id是:" + execution.getProcessInstanceId());}
}public class ProcessInstanceEndExecutionListener implements ExecutionListener {@Overridepublic void notify(DelegateExecution execution) throws Exception {System.out.println("流程实例结束了,实例ID是:" + execution.getProcessInstanceId());}
}
  • xml
<?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:xsd="http://www.w3.org/2001/XMLSchema" 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"><process id="csdnProcessInstanceStartAndEnd" name="csdnProcessInstanceStartAndEnd" isExecutable="true"><extensionElements><activiti:executionListener event="start" class="com.jh.activiti.ProcessInstanceStartExecutionListener"></activiti:executionListener><activiti:executionListener event="end" class="com.jh.activiti.ProcessInstanceEndExecutionListener"></activiti:executionListener></extensionElements><startEvent id="startevent1" name="Start"></startEvent><userTask id="usertask1" name="User Task" activiti:assignee="张三"><extensionElements><modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler">false</modeler:initiator-can-complete></extensionElements></userTask><endEvent id="endevent1" name="End"></endEvent><sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow><sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_csdnProcessInstanceStartAndEnd"><bpmndi:BPMNPlane bpmnElement="csdnProcessInstanceStartAndEnd" id="BPMNPlane_csdnProcessInstanceStartAndEnd"><bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"><omgdc:Bounds height="35.0" width="35.0" x="150.0" y="240.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1"><omgdc:Bounds height="55.0" width="105.0" x="360.0" y="230.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"><omgdc:Bounds height="35.0" width="35.0" x="660.0" y="240.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"><omgdi:waypoint x="185.0" y="257.0"></omgdi:waypoint><omgdi:waypoint x="360.0" y="257.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"><omgdi:waypoint x="465.0" y="257.0"></omgdi:waypoint><omgdi:waypoint x="660.0" y="257.0"></omgdi:waypoint></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

1.2:部署流程

/*** 部署流程定义*/
@Test
public void deploy() {Deployment deployment = repositoryService.createDeployment() // 创建部署.addClasspathResource("com/jh/activiti/csdnProcessInstanceStartAndEnd.bpmn20.xml") // 加载流程资源文件.name("csdn监听流程实例的启动和结束") // 流程名称.deploy(); // 部署System.out.println("流程部署ID:" + deployment.getId());System.out.println("流程部署Name:" + deployment.getName());
}

1.3:启动流程实例

@Test
public void startInstance() {runtimeService.startProcessInstanceByKey("csdnProcessInstanceStartAndEnd");
}

输出如下:

流程实例启动了,实例id是:1112502

1.4:结束流程

此时任务如下:

@Test
public void complete() {taskService.complete("1112507");
}

输出如下:

流程实例结束了,实例ID是:1112502

activiti学习之监听流程实例的开始和结束相关推荐

  1. JavaScript事件监听完整实例(含注释)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. android触摸滑动监听,Android 滑动监听的实例详解

    Android 滑动监听的实例详解 摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置), ...

  3. Spring事件监听流程分析【源码浅析】

    一.简介 Spring早期是通过实现ApplicationListener接口来定义监听事件,在spring4.2的时候开始我们可以通过@EventListener注解来定义监听事件,Applicat ...

  4. Ejabberd源码学习——端口监听及报文转发流程

    这篇文章是我之前在RYTong内部分享的一篇文章.上一篇文章说到Ejabberd在启动的时候会监听配置的端口,但没有详细解释监听的流程.这篇我们就来看看Ejabberd监听端口的实现逻辑,了解下一个X ...

  5. oracle监听 客户 实例,oracle 数据库实例 监听

    创建Oracle数据库.数据库名与实例名与SID之间的关系(图文详解) 目录 目录 软件环境 前言 安装Oracle监听程序 启动停止监听程序 创建数据库 数据库名db_name 数据库实例名inst ...

  6. Liferay7 BPM门户开发之4: Activiti事件处理和监听Event handlers

    事件机制从Activiti 5.15开始引入,这非常棒,他可以让你实现委托. 可以通过配置添加事件监听器,也可以通过Runtime API加入注册事件. 所有的事件参数子类型都来自org.activi ...

  7. linux下启动与关闭oracle监听与实例

    linux中启动oracle主要分两步:一个是启动监听器,一个是启动实例(一般都忘记了这一步),具体命令如下,提供给大家参考一下: 1:连接服务器 telnet ip 2:输入管理员用户和密码 use ...

  8. Android学习小记-----监听并保存传感器数据,让service后台运行(保持CPU运转

    最近做了一个Demo,监听手机中传感器的数据,并将数据保存到手机文件中,发现数据会有丢失的现象. 经过多次测试,发现系统进入深度休眠了,之后service会停止,虽然增加了service自动启动的功能 ...

  9. linux系统oracle监听启动,linux下启动与关闭oracle监听与实例

    转自:http://fireye83.iteye.com/blog/1064116 一.如何启动数据库实例 1.进入到sqlplus启动实例 [oracle@localhost ~]$ su - or ...

最新文章

  1. 通信专业学python有用吗-通信算法工程师需要学python吗
  2. NodeJs中process.cwd()与__dirname的区别
  3. 将一个数组拼接成一个指定字符串返回
  4. 将一个日程分割成多个日程_在家庭日程中开展工作的6个技巧
  5. ubantu安装cuda和cudnn
  6. Bailian2965 玛雅历【日期计算】
  7. h5页面如何预览excel文件_在网页中预览word和excel
  8. 【czy系列赛】czy的后宫4 bzoj1925 [Sdoi2010]地精部落
  9. 研究生必须过计算机和英语吗,2020考研:英语一75分,她是怎么做到的_计算机考研科目...
  10. ubuntu18.10安装redshift护眼软件
  11. linux 时间设置的坑,linux 配置定时任务crontab碰到的坑sendmail
  12. Sublime Text全局搜索
  13. WebAPI压力测试
  14. 【LeetCode】(55)Jump Game(Medium)
  15. 什么是子网掩码?怎么根据子网掩码得到网络号?
  16. 一个进入保护模式加载引导程序的BOOTLOADER
  17. wmiprvse.exe进程
  18. 最新的 Sublime 激活码
  19. android 酷狗demo_酷狗音乐(Android)v8.1.5去广告清爽版
  20. swing中使用皮肤包

热门文章

  1. 二进制最大公约数算法
  2. 今天来给大家分享一个实际又有用的微信发长视频和语音的小功能。
  3. 从零开始使用 Webpack 搭建 Vue3 开发环境
  4. canny算子的边缘提取算法
  5. 【Java】BigDecimal.setScale用法总结
  6. 心电信号检测电路设计与制作
  7. VoiceMeeter Pro,给聊天、K歌、直播语音加效果
  8. 京津冀计算机学科大学排名,京津冀十强高校排名,这三所大学进入前十,实力强悍...
  9. 【好书推荐:第四期】好友的第二本书:《对比Excel,轻松学SQL数据分析》
  10. 为什么有些人明明有实力全款买房,却还要选择按揭?