Activiti6事件及监听器配置(学习笔记)

1.事件及监听器原理

当流程引擎启动的时候,我们定义的监听器,就已经注册在一个事件类型上面。
注册的方式有多种,它可以注册在所有的事件类型上面、也可以注册在指定的几个事件类型上面,这样引擎启动的时候就已经完成了监听器与事件的注册。
那么在流程运行的过程中,会有这样一个环节:
首先我们有一个事件源与一个事件类型的关系,比如说,我创建一个流程引擎,这个事件源就是流程引擎对象。类型就是 把它创建了。也就是说流程引擎创建过程,
触发出我们的事件,这个事件对象,也就是流程引擎被创建。当这个事件被分发出来的时候,或者发布出来的时候,也就会被监听器监听这个事件。
当然,我们可以在一个事件上注册多个监听器,当事件发生的时候,监听器会一次执行自己的方法,这样就可以让一个事件在发生变化的时候,监听器直接或者间接的感受到它的变化。
综上,这个过程中,我们需要:
首先有一个事件对象
在这个事件对象上绑定或注册监听器和事件类型
监听器会触发的方法。
监听器配置方式:

Activiti的事件监听(与监听原理图相对应):

Activiti的事件监听:

在实现监听器的过程中,大多监听器都会对事件类型做一个判断。监听器只去判断几个事件类型,类型不符的直接忽略。
(ps:事件类型里还支持自定义类型。)
创建一个监听器ProcessEventListener:
public class ProcessEventListener implements ActivitiEventListener {
private static final Logger LOGGER = LoggerFactory.getLogger(ProcessEventListener.class);
//简单的完成一下监听器的效果
@Override
public void onEvent(ActivitiEvent event) {
ActivitiEventType eventType = event.getType();
if (ActivitiEventType.PROCESS_STARTED.equals(eventType)){
LOGGER.info("流程启动 {} \t {}",eventType,event.getProcessInstanceId());
}else if (ActivitiEventType.PROCESS_COMPLETED.equals(eventType)){
LOGGER.info("流程结束 {} \t {}",eventType,event.getProcessInstanceId());
}
}
@Override
public boolean isFailOnException() {
return false;
}
}
注册监听配置文件:
activiti_eventListener.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
<!-- 给引擎设置自定义的commandInvoker -->
<!--<property name="commandInvoker" ref="commandInvoker" />-->
<property name="eventListeners">
<list>
<!-- 配置上监听器 -->
<bean class="com.yy.avtiviti.helloworld.event.ProcessEventListener"/>
</list>
</property>
</bean>
<bean id="commandInvoker" class="com.yy.avtiviti.helloworld.intercept.MDCCommandInvoker"/> </beans>
测试类:
public class configEventListenerTest {
private static final Logger LOGGER = LoggerFactory.getLogger(configTest.class);
@Rule
public ActivitiRule activitiRule = new ActivitiRule("activiti_eventListener.cfg.xml");//传入自定义的mdc配置文件
@Test
@Deployment(resources = {"my-process.bpmn20.xml"})//流程定义文件
public void test() {
ProcessInstance processInstance = activitiRule.getRuntimeService().startProcessInstanceByKey("my-process");
Task task = activitiRule.getTaskService().createTaskQuery().singleResult();
activitiRule.getTaskService().complete(task.getId());
//想遍历EventLog数据,需要用到新的service(ManagementService)
//状态流转
LOGGER.info("-----------状态流转----------");
List<EventLogEntry> eventLogEntries = activitiRule
.getManagementService()
.getEventLogEntriesByProcessInstanceId(
processInstance.getProcessDefinitionId());
for (EventLogEntry eventLogEntry : eventLogEntries) {
LOGGER.info("eventLog.type = {},eventLog.data = {}",eventLogEntry.getType(),new String(eventLogEntry.getData()));
}
LOGGER.info("eventLogEntries = {}",eventLogEntries.size());
}
测试结果如下:

第二种注册监听的配置方法,只用改配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
<!-- 给引擎设置自定义的commandInvoker -->
<!--<property name="commandInvoker" ref="commandInvoker" />-->
<!--<property name="eventListeners">
<list>
<!– 配置上监听器 –>
<bean class="com.yy.avtiviti.helloworld.event.ProcessEventListener"/>
</list>
</property>-->
<property name="typedEventListeners">
<map>
<!-- 只监听流程启动这个事件 -->
<entry key="PROCESS_STARTED">
<list>
<bean class="com.yy.avtiviti.helloworld.event.ProcessEventListener"/>
</list>
</entry>
</map>
</property>
</bean>
<bean id="commandInvoker" class="com.yy.avtiviti.helloworld.intercept.MDCCommandInvoker"/> </beans>
测试结果如下图,与预期相符,只监听了流程的启动。

Activiti6事件及监听器配置(学习笔记)的更多相关文章
- Chapter 2. OpenSSL的安装和配置学习笔记
Chapter 2. OpenSSL的安装和配置学习笔记 2.1 在linux上面安装OpenSSL我还是做点No paper事情比较在行,正好和老师的课程接轨一下.以前尝试过在Windows上面安装 ...
- redis 安装配置学习笔记
redis 安装配置学习笔记 //wget http://download.redis.io/releases/redis-2.8.17.tar.gz 下载最新版本 wget http://downl ...
- Activiti6作业执行器Job Executor配置(学习笔记)
内容概况: 异步执行配置相关: asyncExecutorActivate:这个属性是激活作业执行器,它的默认参数是false,只有设为true,activiti启动的时候才会开启线程池去扫描定时操作 ...
- Elasticsearch的配置学习笔记
文/朱季谦 Elasticsearch是一个基于Lucene的搜索服务器.它提供一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,Elasticsearch是用Java语言开发的. ...
- cocos2d-x-3.1 事件分发机制 (coco2d-x 学习笔记七)
触摸事件 Sprite* sp1 = Sprite::create("Images/t1.png"); sp1->setPosition(Vec2(visibleSize.w ...
- Windows+Nginx+Tomcat整合的安装与配置学习笔记
以下全部是nginx在window7下运行的: nginx学习总结: 我的是放在F盘 1.启动:F:\nginx-1.10.2\nginx-1.10.2>start nginx.exe(找到相应 ...
- Hive0.11安装配置学习笔记
转:http://springsfeng.iteye.com/blog/1734517 1 . 首先请安装好MySQL并修改root账户密码,使用root账户执行下面命令: su - root ...
- php的具体配置学习笔记
1.将php配置为apache的一个模块,使用loadmodule指令完成. 2.写下面的语句,此外需强调的是,每次配置都需要重新启动apache 3.php文件,要指定将其php模块来处理 4.PH ...
- linux配置学习笔记(一):如何提高ssh连接的速度
服务器端sshd配置文件 /etc/ssh/sshd_config 看是否有如下的两条配置条目 GSSAPIAuthentication no UseDNS no 如果前面带#,请把#删掉,或者新添加 ...
随机推荐
- Java开发笔记(五十九)Java8之后的扩展接口
前面介绍了接口的基本用法,有心的朋友可能注意到这么一句话“在Java8以前,接口内部的所有方法都必须是抽象方法”,如此说来,在Java8之后,接口的内部方法也可能不是抽象方法了吗?之所以Java8对接 ...
- HTML5跳转页面并传值以及localStorage的用法
1.首先,你得在那个页面把数据存入localStorage中吧.这个是必须的! localStorage.setItem("user",JSON.stringify(data.al ...
- 网络最大流算法—最高标号预流推进HLPP
吐槽 这个算法.. 怎么说........ 学来也就是装装13吧.... 长得比EK丑 跑的比EK慢 写着比EK难 思想 大家先来猜一下这个算法的思想吧:joy: 看看人家的名字——最高标号预留推进 ...
- 浏览器登录Dynamics 365 CE没毛病,程序连接却报错。
摘要: 微软动态CRM专家罗勇 ,回复308或者20190308可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 今天我做实验 ...
- JQuery显示,隐藏和淡入淡出效果
为了把JQuery搞熟悉,看着菜鸟教程,一个一个例子打,边看边记,算是一晚上的一个小总结吧.加油,我很本但是我很勤奋啊.系统的了解它,就要花时间咯. <!DOCTYPE html> < ...
- nginx sub模块替换文本
nginx的ngx_http_sub_module模块,可以用于修改网站响应内容中的字符串,如过滤敏感词.第三方模块ngx_http_substitutions_filter_module,弥补了ng ...
- 关于ipv6被拒的问题
遇到ipv6被拒,你首先要搭建一个ipv6的环境,进行测试一下,如果在ipv6环境下没有问题,那你就可以再次直接提交,或者重新打包提交.再次提交的时候,你可以录制一段在ipv6环境下运行的一段视频 上 ...
- 南京邮电大学java第三次实验报告
实 验 报 告 ( 2017 / 2018学年 第2学期) 课程名称 JAVA语言程序设计 实验名称 Java集成开发环境的安装与使用. Java变量.表达式与控制结构 实验时间 2018 年 4 月 ...
- GIT的使用(Gitlab上传本地仓库代码,Webstorm修改更新)
准备:GIT的安装,Gitlab账户登陆,webstorm的安装 1.首先,你得先会在Gitlab中创建一个团体,在团体中创建一个项目,先建组,再建项目,网上哪里都有教程,随便找了个网址: https ...
- Session session = connection.createSession(paramA,paramB);参数解析
Session session = connection.createSession(paramA,paramB); paramA是设置事务,paramB是设置acknowledgment mode ...