以前开始接触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的深圳发布会。
分享到:
相关推荐
JBPM3.2与Spring的整合主要是为了实现任务调度的功能,这在企业级应用中是非常重要的,因为它能够自动化执行定时任务,如流程启动、数据同步、报告生成等。在JBPM3.1.x版本中,通过SpringModules提供的`spring-...
1. **嵌入式的工作流引擎**:jBPM采用嵌入式设计,这意味着它可以作为应用程序的一部分运行,无需额外的硬件投入,降低了网络和集群的复杂度。 2. **图形化开发工具**:提供可视化流程控制台,使得开发者可以通过...
这个"jbpm4案例源码"包含了jbpm4系统的核心组件和示例代码,帮助开发者深入理解jbpm4的工作原理和实践应用。《jBPM4工作流应用开发指南.pdf》这本书则进一步阐述了如何利用jbpm4来构建工作流应用。 jbpm4的核心功能...
例如,Spring作为中央调度者,管理Struts和Hibernate的生命周期,同时利用jBPM来处理流程控制。此外,这个框架也展示了如何在实际项目中实现模块化和分层设计,以提高代码的可读性和可维护性。 总的来说,"简单的...
预配置的服务器集成了核心jBPM服务、集成数据库、jBPM控制台Web应用、调度程序和命令执行器,还有一个示例流程实例。 1.3 jBPM图形化流程设计器 jBPM提供了一个Eclipse插件形式的图形化流程设计器,该设计器支持...
1. **jBPM流程定义**: - jBPM不遵循传统的WfMC's XPDL、BPML、ebXML或BPEL4WS等规范,而是使用自定义的jBoss jBPM Process Definition Language (jPdl)。jPdl基于UML状态图模型,使流程定义图形化,易于理解和维护...
本文将深入探讨JBPM的工作原理、表结构及其在实际操作中的应用。 1. **JBPM特色** - **灵活的建模**:JBPM支持BPMN 2.0标准,允许用户通过图形化界面设计复杂的工作流程。 - **持久化存储**:JBPM将流程实例和...
建议初学者首先阅读这份文档,理解jbpm的基本概念和操作,然后通过实际项目练习,掌握jbpm的实战应用。 总结,jbpm作为企业级的业务流程管理工具,其强大之处在于它提供的完整流程生命周期管理、灵活的流程定义和...
1. 配置并启动数据库,确保jbpm需要的表存在。 2. 将jbpm3.2.3的库添加到项目的类路径中,包括核心库、持久化库以及Web应用所需的库。 3. 配置jbpm的配置文件以指向你的数据库。 4. 部署"jbpm_web"到Web服务器,如...
jBPM 可以在任何 JavaEE 应用服务器或配置了 JDBC 的 JVM 上运行。 #### 二、选择 jBPM 的十大理由 1. **嵌入式工作流引擎**:jBPM 作为嵌入式引擎减少了硬件投入,降低了网络和集群的复杂度。 2. **图形化开发工具...
- **运行控制功能**:在运行环境中管理工作流过程,对工作流过程中的活动进行调度。 - **运行交互功能**:在工作流运行中,WfMS与用户(活动的参与者)及外部应用程序工具交互的功能。 **3. 采用工作流管理系统的...
2. **运行控制功能**:在运行环境中管理工作流过程,对工作流过程中的活动进行调度; 3. **运行交互功能**:在工作流运行期间,WfMS与用户(活动参与者)及外部应用程序之间的交互功能。 采用工作流管理系统的优势...
它提供了强大的动作调度、拦截器机制以及丰富的插件支持,使开发者能更好地组织和控制应用程序的行为。 Spring3.1则是一个全面的后端应用程序框架,提供了依赖注入(Dependency Injection,DI)、面向切面编程...
这个文档集合主要面向开发者,帮助他们理解和应用JBPM 4.2进行业务流程的开发和管理。 【核心概念】 1. **工作流引擎**:JBPM的核心组件,负责执行定义好的业务流程。它解析流程定义文件,调度任务,处理流程实例...