jBPM中Timer的使用

[size=medium]jBPM中自带的文档中关于定时器Timer的使用介绍的比较少, 刚好最近要用到, 不过也很简单, 其中有几个地方需要注意一下.
使用版本为jBPM 3.2.2
1.使用Timer首先要在web.xml中配置JobExecutorServlet:

<servlet >
<servlet-name>JobExecutorServlet</servlet-name>
<servlet-class>org.jbpm.job.executor.JobExecutorServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping >
<servlet-name>JobExecutorServlet</servlet-name>
<url-pattern>/jobexecutor</url-pattern>
</servlet-mapping>

这个相当于在启动webapp之后启动一个线程, 不停的检查Job表中是否存在到期的job
2.接着就是在processdefition.xml中定义Timer, 这里有一个小小的问题, 就是[b][color=red]使用插件配置的Timer是放在<task-node>节点下的, 这个实际上是错误的[/color][/b], 而应该配置在具体的任务实例节点下,即<task>节点下,比如:

<task-node name="资金收到确认">
<task name="资金收到确认">
<timer duedate="7 days" name="checkTimer" transition="检查">
<action class="com.baiyao.workflow.payment.handler.TimerCheckActionHandler"></action>
</timer>
<assignment class="com.baiyao.workflow.payment.handler.PaymentComfirmAssignmentHandler"></assignment>
</task>
<transition to="拨付"></transition>
<transition to="检查资金拨付情况" name="检查"></transition>
</task-node>


3.最后就是写相应的ActionHandler, 当Timer到达指定的时间时就会执行该ActionHandler, 比如这样写:


/**
* 超过七个工作日, 退出当前确认节点, 进入内勤检查任务节点
*
* @author Macro Chen
* @since Jul 18, 2008
*/
public class TimerCheckActionHandler implements ActionHandler {

private static final long serialVersionUID = 1L;

public void execute(ExecutionContext ctx) throws Exception {
long taskId = ctx.getTaskInstance().getId();
TaskInstance ti = JbpmUtils.getTaskInstance(taskId);
JbpmUtils.end(ti, "检查");
}

}


Timer还有几个需要注意的, 一个就是默认情况下流程在执行node-enter事件的时候会自动创建timer实例, 然后添加到job表中, 等待去执行指定ActionHandler, 如果当前任务实例被处理, 结束当前任务, 执行了node-leave事件之后, 默认情况下Timer会被自动取消.[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值