11-jbpm工作流之"事件处理Event"

Jbpm的事件处理:

        是通过在test.jpdl.xml中配置事件节点来处理的:

 注意:开始活动只有离开事件,结束活动只有进入事件

进入活动事件:

	<on event="start">
		<event-listener class="cn.edu.zust.itee.event.EventListenerImpl" />
	</on>
离开活动事件:

	<on event="end">
		<event-listener class="cn.edu.zust.itee.event.EventListenerImpl" />
	</on>
流程图:test.png


流程图配置文件test.jpdl.xml:通过配置事件处理类来实现事件驱动:EventListenerImpl.java实现EventListener接口

<?xml version="1.0" encoding="UTF-8"?>

<process name="test" xmlns="http://jbpm.org/4.4/jpdl">
	<on event="start">
		<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
	</on>
	<on event="end">
		<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
	</on>
	<start g="295,82,48,48" name="start1">
		<on event="end">
			<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
		</on>
		<transition g="-93,-22" name="to 部门经理审批" to="部门经理审批"/>
	</start>
	<task assignee="部门经理" g="277,183,92,52" name="部门经理审批">
		<on event="start">
			<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
		</on>
		<on event="end">
			<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
		</on>
		<transition g="-81,-22" name="to 总经理审批" to="总经理审批"/>
		<transition g="-50,-22" name="to end1" to="end1"/>
	</task>
	<task assignee="总经理" g="424,259,92,52" name="总经理审批">
		<on event="start">
			<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
		</on>
		<on event="end">
			<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
		</on>
		<transition g="-50,-22" name="to end1" to="end1"/>
	</task>
	<end g="289,380,48,48" name="end1">
		<on event="start">
			<event-listener class="cn.edu.zust.itee.event.EventListenerImpl"/>
		</on>

	</end>
</process>

事件处理类:EventListenerImpl.java

package cn.edu.zust.itee.event;

import org.jbpm.api.listener.EventListener;
import org.jbpm.api.listener.EventListenerExecution;

/**
 * @author 郑勇
 * 2013-7-11 16:05
 * 处理事件类
 */
public class EventListenerImpl implements EventListener {

	@Override
	public void notify(EventListenerExecution execution) throws Exception {
       System.out.println("触发事件了---:当前正在执行的事件是"+execution.getActivity());
	}

}

测试类:

package cn.edu.zust.itee.event;

import java.io.InputStream;

import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.junit.Test;

/**
 * @author Bob
 * 2013-07-11 16:03
 * 事件处理
 */
public class ProcessEvent {

	ProcessEngine processEngine = Configuration.getProcessEngine();
	
	@Test
	public void testProcessEvent(){
		
		//部署流程定义
		//获得当前包中的文件
		InputStream in = this.getClass().getResourceAsStream("test.jpdl.xml");
		processEngine.getRepositoryService()
		             .createDeployment()
		             .addResourceFromInputStream("test.jpdl.xml", in)
		             .deploy();
											
		
		//启动流程实例
		ProcessInstance pi = processEngine.getExecutionService()
					 .startProcessInstanceByKey("test");
		
		
		//完成"部门经理任务",并使用指定连线离开当前活动
		String taskId = processEngine.getTaskService().createTaskQuery() //查询出该流程实例中仅有的一个任务
									  .processInstanceId(pi.getId())
									  .uniqueResult()
									  .getId();
		//活动中都是可以有1个或多个Transition,需要指定不同的名称
		processEngine.getTaskService().completeTask(taskId,"to 总经理审批");
	}
}

测试结果:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
jbpm是一个开源的Java工作流引擎,它提供了一个框架和工具,用于定义、执行和管理业务流程。jbpm的持久层采用hibernate3来实现,这是因为jbpm的靠山是jboss,而hibernate是jboss的一个重要组成部分,因此选择了hibernate作为持久层的实现方式。 jbpm工作流引擎具有以下特点: . 灵活性:jbpm允许用户通过定义流程模型和规则来灵活地定义和修改业务流程。它支持基于图形化的流程设计器,使得流程定义更加直观和易于理解。 2. 可扩展性:jbpm提供了丰富的扩展点和插件机制,可以根据具体需求进行定制和扩展。用户可以自定义各种节点类型、执行器、监听器等,以满足不同的业务场景。 3. 可视化:jbpm提供了一个基于Web的控制台,用于监控和管理运行中的流程实例。用户可以实时查看流程状态、任务列表、流程历史等信息,方便进行流程管理和优化。 4. 高性能:jbpm采用了基于事件驱动的执行模型,能够高效地处理大量的并发流程实例。它支持异步执行、并行分支、定时器等功能,提供了良好的性能和可伸缩性。 5. 可靠性:jbpm具有良好的事务管理和异常处理机制,能够保证流程执行的一致性和可靠性。它支持分布式部署和集群模式,提供了高可用性和容错性。 总结起来,jbpm是一个功能强大、灵活可扩展的Java工作流引擎,适用于各种业务场景和规模的流程管理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值