监听器的原理图
添加监听器的步骤与方法
创建一个新的流程 holiday.xml
在holiday.xml 添加上监听的代码
<?xml version="1.0" encoding="UTF-8"?>
<process name="holiday" xmlns="http://jbpm.org/4.4/jpdl">
<!-- 第一次 -->
<on event="start">
<event-listener class="cn.itcast.jbpm.h_event.MyEventListener"></event-listener>
</on>
<on event="end">
<event-listener class="cn.itcast.jbpm.h_event.MyEventListener"></event-listener>
</on>
<start name="start1" g="275,34,48,48">
<!-- 第二次 -->
<on event="end">
<event-listener class="cn.itcast.jbpm.h_event.MyEventListener"></event-listener>
</on>
<transition name="to 办理" to="办理" g="-45,-22"/>
</start>
<end name="end1" g="275,248,48,48">
<on event="start">
<event-listener class="cn.itcast.jbpm.h_event.MyEventListener"></event-listener>
</on>
</end>
<task name="办理" g="253,134,92,52">
<!-- 第三次 -->
<on event="start">
<event-listener class="cn.itcast.jbpm.h_event.MyEventListener"></event-listener>
</on>
<on event="end">
<event-listener class="cn.itcast.jbpm.h_event.MyEventListener"></event-listener>
</on>
<transition name="to end1" to="end1" g="-50,-22"/>
</task>
</process>
创建事件监听类 MyEventListener
package cn.itcast.jbpm.h_event;
import org.jbpm.api.listener.EventListener;
import org.jbpm.api.listener.EventListenerExecution;
public class MyEventListener implements EventListener {
@Override
//EventListenerExecution 继承 OpenExecution 获得流程中参数
public void notify(EventListenerExecution eventListenerExecution) throws Exception {
System.out.println("监听器执行了..........");
System.err.println("id :" + eventListenerExecution.getId());
System.err.println("key :" + eventListenerExecution.getKey());
System.err.println("name :" + eventListenerExecution.getName());
System.err.println("activity :" + eventListenerExecution.getActivity());
}
}
监听测试类 EventTest 先部署流程,在发布流程就可以在控制台中看到监听事件,所执行的次数与获取到的流程实例对象
package cn.itcast.jbpm.h_event;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.NewDeployment;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;
import org.junit.Test;
public class EventTest {
@Test
//部署流程
public void testDeploy(){
//获取引擎
ProcessEngine processEngine = org.jbpm.api.Configuration.getProcessEngine();
//获得实例管理service
RepositoryService repositoryService = processEngine.getRepositoryService();
//创建一个部署对象
NewDeployment createDeployment = repositoryService.createDeployment();
createDeployment.addResourceFromClasspath("holiday/holiday.jpdl.xml");
createDeployment.addResourceFromClasspath("holiday/holiday.png");
// 发布
createDeployment.deploy();
}
@Test
//测试启动流程
public void testStartProccess(){
ProcessEngine processEngine = org.jbpm.api.Configuration.getProcessEngine();
//启动流程 获得ExecutionService
ExecutionService executionService = processEngine.getExecutionService();
//启动 (通过看表才能知道id,使用较少)
// executionService.startProcessInstanceById("1");
//设计流程时,流程有name -----默认生成流程key
executionService.startProcessInstanceByKey("holiday");
}
}
监听成功 发布一次总共监听了 三次