JBPM4基础篇07-监听事件EventListener



在JBPM中配置监听,可以拦截某个任务节点的开始或者结束。

  1. event.jpdl.xml在设计器中的示意图:


    再来看看Source代码:
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2.   
    3. <process name="event" xmlns="http://jbpm.org/4.3/jpdl">  
    4.   
    5.     <on event="start">  
    6.         <event-listener class="org.wxp.ProcessEventListener" />  
    7.     </on>  
    8.     <on event="end">  
    9.         <event-listener class="org.wxp.ProcessEventListener" />  
    10.     </on>  
    11.   
    12.     <start g="178,107,48,48" name="start1">  
    13.         <on event="start">  
    14.             <event-listener class="org.wxp.ProcessEventListener" />  
    15.         </on>  
    16.         <on event="end">  
    17.             <event-listener class="org.wxp.ProcessEventListener" />  
    18.         </on>  
    19.         <transition name="to state1" to="state1" g="-59,-17" />  
    20.     </start>  
    21.     <end g="187,302,48,48" name="end1">  
    22.         <on event="start">  
    23.             <event-listener class="org.wxp.ProcessEventListener" />  
    24.         </on>  
    25.         <on event="end">  
    26.             <event-listener class="org.wxp.ProcessEventListener" />  
    27.         </on>  
    28.     </end>  
    29.     <state name="state1" g="207,222,92,52">  
    30.         <on event="start">  
    31.             <event-listener class="org.wxp.ProcessEventListener" />  
    32.         </on>  
    33.         <on event="end">  
    34.             <event-listener class="org.wxp.ProcessEventListener" />  
    35.         </on>  
    36.         <transition name="to end1" to="end1" g="-47,-17" />  
    37.     </state>  
    38. </process>  
    <?xml version="1.0" encoding="UTF-8"?>
    
    <process name="event" xmlns="http://jbpm.org/4.3/jpdl">
    
    	<on event="start">
    		<event-listener class="org.wxp.ProcessEventListener" />
    	</on>
    	<on event="end">
    		<event-listener class="org.wxp.ProcessEventListener" />
    	</on>
    
    	<start g="178,107,48,48" name="start1">
    		<on event="start">
    			<event-listener class="org.wxp.ProcessEventListener" />
    		</on>
    		<on event="end">
    			<event-listener class="org.wxp.ProcessEventListener" />
    		</on>
    		<transition name="to state1" to="state1" g="-59,-17" />
    	</start>
    	<end g="187,302,48,48" name="end1">
    		<on event="start">
    			<event-listener class="org.wxp.ProcessEventListener" />
    		</on>
    		<on event="end">
    			<event-listener class="org.wxp.ProcessEventListener" />
    		</on>
    	</end>
    	<state name="state1" g="207,222,92,52">
    		<on event="start">
    			<event-listener class="org.wxp.ProcessEventListener" />
    		</on>
    		<on event="end">
    			<event-listener class="org.wxp.ProcessEventListener" />
    		</on>
    		<transition name="to end1" to="end1" g="-47,-17" />
    	</state>
    </process>

  2. ProcessEventListener
    这个类是我们定义的一个实现了EventListener接口的实现类;在其方法中,输出一些信息来测试该方法是否被执行过。
    1. package org.wxp;  
    2.   
    3. import org.jbpm.api.listener.EventListener;  
    4. import org.jbpm.api.listener.EventListenerExecution;  
    5.   
    6. public class ProcessEventListener implements EventListener {  
    7.   
    8.     @Override  
    9.     public void notify(EventListenerExecution eventListenerExecution)  
    10.             throws Exception {  
    11.         System.out.println(eventListenerExecution);  
    12.     }  
    13.   
    14. }  
    package org.wxp;
    
    import org.jbpm.api.listener.EventListener;
    import org.jbpm.api.listener.EventListenerExecution;
    
    public class ProcessEventListener implements EventListener {
    
    	@Override
    	public void notify(EventListenerExecution eventListenerExecution)
    			throws Exception {
    		System.out.println(eventListenerExecution);
    	}
    
    }
    

  3. EventTest
    至此,需要测试一下是否流程的start和end事件被截获到
    1. package org.wxp;  
    2.   
    3. import junit.framework.TestCase;  
    4.   
    5. import org.jbpm.api.Configuration;  
    6. import org.jbpm.api.ExecutionService;  
    7. import org.jbpm.api.ProcessEngine;  
    8. import org.jbpm.api.RepositoryService;  
    9.   
    10. /** 
    11.  * 设定了事件监听器Listener,测试start和end事件 
    12.  *  
    13.  * 1.如果一个节点是从其直接开始,并没有上个节点的进入,那么这个节点的start事件就不执行 
    14.  * 2.state是等待过程,那么它的end事件就不会执行 
    15.  * @author Champion.Wong 
    16.  *  
    17.  */  
    18. public class EventTest extends TestCase {  
    19.     ProcessEngine processEngine;  
    20.   
    21.     public EventTest() {  
    22.         processEngine = Configuration.getProcessEngine();  
    23.     }  
    24.   
    25.     public void test() {  
    26.         RepositoryService repositoryService = processEngine  
    27.                 .getRepositoryService();  
    28.         String deploymentId = repositoryService.createDeployment()  
    29.                 .addResourceFromClasspath("event.jpdl.xml").deploy();  
    30.   
    31.         ExecutionService executionService = processEngine.getExecutionService();  
    32.         executionService.startProcessInstanceByKey("event");  
    33.     }  
    34. }  
    package org.wxp;
    
    import junit.framework.TestCase;
    
    import org.jbpm.api.Configuration;
    import org.jbpm.api.ExecutionService;
    import org.jbpm.api.ProcessEngine;
    import org.jbpm.api.RepositoryService;
    
    /**
     * 设定了事件监听器Listener,测试start和end事件
     * 
     * 1.如果一个节点是从其直接开始,并没有上个节点的进入,那么这个节点的start事件就不执行
     * 2.state是等待过程,那么它的end事件就不会执行
     * @author Champion.Wong
     * 
     */
    public class EventTest extends TestCase {
    	ProcessEngine processEngine;
    
    	public EventTest() {
    		processEngine = Configuration.getProcessEngine();
    	}
    
    	public void test() {
    		RepositoryService repositoryService = processEngine
    				.getRepositoryService();
    		String deploymentId = repositoryService.createDeployment()
    				.addResourceFromClasspath("event.jpdl.xml").deploy();
    
    		ExecutionService executionService = processEngine.getExecutionService();
    		executionService.startProcessInstanceByKey("event");
    	}
    }
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值