`
jeffen2006
  • 浏览: 255101 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jbpm的调度应用2

阅读更多

上篇介绍了通过跳过节点可以终止timer,其实也可以直接在流程定义里设置timer的终止,就是使用cancel-timer元素。

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <process-definition xmlns="" name="yytest">  
  3.    <start-state name="start">  
  4.       <transition name="" to="a"></transition>  
  5.    </start-state>  
  6.    <state name='a'>  
  7.      <timer name='reminder'    
  8.              duedate='0 seconds'    
  9.              repeat='3 seconds'>  
  10.         <script>System.out.println(new Date()+"----node enter:send mail to operator.");</script>  
  11.      </timer>  
  12.      <timer name='reminderend'    
  13.              duedate='12 seconds'  
  14.              transition='toend'  
  15.              >  
  16.         <script>System.out.println(new Date()+"----canceled timer");</script>  
  17.         <cancel-timer name='reminder'/>  
  18.      </timer>  
  19.      <transition name="toend" to="end"></transition>  
  20.     </state>  
  21.    <end-state name="end"></end-state>       
  22. </process-definition>  

reminderend 这个定时器,在12秒后调用cancel-timer终止定时器reminder,同时按照指定的transition结束流程。

java 代码
  1. package com.jeffentest;   
  2.   
  3. import org.jbpm.*;   
  4. import org.jbpm.graph.def.ProcessDefinition;   
  5. import org.jbpm.graph.exe.*;   
  6. import org.jbpm.scheduler.impl.Scheduler;   
  7.   
  8.   
  9. public class Jeffentest {   
  10.     static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();   
  11.     static ProcessDefinition processDefinition = null;   
  12.     static ProcessInstance processInstance = null;   
  13.     static Scheduler scheduler = null;   
  14.   
  15.     public static void initSchedular() {//设置Schedular的属性   
  16.         scheduler = new Scheduler();   
  17.         int interval = 5000;   
  18.         scheduler.setInterval(interval);   
  19.         int historyMaxSize = 0;   
  20.         scheduler.setHistoryMaxSize(historyMaxSize);   
  21.         scheduler.start();   
  22.     }   
  23.          
  24.     public static void destroy() {//这个例子没用到   
  25.         scheduler.stop();   
  26.     }   
  27.     static class MySchedularThread extends Thread{//实际业务处理线程   
  28.         public void run(){   
  29.             JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();   
  30.             try {   
  31.                 long processInstanceId =1;   
  32.                    processInstance = jbpmContext.loadProcessInstance(processInstanceId);   
  33.                    Token token = processInstance.getRootToken();   
  34.                    System.out.println(token.getNode());   
  35.                    //一定要运行到有timer生成,触发<timer name='reminder'>   
  36.                    token.signal();   
  37.                    System.out.println(token.getNode());   
  38.                    jbpmContext.save(processInstance);   
  39.                    //jbpm_timer表里数据被清空、同时可以看jbpm_processinstance.end_,该流程实例也结束了   
  40.             }catch(Exception e){   
  41.                 e.printStackTrace();   
  42.             }finally {   
  43.                   jbpmContext.close();   
  44.             }   
  45.         }   
  46.     }   
  47.            
  48.     public static void main(String[] args) {   
  49.         initSchedular ();   
  50.         MySchedularThread mst=new MySchedularThread();   
  51.         mst.start();   
  52.     }   
  53. }   

 

运行结果:

StartState(start)
State(a)
Fri Dec 08 10:22:26 CST 2006----node enter:send mail to operator.
Fri Dec 08 10:22:31 CST 2006----node enter:send mail to operator.
Fri Dec 08 10:22:33 CST 2006----node enter:send mail to operator.
Fri Dec 08 10:22:33 CST 2006----canceled timer

说明一下,我的这两个例子都是基于state的,如果采用node则不会给timer运行的机会。

timer还有几个特殊属性是针对task节点的,见下篇吧。

分享到:
评论
1 楼 tomkoo 2006-12-13  
现在项目中还没有要用到Timer的地方,不过看了这个系列的文章以后,也对Timer有了一个了解,哈哈!

相关推荐

    深入浅出jBPM完整版part1

    7 章 应用.....................................................156 7.1 创建工程.................................................156 7.2 配置jBPM................................................158 7.3 ...

    深入浅出jBPM完整版part2

    7 章 应用.....................................................156 7.1 创建工程.................................................156 7.2 配置jBPM................................................158 7.3 ...

    基于Azkaban的任务定时调度实践

    Azkaban是LinkedIn开源的任务调度框架,类似于JavaEE中的JBPM和Activiti工作流框架。Azkaban功能和特点:1,任务的依赖处理。2,任务监控,失败告警。3,任务流的可视化。4,任务权限管理。常见的任务调度框架有...

    Activiti流程设计器代码

    Activiti 是由 jBPM 的创建者 Tom Baeyens 离开 JBoss 之后建立的项目,构建在开发 jBPM 版本 1 到 4 时积累的多年经验的基础之上,旨在创建下一代的 BPM 解决方案。 Activiti是一个开源的工作流引擎,它实现了...

    Activiti示例程序[流氓兔].zip

    Activiti 是由 jBPM 的创建者 Tom Baeyens 离开 JBoss 之后建立的项目,构建在开发 jBPM 版本 1 到 4 时积累的多年经验的基础之上,旨在创建下一代的 BPM 解决方案。 Activiti是一个开源的工作流引擎,它实现了...

    Spring攻略(第二版 中文高清版).part2

    11.6 为一个应用的领域类生成CRUD控制器和视图 454 11.6.1 问题 454 11.6.2 解决方案 454 11.6.3 工作原理 455 11.7 国际化(I18n)信息属性 458 11.7.1 问题 458 11.7.2 解决方案 458 11.7.3 工作原理...

    Spring攻略(第二版 中文高清版).part1

    11.6 为一个应用的领域类生成CRUD控制器和视图 454 11.6.1 问题 454 11.6.2 解决方案 454 11.6.3 工作原理 455 11.7 国际化(I18n)信息属性 458 11.7.1 问题 458 11.7.2 解决方案 458 11.7.3 工作原理...

    JBOSS ESB程序员指南

    11.6. Quartz日程调度器的属性配置 56 12. 第十章 配置 57 12.1. 概述 57 12.2. 提供者 57 12.3. 服务 58 12.4. 特殊类型的传输实现 61 12.5. FTP 提供者配置 62 12.6. FTP 监听器配置 63 12.7. Read-only FTP ...

    积分管理系统java源码-activiti-service:工作流实例教程

    2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。 Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于Java的超快速、超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌入性...

    Activiti6.0教程例子下载

    Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。 Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于 Java 的超快速、超...

Global site tag (gtag.js) - Google Analytics