`
jeffen2006
  • 浏览: 259223 次
  • 性别: 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有了一个了解,哈哈!

相关推荐

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

    JBPM3.2与Spring的整合主要是为了实现任务调度的功能,这在企业级应用中是非常重要的,因为它能够自动化执行定时任务,如流程启动、数据同步、报告生成等。在JBPM3.1.x版本中,通过SpringModules提供的`spring-...

    简单的spring2+struts2+hibernate3.2+jbpm3应用框架

    【标题】"简单的spring2+struts2+hibernate3.2+jbpm3应用框架"揭示了一个经典的Java企业级开发架构,该框架整合了四个核心组件:Spring 2.x、Struts 2.x、Hibernate 3.2以及jBPM 3。这些技术在2000年代末到2010年代...

    jbpm简介\jbpm简介

    2. **低依赖性**:jBPM对企业应用的依赖性极小,可以轻松作为Java库使用,同时也适用于高吞吐量的J2EE集群应用服务器环境。 3. **广泛的数据库支持**:jBPM可以与任何数据库配置协同工作,并且可以在任何应用服务器...

    jbpm4案例源码

    这个"jbpm4案例源码"包含了jbpm4系统的核心组件和示例代码,帮助开发者深入理解jbpm4的工作原理和实践应用。《jBPM4工作流应用开发指南.pdf》这本书则进一步阐述了如何利用jbpm4来构建工作流应用。 jbpm4的核心功能...

    jbpm开发指南

    预配置的服务器集成了核心jBPM服务、集成数据库、jBPM控制台Web应用、调度程序和命令执行器,还有一个示例流程实例。 1.3 jBPM图形化流程设计器 jBPM提供了一个Eclipse插件形式的图形化流程设计器,该设计器支持...

    spring2_struts2_jbpm3.2.rar_jbpm struts2_jbpm-demo_jbpm3 spring_

    《Spring、Struts2与JBPM 3.2的整合应用详解》 在现代企业级应用开发中,Spring、Struts2和JBPM是三个重要的技术框架。Spring以其强大的依赖注入(DI)和面向切面编程(AOP)功能,为应用程序提供了灵活的基础架构...

    JBPM文档(详解)

    JBPM,全称Java Business Process Management,是一个开源的业务流程管理系统,致力于简化和自动化企业的流程性业务应用。它采用Apache License,为开发者提供了灵活且可扩展的流程业务处理框架。jBPM的核心优势在于...

    JBPM工作原理及表结构详解

    本文将深入探讨JBPM的工作原理、表结构及其在实际操作中的应用。 1. **JBPM特色** - **灵活的建模**:JBPM支持BPMN 2.0标准,允许用户通过图形化界面设计复杂的工作流程。 - **持久化存储**:JBPM将流程实例和...

    jbpm3.2.3可运行实例源码

    2. 将jbpm3.2.3的库添加到项目的类路径中,包括核心库、持久化库以及Web应用所需的库。 3. 配置jbpm的配置文件以指向你的数据库。 4. 部署"jbpm_web"到Web服务器,如Tomcat或Jetty。 5. 通过Web界面启动流程实例,...

    ssh整合jbpm5.4

    它提供了强大的动作调度、拦截器机制以及丰富的插件支持,使开发者能更好地组织和控制应用程序的行为。 Spring3.1则是一个全面的后端应用程序框架,提供了依赖注入(Dependency Injection,DI)、面向切面编程...

    jbpm中文教程-详细

    建议初学者首先阅读这份文档,理解jbpm的基本概念和操作,然后通过实际项目练习,掌握jbpm的实战应用。 总结,jbpm作为企业级的业务流程管理工具,其强大之处在于它提供的完整流程生命周期管理、灵活的流程定义和...

    jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍

    2. **图形化开发工具**:提供可视化流程控制台,便于随时调度运行中的流程。 3. **轻量级框架**:可以在任何应用服务器上发布,并且支持任意数据库。 4. **支持多种流程定义语言**:如 jPDL、WS-BPEL 和 Seam 框架的...

    JBPM工作流详解

    2. **运行控制功能**:在运行环境中管理工作流过程,对工作流过程中的活动进行调度; 3. **运行交互功能**:在工作流运行期间,WfMS与用户(活动参与者)及外部应用程序之间的交互功能。 采用工作流管理系统的优势...

    jbpm4.2 doc(JBPM开发文档)

    这个文档集合主要面向开发者,帮助他们理解和应用JBPM 4.2进行业务流程的开发和管理。 【核心概念】 1. **工作流引擎**:JBPM的核心组件,负责执行定义好的业务流程。它解析流程定义文件,调度任务,处理流程实例...

Global site tag (gtag.js) - Google Analytics