`
ginge
  • 浏览: 211943 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jBPM的定时器(Timer)及任务执行器(JobExecutor)

    博客分类:
  • JBPM
阅读更多

定时器(Timer)可以说是jBPM的标准配置了,在多种节点,如Task-NodeNodeforkJoin等,都可以有Timer子元素。

 

声明一个定时器

<state name='catch crooks'>

  <timer name='reminder' 

         duedate='3 business hours' 

         repeat='10 business minutes'

         transition='time-out-transition' >

    <action class='the-remainder-action-class-name' />

  </timer>

  <transition name='time-out-transition' to='...' />

</state>

 

 

定时器的属性:

name:           定时器名称

duedate:         预期触发时间

repeat:          每次执行间隔

 

定时器的子元素:

transition:        当定时器执行时将通过的跃迁(transition)路径名称

action:           定时器触发时执行的动作

 

上述属性和元素只有dudate是必要的。其他都是可选的。

 

duedate语法:

duedate ::= [<basedate> +/-] <duration>

如果忽略basedate,那么basedate就是计算这个公式的时间,例如进入一个task-node后创建timer的时刻

 

duration ::= <quantity> [business] <unit>

unitsecond, seconds, minute, minutes, hour, hours, day, days, week, weeks, month, months, year, years

如果忽略business,那么计算出来的duration会是一个绝对时间

 

配置例子:

<timer repeat="30 days" name="task-reminder" duedate="01 business day">

               <action class="com.sample.action.TaskReminder"></action>

</timer>

 

 

 

执行Token一旦通过signal或者终止任务(Task)的方式离开当前节点,定时器也就被取消了。当定时器执行时,以下事件将依次发生:

  • 发生定时器事件
  • 如果指定了动作(Action),那么该动作将被执行
  • 如果指定的跃迁(transition)路径,那么一个继续执行的指令将被发出,且执行Token会通过该跃迁(transition)路径

 

 

如果需要启用timer,则需要scheduler服务及启动JobExecutor。根据经验,jBPM中使用hsqldb数据库是启动不了timer的,使用mysql的就可以。我想这个会不会是因为使用hsqldb时,数据没有提交,导致JobExecutor查询数据库时查不到数据呢?

 

另外,可以通过以下代码来启动JobExecutor

private void startJobExecutor()

    {

        JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();

        //start job executor

        jbpmConfiguration.getJobExecutor().start();

        log.info("JobExecutor started.");

    }

 

 

需要注意的是,由于jBPM要求使用的是数据库隔离级别是Read-Committed还有乐观锁机制,使用timer很容易导致StaleObjectException。原因是JobExecutor会不断的更新token,业务代码端在提交事务的时候会发现记录的version被更新了,从而导致出现该异常。

3
0
分享到:
评论
1 楼 taga 2009-04-15  
如何取消呢?

相关推荐

    JBPM4 java源代码分包详解JBPM4

    14. **org.jbpm.pvm.internal.jobexecutor**: 提供任务执行器,包括`JobExecutorServlet`、线程池及各种命令和处理器,负责调度和执行job、message和timer。 15. **org.jbpm.pvm.internal.lob**: 处理流程发布时的...

    jbpm-7.3.0.Final-bin 工作流

    **ejb服务与定时器**:jbpm-services-ejb-timer-7.3.0.Final.jar和jbpm-services-ejb-client-7.3.0.Final.jar提供了基于EJB的定时服务和客户端接口,使得jBPM能够集成到Java EE环境中,实现定时触发流程事件或任务。...

    jbpm数据库表结构

    - **JBPM_TASKCONTROLLER**:流程任务控制器,控制任务的执行。 #### 三、总结 JBPM的数据库表结构设计得相当全面和细致,涵盖了从流程定义到执行过程中的各个方面。通过对这些表结构的理解,不仅可以帮助开发者...

    JBPM数据库表关系

    - **JBPM_TIMER**: 计时器,定义了流程中的定时事件。 - **JBPM_TOKEN, JBPM_TOKENVARIABLEMAP**: 令牌表示流程执行的状态,变量映射则关联了令牌与变量。 - **JBPM_TRANSITION**: 转换表,定义了流程中节点间的...

    JBPM工作流开发指南

    3.3.18 create-timer(创建定时器) 25 3.3.19 cancel-timer(取消定时器) 26 3.3.20 task(任务) 26 3.3.21 swimlane(泳道) 27 3.3.22 assignment(委派) 28 3.3.23 controller(控制器) 29 3.3.24 process-state 子流程 ...

    jbpm4.3官方例子及文档

    3. **任务管理(Task Management)**:jbpm4.3提供了一套完整的任务管理机制,包括任务分配、任务完成、任务查询等功能,确保流程中的任务能被正确地分发和执行。 4. **事件处理(Event Handling)**:jbpm4.3允许...

    jbpm帮助文档(中文带源码)

    此外,JPDL还支持其他元素,如sub-process(子流程)、event(事件)和timer(定时器)等,它们为构建复杂流程提供了灵活性。 四、进阶应用 随着对JPDL的深入理解,开发者可以利用JBPM提供的API和工具进行更复杂的...

    jbpm 工作流引擎

    - **流程建模语言**:jBPM 提供了一套直观的流程建模语言,能够以图形化的方式表示业务流程,包括但不限于任务(task)、异步通信的等待状态(wait state)、定时器(timer)以及自动化动作(automated action)等元素。...

    jbpm开发指南-笔记

    在jBPM中,`create-timer`是一种重要的功能,用于在工作流中设置定时器。通过这种方式,可以定义流程在特定的时间点自动执行某些操作。这在需要按计划执行任务的情况下非常有用。 **应用场景:** - **定期维护任务*...

    JBPM开发指南WORD文档

    20. **取消定时器(Cancel Timer)**:取消已经设置的定时任务。 21. **任务(Task)**:由参与者完成的具体活动。 22. **泳道(Swimlane)**:用于组织和分配任务的角色或组。 23. **委派(Assignment)**:指定...

    JBPM4.3编程指南

    - **Timer定时器** - **持续时间表达式**:定义定时器触发的周期或条件,支持复杂的表达式设置。 - **工作日历**:用于指定定时器工作的日期范围,有助于避免非工作日的误触发。 - **定时器流向**:定义定时器...

Global site tag (gtag.js) - Google Analytics