论坛首页 Java企业应用论坛

关于jbpm的任务调度和工作日历(1)

浏览 6383 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-26  

作者: wf_7758520 ( name: wangfeng, email: wf_7758520 @163.com , blog:http:// wf_7758520 .iteye.com )

jBPM通过定时器(timer)实现日程调度。在node中加入timer元素,即可实现基于定时器的节点执行监控。

//运用action的timer的例子<state name="catch crooks"></state> 

xml 代码
  1. <state name='catch crooks'>  
  2.   <timer name='reminder' duedate='3 business hours' repeat='10 business minutes'  
  3.       transition='time-out-transition' >  
  4.     <action class='the-remainder-action-class-name' />  
  5.   timer>     
  6. state>  

 //运用script的timer的例子

xml 代码

  1. <state name='catch crooks'>  
  2.   <timer name='reminder' duedate='3 business hours' repeat='10 business minutes'  
  3.       transition='time-out-transition' >  
  4.     <script>System.out.println(new Date())script>    
  5.   timer>     
  6. state>  

在上例中,一旦流程实例运行进入state 'catch crooks',定时器reminder即被创建。该定时器在3个工作小时到期,到期后马上执行action类中的Java代码,然后实施time-out-transition(或script打印时间)迁移。
通过在事件的action中加入create-timer和cancel-timer动作,可以分别实现事件对定时器的创建和取消。
定时器timer可以被用于decision fork join node process-state state super-state task-node,可以设置开始时间duedate和频率repeat,定时器动作可以是所支持的任何动作元素,如action或script,会运行我们设置的商务动作。定时器通过动作创建和取消,有两个动作元素create-timer和cancel-timer。事实上,默认的定时器元素只是create-timer动作依附于node-enter事件、cancel-timer动作依附于node-leave事件的一个简略表示。
timer还有一个很重要的属性cancel-event,这个是timer和task结合时使用的,任务定时器的cancel-event可以被定制。默认情况下,当任务被结束时(=完成)任务上的定时器将被取消,这是通过在定时器上使用cancel-event属性,流程开发者可以定制诸如task-assign或task-start。cancel-event支持多个事件,通过在属性中指定一个用逗号分割的列表,可以组合cancel-event的类型。

另注: 运用timer要先启动scheduler,scheduler的启动代码如下

  1. public static void initSchedular() {// 设置Schedular的属性   
  2.   
  3.         scheduler = new Scheduler();   
  4.   
  5.        int interval = 5000;   
  6.   
  7.         scheduler.setInterval(interval);   
  8.   
  9.        int historyMaxSize = 0;   
  10.   
  11.         scheduler.setHistoryMaxSize(historyMaxSize);   
  12.   
  13.         scheduler.start();   
  14.   
  15.     }   
  16.   
  17.     public static void destroy() {    
  18.   
  19.         scheduler.stop();   
  20.   
  21.     }   
 

但在实际的项目中不会这样用,如果是web项目则只要在web.xml中配置JbpmThreadsServlet,这样在项目启动后会自动开启scheduler。

 

JbpmThreadsServlet配置如下:          

xml 代码
  1. <!---->  
  2. <servlet>  
  3. <servlet-name>JbpmThreadsServletservlet-name>  
  4. <servlet-class>org.jbpm.web.JbpmThreadsServletservlet-class>  
  5. <load-on-startup>1load-on-startup>  
  6. servlet>  
  7. <servlet-mapping>  
  8. <servlet-name>JbpmThreadsServletservlet-name>  
  9. <url-pattern>/threadsurl-pattern>  
  10. servlet-mapping>   

  

\\下一节介绍工作日历

 

 

   发表时间:2007-08-15  
我也写了一个例子,为什么我在web.xml中配置如下。我的timer(计时器怎么不执行)??高手能否指名一下
0 请登录后投票
   发表时间:2007-10-30  
这个timer是2.0中的吧?????3.2中已经取消了?还是已经换了一种方式?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics