timer如果在task中,有一个属性cancel-event,可以指定那些事件可以终止timer的执行,默认是task-end,也可以指定多个事件如:。
下面举一个默认为task-end的例子:
- <!--sp-->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>
- 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() {//设置Schedular的属性
- 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());
- //一定要运行到有timer生成,触发
- token.signal();
- System.out.println(token.getNode());
- jbpmContext.save(processInstance);
- //jbpm_timer表里有一条数据。timer将永久运行下去,直到taskinstance.end()
- Thread.sleep(30*1000);//为模拟效果,此线程停止30秒
- 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就终止,可以这样配置
- <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 楼 keven7429 2013-10-09 16:29
2 楼 aoyama 2009-11-13 08:48
1 楼 aoyama 2009-11-13 08:48