timer如果在task中,有一个属性cancel-event,可以指定那些事件可以终止timer的执行,默认是task-end,也可以指定多个事件如:<timer duedate="2 business minutes" cancel-event="task-start, task-assign, task-end"></timer>。
下面举一个默认为task-end的例子:
xml 代码
- <!---->xml version="1.0" encoding="UTF-8"?>
- <process-definition xmlns="" name="yytest">
- <start-state name="start">
- <transition name="" to="a">transition>
- start-state>
- <task-node name='a'>
- <task name='reminder'>
- <timer name='reminder' duedate='5 seconds' repeat='3 seconds'
- >
- <script>System.out.println(new Date()+"----node enter:send mail to operator.");script>
- timer>
- task>
- <transition name="" to="end">transition>
- task-node>
- <end-state name="end">end-state>
- process-definition>
java 代码
- package com.jeffentest;
-
- import org.jbpm.*;
- import org.jbpm.graph.def.ProcessDefinition;
- import org.jbpm.graph.exe.*;
- import org.jbpm.scheduler.impl.Scheduler;
-
-
- public class Jeffentest {
- static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
- static ProcessDefinition processDefinition = null;
- static ProcessInstance processInstance = null;
- static Scheduler scheduler = null;
-
- public static void initSchedular() {
- scheduler = new Scheduler();
- int interval = 5000;
- scheduler.setInterval(interval);
- int historyMaxSize = 0;
- scheduler.setHistoryMaxSize(historyMaxSize);
- scheduler.start();
- }
-
- public static void destroy() {
- scheduler.stop();
- }
- static class MySchedularThread extends Thread{
- public void run(){
- JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
- try {
- long processInstanceId =1;
- processInstance = jbpmContext.loadProcessInstance(processInstanceId);
- Token token = processInstance.getRootToken();
- System.out.println(token.getNode());
-
- token.signal();
- System.out.println(token.getNode());
- jbpmContext.save(processInstance);
-
- Thread.sleep(30*1000);
- jbpmContext.getTaskInstance(1).start();
- jbpmContext.getTaskInstance(1).end();
- System.out.println(token.getNode());
- jbpmContext.save(processInstance);
- }catch(Exception e){
- e.printStackTrace();
- }finally {
- jbpmContext.close();
- }
- }
- }
-
- public static void main(String[] args) {
- initSchedular ();
- MySchedularThread mst=new MySchedularThread();
- mst.start();
- }
- }
运行结果如下:
StartState(start)
TaskNode(a)
Fri Dec 08 11:22:17 CST 2006----node enter:send mail to operator.
Fri Dec 08 11:22:22 CST 2006----node enter:send mail to operator.
Fri Dec 08 11:22:27 CST 2006----node enter:send mail to operator.
Fri Dec 08 11:22:32 CST 2006----node enter:send mail to operator.
Fri Dec 08 11:22:37 CST 2006----node enter:send mail to operator.
Fri Dec 08 11:22:42 CST 2006----node enter:send mail to operator.
EndState(end)
如果想要task启动的时候,timer就终止,可以这样配置
xml 代码
- <timer name='reminder' duedate='5 seconds' repeat='3 seconds' cancel-event='task-start'>
结果如下:
StartState(start)
TaskNode(a)
Fri Dec 08 11:35:59 CST 2006----node enter:send mail to operator.
Fri Dec 08 11:36:04 CST 2006----node enter:send mail to operator.
Fri Dec 08 11:36:09 CST 2006----node enter:send mail to operator.
Fri Dec 08 11:36:14 CST 2006----node enter:send mail to operator.
Fri Dec 08 11:36:19 CST 2006----node enter:send mail to operator.
TaskNode(a)
好了调度的应用就说这么多吧。没人了,赶紧去吃饭。
分享到:
相关推荐
3. **<end-state>**:流程的终点。 4. ****:定义用户任务,可以指定参与者和任务属性。 5. ****:在节点转换时执行的代码片段。 6. **<sequence-flow>**:定义节点之间的转移条件。 例如,一个简单的JPDL示例可能...
- **JBPM**:JBPM 是一个开源的工作流管理系统,它使用纯 Java 编写,可以方便地集成到 Java 应用中。JBPM 的设计目标是提供一个简单而强大的流程管理解决方案。 - **特性**: - 扩展性强:JBPM 允许开发者通过...
- **控制活动** 需要人为触发,如开始(Start)、等待(State)、任务(Task)、子过程(sub-process)、用户自定义(custom)、结束(end)、取消(end-cancel)、出错结束(end-error)、决策(decision)、流程分支(fork)和流程联合...
作为一个嵌入式的流程引擎,PVM可以被集成到任何Java应用中,为复杂的应用场景提供流程控制能力。 #### 二、PVM的关键概念 **1. 流程定义模型** - **ProcessDefinition**: 描述了整个流程的结构和逻辑,包括各个...
- **end-state**: 流程的结束点。 - **state**: 表示流程中的一个状态或阶段。 - **task-node**: 代表需要人工干预的任务节点。 - **fork/join**: 分支与合并操作。 - **decision**: 用于做出决策的节点。 - **...
jBPM是一个可扩展且灵活的过程引擎,它可以作为独立服务器运行,也可以嵌入到任何Java应用程序中。jBPM能够运行多种过程语言,并支持多种执行模式。 **1.6 本用户指南内容** 本用户指南详细介绍了jBPM的各个方面,...
<end-state name="end1"></end-state> </process-definition> ``` 2. **流程实例(Process Instance)**:流程定义在执行过程中的具体表现,每个实例都有自己的生命周期,包括开始时间、结束时间和可能的中间状态。...
JBPM不仅可以运行于任何JAVA应用服务器之上,还提供了丰富的API和工具,便于开发者进行流程设计和集成。 #### 二、JBPM入门与环境搭建 ##### 2.1 开始前的准备 在开始使用JBPM之前,需要先下载并配置好相应的开发...
本文将深入解析jbpm4.3中的核心数据库表结构及其字段,帮助读者理解和掌握如何在实际应用中与这些表进行交互。 1. 表` JBPM_TASKINSTANCE `:这个表存储了任务实例的相关信息,包括任务ID(`TASKINSTANCE_ID`)、...
2.13.2 BeanShell在jBPM中的用法........63 第 3 章 流程节点详解.....................................67 3.1 公共属性...................................................68 3.2 Node节点........................
在实际应用中,Oozie工作流的编写通常基于XML描述语言,类似于JBoss jBPM中使用的jPDL。Oozie的工作流描述语言hpDL(Process Definition Language)类似于Hadoop的作业描述语言,它允许定义工作流、协调器、包以及动作...
2.13.2 BeanShell在jBPM中的用法........63 第 3 章 流程节点详解.....................................67 3.1 公共属性...................................................68 3.2 Node节点........................
### Activiti.in.Action:工作流必备文档与JBPM最佳替代品 #### 概述 《Activiti.in.Action》是一本详细介绍Activiti工作流引擎的书籍,由Tijs Rademakers编写,并得到了Tom Baeyens和Joram Barrez的推荐。本书...
<sequenceFlow id='flow3' sourceRef='verifyReportTask' targetRef='theEnd' /> <endEvent id="theEnd" /> 这里对部分代码进行解释。 1) 文件的开头部分,这里的id对于Activiti来说, 应该叫做key。创建...