`

JBPM中 使用JobExecutor执行timer定义的job

    博客分类:
  • JBPM
阅读更多
Job executor在jbpm.cfg.xml中是被缺省注释的,所以只要去掉此行即可通过JobExecutor来定时触发timer中的event-handler了
<jbpm-configuration>

  <import resource="jbpm.default.cfg.xml" />
  <import resource="jbpm.businesscalendar.cfg.xml" />
  <import resource="jbpm.tx.hibernate.cfg.xml" />
  <import resource="jbpm.jpdl.cfg.xml" />
  <import resource="jbpm.bpmn.cfg.xml" />
  <import resource="jbpm.identity.cfg.xml" />

  <!-- Job executor is excluded for running the example test cases. -->
  <!-- To enable timers and messages in production use, this should be included. -->
  <import resource="jbpm.jobexecutor.cfg.xml" />
   

</jbpm-configuration>


测试程序
/**
 * @author hzhlu
 */
public class CopyOfTimerRepeatTest extends JbpmTestCase {

	String	deploymentId;

	protected void setUp() throws Exception {
		super.setUp();

		deploymentId = repositoryService.createDeployment().addResourceFromClasspath(
				"org/jbpm/examples/timer/repeat/process.jpdl.xml").deploy();
	}

	protected void tearDown() throws Exception {
		repositoryService.deleteDeploymentCascade(deploymentId);

		super.tearDown();
	}

	public void testTimerRepeat() {
		ProcessInstance processInstance = executionService.startProcessInstanceByKey("TimerRepeat");

		// 查询进入状态后是否已经建立起timer job
		Job job = managementService.createJobQuery().processInstanceId(processInstance.getId()).uniqueResult();
		System.out.println("job info:" + job.getDueDate() + "  " + job.toString());

		assertNull(executionService.getVariable(processInstance.getId(), "escalations"));

 		String msg;
		for (int i = 0; i < 10; i++) {
			long difference = job.getDueDate().getTime() - System.currentTimeMillis();
 			msg = "Job触发倒计时: " + difference +   " check escalations:"
					+ executionService.getVariable(processInstance.getId(), "escalations");
			System.out.println(">>> " + msg);
 
			// 延时1秒
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
 				e.printStackTrace();
			}
		}

	 
	}
}



JPDL 定义文件,3秒钟后触发,然后每隔5秒再触发事件
<?xml version="1.0" encoding="UTF-8"?>

<process name="TimerRepeat" xmlns="http://jbpm.org/4.4/jpdl">

  <start g="19,50,48,48">
    <transition to="guardedWait" />
  </start>

  <state name="guardedWait" g="98,46,127,52">
    <on event="timeout1">
       <timer duedate="3 seconds" repeat="5 seconds" />
       <event-listener class="org.jbpm.examples.timer.repeat.Escalate" />
    </on>
    <transition name="go on" to="next step" g="-16,-17"/>
  </state>

  <state name="next step" g="283,46,83,53"/>

</process>



事件处理程序
public class Escalate implements EventListener {

	private static final long	serialVersionUID	= 1L;

	public void notify(EventListenerExecution execution) {
		System.out.println("Escalate.notify()");
		Integer escalations = (Integer) execution.getVariable("escalations");
		if (escalations == null) {
			execution.setVariable("escalations", 1);
		} else {
			execution.setVariable("escalations", escalations + 1);
		}
	}
}


执行结果
job info:2010-07-27 14:55:43.0  timer[9|2010-07-27 14:55:43|timeout1]
>>> Job触发倒计时: 2907 check escalations:null
>>> Job触发倒计时: 1907 check escalations:null
>>> Job触发倒计时: 891 check escalations:null
Escalate.notify()
>>> Job触发倒计时: -109 check escalations:1
>>> Job触发倒计时: -1125 check escalations:1
>>> Job触发倒计时: -2125 check escalations:1
>>> Job触发倒计时: -3125 check escalations:1
>>> Job触发倒计时: -4140 check escalations:1
Escalate.notify()
>>> Job触发倒计时: -5140 check escalations:2
>>> Job触发倒计时: -6140 check escalations:2

分享到:
评论
2 楼 shi12957 2012-08-08  
您好,我现在用JBPM4.4用到其定时器功能,我发现按照例子里面写的不能用,老提示inactive-scope,请问您遇到过类似的问题没?如何解决?谢谢
1 楼 liangfeng366 2011-07-13  

相关推荐

    BPM中 使用JobExecutor执行timer定义的job

    JBPM中 使用JobExecutor执行timer定义的job 使用此处中转,别人的资料。工作使用。

    jBPM 4使用手记

    在jBPM 4这个版本中,开发者可以利用其强大的功能来设计、执行和管理复杂的业务流程。本篇将深入探讨jBPM 4的关键特性和使用方法。 ### 1. jBPM概述 jBPM 4是基于Java的业务流程管理框架,它支持BPMN 2.0标准,...

    jBPM教学视频(02管理流程定义.zip)

    4. **部署流程定义**:解释如何将创建的流程定义打包成.jbpm文件,并在jBPM执行环境中部署,以便实例化和执行。 5. **流程实例的管理**:探讨如何启动新的流程实例,以及如何监控实例的状态,如挂起、激活、完成等...

    JBPM3.2与Spring结合时任务调度的实现.doc

    在3.1.x版本中,是通过`jbpm_timer`表来存储定时任务,而在3.2版本中,这个表被`jbpm_job`表所取代。这意味着后台线程会持续检查`jbpm_job`表,当发现需要触发的任务时,会根据任务的属性进行定时或循环执行。 在...

    jbpm3使用帮助,一本比较使用帮助

    2. **安装与配置**:学习如何在你的开发环境中安装jbpm3,配置数据库连接以及设置运行环境,这对于初学者来说是非常基础且重要的步骤。 3. **流程建模**:掌握使用jbpm3的流程建模工具,例如jBPM Designer,创建和...

    jbpm中文用户指南

    BPMN是一种图形化表示业务流程的方法,jbpm的用户指南会详细介绍如何使用BPMN符号来设计流程图,包括开始事件、结束事件、任务、网关、事件和数据对象等,以及它们在jbpm中的具体实现。 3. **jbpm工作流** 工作流...

    jBPM4.4 详解 API 中文

    工作流管理系统(WfMS)在其中扮演关键角色,它通过定义、执行和管理工作流,协调工作流执行过程中的工作与群体成员间的信息交互。具体而言,工作流管理系统需具备以下三项核心功能: 1. **定义工作流**:明确具体的...

    jBPM 4视频教程02管理流程定义

    在jBPM 4中,通常使用BPMN 1.1标准来创建流程定义,它可以表示如任务(Task)、事件(Event)、网关(Gateway)等元素。 2. **任务(Task)**:任务是流程中的工作单元,可以是员工完成的具体工作,如审批文档或...

    jbpm中文用户手册

    3. **持久化机制**:jbpm使用Hibernate作为默认的持久化框架,确保流程实例和相关数据在数据库中的存储和恢复。 4. **规则集成**:jbpm与Drools规则引擎紧密集成,允许在流程中嵌入决策逻辑,使流程更灵活。 5. **...

    jbpm中文教程-详细

    "JBPM用户指南.doc"文档是jbpm的重要参考资料,它详细介绍了如何使用jbpm进行流程设计、部署、执行以及相关的API使用方法。建议初学者首先阅读这份文档,理解jbpm的基本概念和操作,然后通过实际项目练习,掌握jbpm...

    jbpm使用简单示例

    jbpm的核心功能包括流程建模、部署、执行、监控以及管理,使得开发者能够轻松地创建、运行和优化复杂的业务流程。 **jbpm与Struts集成** Struts是经典的MVC(Model-View-Controller)框架,常用于构建Java Web应用...

    JBPM4 学习使用总结

    在深入学习和使用JBPM4的过程中,我们可以了解到其核心特性和应用场景,从而更好地理解和应用工作流技术。 ### 一、JBPM4核心概念 1. **工作流定义(Process Definition)**:工作流定义是业务流程的蓝图,用BPMN...

    JBPM4.4 使用之配置管理

    在JBPM4.4版本中,配置管理是确保系统稳定运行和流程优化的关键环节。以下将详细讲解与标题和描述相关的几个核心配置文件以及它们在JBPM中的作用。 1. **logging.properties**: 这个文件是用来配置日志记录的。在...

    jbpm显示执行位置demo

    在《partner4java 讲述jBPM4》的这篇文章中,作者可能详细解释了如何使用jBPM提供的API或工作台(jBPM Workbench)来获取当前流程实例的执行位置信息。 在图形化查看执行位置时,通常会显示一个流程图,其中当前...

    JBPM中的脚本语言代码例子

    在JBPM的部署中,BeanShell脚本通常以文本形式存在于流程定义(如 BPMN2 XML 文件)中,或者存储在数据库中,通过JBPM的API在运行时动态加载和执行。通过JBPM_BeanShell压缩包中的示例,你可以深入学习如何将...

    JBPM4.3中文表结构详解,中文名称、长度等

    15. **JBPM4_SWIMLANE**:泳道表,定义流程中的运行时角色,有助于多任务分配。 16. **JBPM4_TASK**:任务表,记录需要人工干预的任务实例。 17. **JBPM4_VARIABLE**:上下文表,存储流程运行时的临时变量。 18. ...

    jbpm4jbpm5

    手册中可能包含如何使用jbpm5的工具集(如Guvnor和Workbench)、部署流程、管理任务、监控运行时状态等内容。 4. **jbpm应用开发指引**: jbpm应用开发指面(胡奇).pdf可能是胡奇专家对jbpm应用开发的实践经验分享...

    jBPM4.3中文开发手册

    - **规则定义**: 使用DRL(Drools Rule Language)编写规则,并在流程中引用执行。 - **规则测试**: 提供规则单元测试,确保规则正确无误。 ### 5. 服务与事件 - **服务调用**: 可以在流程中集成外部服务,如Web...

    jbpm3.1中文文档

    jbpm是一个开源的工作流程管理系统,它提供了强大的业务流程建模、执行和管理能力,尤其适合在企业级应用中实现自动化的工作流。 工作流程管理系统(Workflow Management System,简称WfMS)是企业管理信息化的重要...

Global site tag (gtag.js) - Google Analytics