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

jbpm的调度应用3-end

阅读更多

timer如果在task中,有一个属性cancel-event,可以指定那些事件可以终止timer的执行,默认是task-end,也可以指定多个事件如:<timer duedate="2 business minutes" cancel-event="task-start, task-assign, task-end"></timer>。

下面举一个默认为task-end的例子:

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.    <task-node name='a'>  
  7.         <task name='reminder'>  
  8.             <timer name='reminder' duedate='5 seconds' repeat='3 seconds'  
  9.                      >  
  10.                 <script>System.out.println(new Date()+"----node enter:send mail to operator.");script>  
  11.             timer>  
  12.         task>  
  13.         <transition name="" to="end">transition>  
  14.     task-node>  
  15.    <end-state name="end">end-state>       
  16. process-definition>  

 

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生成,触发   
  36.                    token.signal();   
  37.                    System.out.println(token.getNode());   
  38.                    jbpmContext.save(processInstance);   
  39.                    //jbpm_timer表里有一条数据。timer将永久运行下去,直到taskinstance.end()   
  40.                    Thread.sleep(30*1000);//为模拟效果,此线程停止30秒   
  41.                    jbpmContext.getTaskInstance(1).start();   
  42.                    jbpmContext.getTaskInstance(1).end();//如果,屏蔽掉该句试试   
  43.                    System.out.println(token.getNode());       
  44.                    jbpmContext.save(processInstance);     
  45.             }catch(Exception e){   
  46.                 e.printStackTrace();   
  47.             }finally {   
  48.                   jbpmContext.close();   
  49.             }   
  50.         }   
  51.     }   
  52.            
  53.     public static void main(String[] args) {   
  54.         initSchedular ();   
  55.         MySchedularThread mst=new MySchedularThread();   
  56.         mst.start();   
  57.     }   
  58. }   

运行结果如下:

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 代码
  1. <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 楼 delphidoc 2007-07-19  
我用jbpmContext.deployProcessDefinition(processDefinition);发布流程后,jbpm_timer中没有我在流程中定义的timer,是什么原因引起的?
2 楼 hantsy 2007-06-27  
这是3.1的,jBPM 3.2中没有Scheduler
1 楼 liu_hua1984cf 2007-01-15  
我的怎么 不再jbpmContext.save(processInstance);后面加上
jbpmContext.close()数据库中就没有记录
调度就不执行

相关推荐

    jBPM-JPDL流程引擎

    3. **&lt;end-state&gt;**:流程的终点。 4. ****:定义用户任务,可以指定参与者和任务属性。 5. ****:在节点转换时执行的代码片段。 6. **&lt;sequence-flow&gt;**:定义节点之间的转移条件。 例如,一个简单的JPDL示例可能...

    jbpm4.4工作流开发指南pdf

    - **JBPM**:JBPM 是一个开源的工作流管理系统,它使用纯 Java 编写,可以方便地集成到 Java 应用中。JBPM 的设计目标是提供一个简单而强大的流程管理解决方案。 - **特性**: - 扩展性强:JBPM 允许开发者通过...

    jbpm4.4基本语法

    - **控制活动** 需要人为触发,如开始(Start)、等待(State)、任务(Task)、子过程(sub-process)、用户自定义(custom)、结束(end)、取消(end-cancel)、出错结束(end-error)、决策(decision)、流程分支(fork)和流程联合...

    jBPM4的PVM实现解析

    作为一个嵌入式的流程引擎,PVM可以被集成到任何Java应用中,为复杂的应用场景提供流程控制能力。 #### 二、PVM的关键概念 **1. 流程定义模型** - **ProcessDefinition**: 描述了整个流程的结构和逻辑,包括各个...

    JBPM 开发指南

    - **end-state**: 流程的结束点。 - **state**: 表示流程中的一个状态或阶段。 - **task-node**: 代表需要人工干预的任务节点。 - **fork/join**: 分支与合并操作。 - **decision**: 用于做出决策的节点。 - **...

    jBPM 帮助文档,帮助文档

    jBPM是一个可扩展且灵活的过程引擎,它可以作为独立服务器运行,也可以嵌入到任何Java应用程序中。jBPM能够运行多种过程语言,并支持多种执行模式。 **1.6 本用户指南内容** 本用户指南详细介绍了jBPM的各个方面,...

    Jbpm工作流笔记

    &lt;end-state name="end1"&gt;&lt;/end-state&gt; &lt;/process-definition&gt; ``` 2. **流程实例(Process Instance)**:流程定义在执行过程中的具体表现,每个实例都有自己的生命周期,包括开始时间、结束时间和可能的中间状态。...

    JBPM开发指南WORD文档

    JBPM不仅可以运行于任何JAVA应用服务器之上,还提供了丰富的API和工具,便于开发者进行流程设计和集成。 #### 二、JBPM入门与环境搭建 ##### 2.1 开始前的准备 在开始使用JBPM之前,需要先下载并配置好相应的开发...

    jbpm4.3表结构和表字段说明

    本文将深入解析jbpm4.3中的核心数据库表结构及其字段,帮助读者理解和掌握如何在实际应用中与这些表进行交互。 1. 表` JBPM_TASKINSTANCE `:这个表存储了任务实例的相关信息,包括任务ID(`TASKINSTANCE_ID`)、...

    深入浅出jBPM完整版part1

    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的作业描述语言,它允许定义工作流、协调器、包以及动作...

    深入浅出jBPM完整版part2

    2.13.2 BeanShell在jBPM中的用法........63 第 3 章 流程节点详解.....................................67 3.1 公共属性...................................................68 3.2 Node节点........................

    Activiti.in.Action

    ### Activiti.in.Action:工作流必备文档与JBPM最佳替代品 #### 概述 《Activiti.in.Action》是一本详细介绍Activiti工作流引擎的书籍,由Tijs Rademakers编写,并得到了Tom Baeyens和Joram Barrez的推荐。本书...

    Activiti6.0教程例子下载

    &lt;sequenceFlow id='flow3' sourceRef='verifyReportTask' targetRef='theEnd' /&gt; &lt;endEvent id="theEnd" /&gt; 这里对部分代码进行解释。 1) 文件的开头部分,这里的id对于Activiti来说, 应该叫做key。创建...

Global site tag (gtag.js) - Google Analytics