定时器(Timer)可以说是jBPM的标准配置了,在多种节点,如Task-Node,Node,fork和Join等,都可以有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>
unit有 second, 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)的方式离开当前节点,定时器也就被取消了。当定时器执行时,以下事件将依次发生:
如果需要启用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被更新了,从而导致出现该异常。
分享到:
相关推荐
14. **org.jbpm.pvm.internal.jobexecutor**: 提供任务执行器,包括`JobExecutorServlet`、线程池及各种命令和处理器,负责调度和执行job、message和timer。 15. **org.jbpm.pvm.internal.lob**: 处理流程发布时的...
**ejb服务与定时器**:jbpm-services-ejb-timer-7.3.0.Final.jar和jbpm-services-ejb-client-7.3.0.Final.jar提供了基于EJB的定时服务和客户端接口,使得jBPM能够集成到Java EE环境中,实现定时触发流程事件或任务。...
- **JBPM_TASKCONTROLLER**:流程任务控制器,控制任务的执行。 #### 三、总结 JBPM的数据库表结构设计得相当全面和细致,涵盖了从流程定义到执行过程中的各个方面。通过对这些表结构的理解,不仅可以帮助开发者...
- **JBPM_TIMER**: 计时器,定义了流程中的定时事件。 - **JBPM_TOKEN, JBPM_TOKENVARIABLEMAP**: 令牌表示流程执行的状态,变量映射则关联了令牌与变量。 - **JBPM_TRANSITION**: 转换表,定义了流程中节点间的...
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 子流程 ...
3. **任务管理(Task Management)**:jbpm4.3提供了一套完整的任务管理机制,包括任务分配、任务完成、任务查询等功能,确保流程中的任务能被正确地分发和执行。 4. **事件处理(Event Handling)**:jbpm4.3允许...
此外,JPDL还支持其他元素,如sub-process(子流程)、event(事件)和timer(定时器)等,它们为构建复杂流程提供了灵活性。 四、进阶应用 随着对JPDL的深入理解,开发者可以利用JBPM提供的API和工具进行更复杂的...
- **流程建模语言**:jBPM 提供了一套直观的流程建模语言,能够以图形化的方式表示业务流程,包括但不限于任务(task)、异步通信的等待状态(wait state)、定时器(timer)以及自动化动作(automated action)等元素。...
在jBPM中,`create-timer`是一种重要的功能,用于在工作流中设置定时器。通过这种方式,可以定义流程在特定的时间点自动执行某些操作。这在需要按计划执行任务的情况下非常有用。 **应用场景:** - **定期维护任务*...
20. **取消定时器(Cancel Timer)**:取消已经设置的定时任务。 21. **任务(Task)**:由参与者完成的具体活动。 22. **泳道(Swimlane)**:用于组织和分配任务的角色或组。 23. **委派(Assignment)**:指定...
- **Timer定时器** - **持续时间表达式**:定义定时器触发的周期或条件,支持复杂的表达式设置。 - **工作日历**:用于指定定时器工作的日期范围,有助于避免非工作日的误触发。 - **定时器流向**:定义定时器...