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
分享到:
相关推荐
JBPM中 使用JobExecutor执行timer定义的job 使用此处中转,别人的资料。工作使用。
在jBPM 4这个版本中,开发者可以利用其强大的功能来设计、执行和管理复杂的业务流程。本篇将深入探讨jBPM 4的关键特性和使用方法。 ### 1. jBPM概述 jBPM 4是基于Java的业务流程管理框架,它支持BPMN 2.0标准,...
4. **部署流程定义**:解释如何将创建的流程定义打包成.jbpm文件,并在jBPM执行环境中部署,以便实例化和执行。 5. **流程实例的管理**:探讨如何启动新的流程实例,以及如何监控实例的状态,如挂起、激活、完成等...
在3.1.x版本中,是通过`jbpm_timer`表来存储定时任务,而在3.2版本中,这个表被`jbpm_job`表所取代。这意味着后台线程会持续检查`jbpm_job`表,当发现需要触发的任务时,会根据任务的属性进行定时或循环执行。 在...
2. **安装与配置**:学习如何在你的开发环境中安装jbpm3,配置数据库连接以及设置运行环境,这对于初学者来说是非常基础且重要的步骤。 3. **流程建模**:掌握使用jbpm3的流程建模工具,例如jBPM Designer,创建和...
BPMN是一种图形化表示业务流程的方法,jbpm的用户指南会详细介绍如何使用BPMN符号来设计流程图,包括开始事件、结束事件、任务、网关、事件和数据对象等,以及它们在jbpm中的具体实现。 3. **jbpm工作流** 工作流...
工作流管理系统(WfMS)在其中扮演关键角色,它通过定义、执行和管理工作流,协调工作流执行过程中的工作与群体成员间的信息交互。具体而言,工作流管理系统需具备以下三项核心功能: 1. **定义工作流**:明确具体的...
在jBPM 4中,通常使用BPMN 1.1标准来创建流程定义,它可以表示如任务(Task)、事件(Event)、网关(Gateway)等元素。 2. **任务(Task)**:任务是流程中的工作单元,可以是员工完成的具体工作,如审批文档或...
3. **持久化机制**:jbpm使用Hibernate作为默认的持久化框架,确保流程实例和相关数据在数据库中的存储和恢复。 4. **规则集成**:jbpm与Drools规则引擎紧密集成,允许在流程中嵌入决策逻辑,使流程更灵活。 5. **...
"JBPM用户指南.doc"文档是jbpm的重要参考资料,它详细介绍了如何使用jbpm进行流程设计、部署、执行以及相关的API使用方法。建议初学者首先阅读这份文档,理解jbpm的基本概念和操作,然后通过实际项目练习,掌握jbpm...
jbpm的核心功能包括流程建模、部署、执行、监控以及管理,使得开发者能够轻松地创建、运行和优化复杂的业务流程。 **jbpm与Struts集成** Struts是经典的MVC(Model-View-Controller)框架,常用于构建Java Web应用...
在深入学习和使用JBPM4的过程中,我们可以了解到其核心特性和应用场景,从而更好地理解和应用工作流技术。 ### 一、JBPM4核心概念 1. **工作流定义(Process Definition)**:工作流定义是业务流程的蓝图,用BPMN...
在JBPM4.4版本中,配置管理是确保系统稳定运行和流程优化的关键环节。以下将详细讲解与标题和描述相关的几个核心配置文件以及它们在JBPM中的作用。 1. **logging.properties**: 这个文件是用来配置日志记录的。在...
在《partner4java 讲述jBPM4》的这篇文章中,作者可能详细解释了如何使用jBPM提供的API或工作台(jBPM Workbench)来获取当前流程实例的执行位置信息。 在图形化查看执行位置时,通常会显示一个流程图,其中当前...
在JBPM的部署中,BeanShell脚本通常以文本形式存在于流程定义(如 BPMN2 XML 文件)中,或者存储在数据库中,通过JBPM的API在运行时动态加载和执行。通过JBPM_BeanShell压缩包中的示例,你可以深入学习如何将...
15. **JBPM4_SWIMLANE**:泳道表,定义流程中的运行时角色,有助于多任务分配。 16. **JBPM4_TASK**:任务表,记录需要人工干预的任务实例。 17. **JBPM4_VARIABLE**:上下文表,存储流程运行时的临时变量。 18. ...
手册中可能包含如何使用jbpm5的工具集(如Guvnor和Workbench)、部署流程、管理任务、监控运行时状态等内容。 4. **jbpm应用开发指引**: jbpm应用开发指面(胡奇).pdf可能是胡奇专家对jbpm应用开发的实践经验分享...
- **规则定义**: 使用DRL(Drools Rule Language)编写规则,并在流程中引用执行。 - **规则测试**: 提供规则单元测试,确保规则正确无误。 ### 5. 服务与事件 - **服务调用**: 可以在流程中集成外部服务,如Web...
jbpm是一个开源的工作流程管理系统,它提供了强大的业务流程建模、执行和管理能力,尤其适合在企业级应用中实现自动化的工作流。 工作流程管理系统(Workflow Management System,简称WfMS)是企业管理信息化的重要...