美文网首页流程引擎
Activiti流程引擎配置4-事件与监听器配置

Activiti流程引擎配置4-事件与监听器配置

作者: 安安汐而 | 来源:发表于2019-08-20 10:56 被阅读0次

Demo项目代码:
https://gitee.com/AnAnXiEr/activiti6-demo

1、事件与监听器的原理
2、监听器的配置方式
3、Activiti的事件监听

事件与监听器的原理

image.png

流程引擎启动时、监听器就注册到事件类型上
可以注册到所有的事件类型上,也可以注册到指定的几个事件类型

监听器的配置方式

  • eventListeners:监听所有事件派发通知
  • typedEventListeners:监听指定事件类型的通知
  • activiti:eventListener:只监听特定流程定义的事件

Activiti的事件监听

事件源:Process Engine
事件类型:ENGINE_CREATED
事件:ActivitiEvent
监听:dispatcheEvent
注册:addEventListener
监听器:ActivitiEvent Listener


image.png
相关API

ActivitiEvent:事件对象
ActivitiEventListener:监听器
ActivitiEventType:事件类型

1、activiti的事件监听

cfg配置
 <?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 class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration"
          id="processEngineConfiguration">
        <!--<property name="commandInvoker" ref="mdcCommandInvoker"/>-->

        <!--eventListeners-->
        <!--<property name="eventListeners">-->
            <!--<list>-->
                <!--<bean class="com.imooc.activiti.activitidemo.event.ProcessEventListener"></bean>-->
            <!--</list>-->
        <!--</property>-->

        <!--typedEventListeners-->
        <property name="typedEventListeners">
            <map>
                <entry key="PROCESS_STARTED">
                    <list>
                        <bean class="com.imooc.activiti.activitidemo.event.ProcessEventListener"></bean>
                    </list>
                </entry>
            </map>
        </property>
    </bean>


    <bean class="com.imooc.activiti.activitidemo.interceptor.MDCCommandInvoker" id="mdcCommandInvoker"/>

</beans>
java
 package com.imooc.activiti.activitidemo.event;

import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventListener;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Description 流程event
 * @Author 胡浩
 * @Date 2019/8/20
 **/
public class ProcessEventListener implements ActivitiEventListener {


    private static final Logger LOGGER = LoggerFactory.getLogger(ActivitiEventListener.class);

    @Override
    public void onEvent(ActivitiEvent activitiEvent) {
        ActivitiEventType eventType = activitiEvent.getType();
        if (ActivitiEventType.PROCESS_STARTED.equals(eventType)) {
            LOGGER.info("流程启动 {} \t {}", eventType, activitiEvent.getProcessInstanceId());
        } else if (ActivitiEventType.PROCESS_COMPLETED.equals(eventType)) {
            LOGGER.info("流程结束 {} \t {}", eventType, activitiEvent.getProcessInstanceId());
        }
    }

    @Override
    public boolean isFailOnException() {
        return false;
    }
}

2、手工定义的事件监听

   @Test
    @Deployment(resources = "mdc-process.bpmn20.xml")
    public void testConfig() {
        ProcessInstance processInstance = activitiRule.getRuntimeService().startProcessInstanceByKey("my-process");
        Task task = activitiRule.getTaskService().createTaskQuery().singleResult();
        activitiRule.getTaskService().complete(task.getId());

        //手工发送事件
        activitiRule.getRuntimeService().dispatchEvent(new ActivitiEventImpl(ActivitiEventType.CUSTOM));
    }

CustomEventListener

package com.imooc.activiti.activitidemo.event;

import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventListener;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Description 自定义event
 * @Author 胡浩
 * @Date 2019/8/20
 **/
public class CustomEventListener implements ActivitiEventListener {


    private static final Logger LOGGER = LoggerFactory.getLogger(ActivitiEventListener.class);

    @Override
    public void onEvent(ActivitiEvent activitiEvent) {
        ActivitiEventType eventType = activitiEvent.getType();
        if (ActivitiEventType.CUSTOM.equals(eventType)) {
            LOGGER.info("监听自定义事件 {} \t {}", eventType, activitiEvent.getProcessInstanceId());
        }
    }

    @Override
    public boolean isFailOnException() {
        return false;
    }
}

cfg

<?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 class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration"
          id="processEngineConfiguration">
        <!--<property name="commandInvoker" ref="mdcCommandInvoker"/>-->

        <!--eventListeners-->
        <property name="eventListeners">
            <list>
                <!--<bean class="com.imooc.activiti.activitidemo.event.ProcessEventListener"></bean>-->
                <bean class="com.imooc.activiti.activitidemo.event.CustomEventListener"></bean>
            </list>
        </property>

        <!--typedEventListeners-->
        <!--<property name="typedEventListeners">-->
            <!--<map>-->
                <!--<entry key="PROCESS_STARTED">-->
                    <!--<list>-->
                        <!--<bean class="com.imooc.activiti.activitidemo.event.ProcessEventListener"></bean>-->
                    <!--</list>-->
                <!--</entry>-->
            <!--</map>-->
        <!--</property>-->
    </bean>


    <bean class="com.imooc.activiti.activitidemo.interceptor.MDCCommandInvoker" id="mdcCommandInvoker"/>

</beans>

3、代码监听,不在cfg里配置

 @Test
    @Deployment(resources = "mdc-process.bpmn20.xml")
    public void testConfig() {
        ProcessInstance processInstance = activitiRule.getRuntimeService().startProcessInstanceByKey("my-process");
        Task task = activitiRule.getTaskService().createTaskQuery().singleResult();
        activitiRule.getTaskService().complete(task.getId());

        //代码监听
        activitiRule.getRuntimeService().addEventListener(new CustomEventListener());

        //手工发送事件
        activitiRule.getRuntimeService().dispatchEvent(new ActivitiEventImpl(ActivitiEventType.CUSTOM));

    }

相关文章

网友评论

    本文标题:Activiti流程引擎配置4-事件与监听器配置

    本文链接:https://www.haomeiwen.com/subject/pzpusctx.html