以前开始接触jbpm的时候,也曾经发表了一篇关于调度的文章http://blog.csdn.net/jeffen2006/archive/2006/10/20/1342167.aspx,其中有很多不甚了解的东东,这几天又研究了一下,共享给各位学友。
本系列仅从应用的角度出发进行介绍:
jbpm的调度部分只要分为2块,timer主要是流程设计人员的工作,将timer放置到流程中;scheduler是jbpm自己维护的,我们只需要在后台进行调用即可。
根据吃甘蔗的方法,我们先说相对容易一点的scheduler。我们可以认为scheduler就是一个后台线程在不停的监听着timer(jbpm_timer表),如果有需要触发的timer生成了,就按照timer的属性定时或者循环触发它。
jbpm提供了2种调用scheduler的方法:
一种是用在web应用的,采用org.jbpm.scheduler.impl.SchedulerServlet,具体的方法这个类的javadoc有很好的示例,我们只需在web.xml中加载它就行了;
另一种是针对的c-s程序,jbpm提供了一个很好的示例org.jbpm.scheduler.impl.SchedulerMain,我们可以参照它编写我们自己的Scheduler。
下面我就编写一个cs程序来实现Scheduler,并调用一个最简单的timer。
这个timer从第5秒开始每隔3秒执行script中的内容。
xml 代码
- <!---->xml version="1.0" encoding="UTF-8"?>
- <process-definition xmlns="" name="yytest">
- <start-state name="start">
- <transition name="" to="a">transition>
- start-state>
- <state name="a">
- <timer name='reminder'
- duedate='5 seconds'
- repeat='3 seconds'
- >
- <script>System.out.println(new Date()+"----node enter:send mail to operator.");script>
- timer>
- <transition name="" to="end">transition>
- state>
- <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);
-
- token.signal();
- 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)
State(a)
Thu Dec 07 13:17:11 CST 2006----node enter:send mail to operator.
Thu Dec 07 13:17:16 CST 2006----node enter:send mail to operator.
Thu Dec 07 13:17:21 CST 2006----node enter:send mail to operator.
Thu Dec 07 13:17:26 CST 2006----node enter:send mail to operator.
Thu Dec 07 13:17:31 CST 2006----node enter:send mail to operator.
EndState(end)
scheduler就先说这么多了,至于timer等我下篇吧,等下要去参加jbuilder2007的深圳发布会。
分享到:
相关推荐
1 章 helloworld..............................................2 1.1 下载开发套件.............................................2 1.2 安装流程设计器 .........................................7 1.3 jBPM版...
1 章 helloworld..............................................2 1.1 下载开发套件.............................................2 1.2 安装流程设计器 .........................................7 1.3 jBPM版...
Azkaban是LinkedIn开源的任务调度框架,类似于JavaEE中的JBPM和Activiti工作流框架。Azkaban功能和特点:1,任务的依赖处理。2,任务监控,失败告警。3,任务流的可视化。4,任务权限管理。常见的任务调度框架有...
Activiti 是由 jBPM 的创建者 Tom Baeyens 离开 JBoss 之后建立的项目,构建在开发 jBPM 版本 1 到 4 时积累的多年经验的基础之上,旨在创建下一代的 BPM 解决方案。 Activiti是一个开源的工作流引擎,它实现了...
Activiti 是由 jBPM 的创建者 Tom Baeyens 离开 JBoss 之后建立的项目,构建在开发 jBPM 版本 1 到 4 时积累的多年经验的基础之上,旨在创建下一代的 BPM 解决方案。 Activiti是一个开源的工作流引擎,它实现了...
第1章 Spring简介 1 1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用...
2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。 Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于Java的超快速、超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌入性...
第1章 Spring简介 1 1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用...
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 ...
Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。 Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于 Java 的超快速、超...