jbpm知识点——timer、Scheduler

原创 2006年10月20日 10:01:00

定时器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的类型。这个属性没搞过呢。

调度这一块其实分成2部分,一个就是定时器,还有一个是调度服务。从jbpm的javadoc可以看到调度服务涉及了几个类,由于时间原因我还没有深入的研究过。


下面举一个简单的例子,运行一个定时器reminder,这个定时器立刻就运行duedate='0 seconds',频率是3seconds,执行的动作是输出timer running。这个定时器会在12秒后被定时器reminderend终结。
(有一个问题,终结是终结了但是SchedulerThread还在那等着,要回头再看看java的线程了。)
(还有一个问题,transition的用途还不是很明白?我以为运行12秒后流程就会跳转到end了。)

<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="" name="yytest">
    
<start-state>
        
<transition to="a"/>
    
</start-state>
    
<state name='a'>
     
<timer name='reminder' 
             
duedate='0 seconds' 
             repeat
='3 seconds'>
        
<script>System.out.println("timer running");</script>
     
</timer>
     
<timer name='reminderend' 
             
duedate='12 seconds'
             transition
='end'
             
>
        
<cancel-timer name='reminder'/>
     
</timer>
    
</state>
   
<end-state name="end"></end-state>
</process-definition>


 

private static void run(){
        JbpmContext jbpmContext 
= jbpmConfiguration.createJbpmContext();
        
try {
            
long processInstanceId =1;
               processInstance 
= jbpmContext.loadProcessInstance(processInstanceId);
               Token token 
= processInstance.getRootToken();
               
//schedulerSession = jbpmContext.getSchedulerSession();
               System.out.println(token.getNode());
               token.signal();
               System.out.println(token.getNode());
               
//Timer timer = (Timer) schedulerSession.findTimersByDueDate().next();
               
//timer.execute();
               SchedulerThread st=new SchedulerThread(jbpmConfiguration);
               
//st.executeTimers();
               st.run();
               
//token.signal();
               
//System.out.println(token.getNode());
               
//jbpmContext.save(processInstance);
            }
finally {
              jbpmContext.close();
            }

    }

运行结果如下:

StartState(159e154)
State(a)
timer running
timer running
timer running
timer running
(12秒后停止但是线程还在run)

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JBPM知识点------timer、Scheduler

定时器timer可以被用于decision fork join node process-state state super-state task-node,可以设置开始时间duedate和频率rep...

jbpm4.4 timer的使用

今天学习了jbpm4 的timer使用,一直测试都不成功:配置如下:                         &...

JBoss 系列四十一:jBPM5示例之 Timer Event

在BPM流程中,经常需要在执行某个任务之前或之后停顿一段时间,jBPM5中使用Timer Event完成这一操作,如下为DelayTimerEvent流程: 如图,DelayTimerEvent流...

jbpm知识点——tasknode

同fork等一样是一种节点类型。任务节点是jbpm中一个非常重要的概念,一个任务节点可以包含若干个任务(开始状态start-state只能有一个任务),不同的任务可以由不同的人来完成,任务实例被分配给...
  • tuwen
  • tuwen
  • 2007-09-27 11:15
  • 975

jbpm知识点——ContextInstance

上下文主要是用来操作变量的,其实在decision和ProcessState2的例子中已经使用过了。一般得到ContextInstance可以通过以下2种方式:ContextInstance cont...

JBPM知识点------timer、Scheduler

定时器timer可以被用于decision fork join node process-state state super-state task-node,可以设置开始时间duedate和频率rep...

java——知识点归纳总结

  • 2011-06-08 16:12
  • 62KB
  • 下载

ACM知识点——图论讲解

  • 2011-07-26 11:28
  • 18.18MB
  • 下载

黑马程序员——01Java基本数据类型小知识点

------- android培训、java培训、期待与您交流! ----------
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)