jbpm timer

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

Xml代码 
1.<servlet > 
2.     <servlet-name>JobExecutorServlet</servlet-name> 
3.     <servlet-class>org.jbpm.job.executor.JobExecutorServlet</servlet-class> 
4.     <load-on-startup>1</load-on-startup> 
5.   </servlet> 
6.   <servlet-mapping > 
7.     <servlet-name>JobExecutorServlet</servlet-name> 
8.     <url-pattern>/jobexecutor</url-pattern> 
9.   </servlet-mapping> 
<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, 这里有一个小小的问题, 就是使用插件配置的Timer是放在<task-node>节点下的, 这个实际上是错误的, 而应该配置在具体的任务实例节点下,即<task>节点下,比如:

Xml代码 
1.<task-node name="资金收到确认"> 
2.        <task name="资金收到确认"> 
3.            <timer duedate="7 days" name="checkTimer" transition="检查"> 
4.                <action class="com.baiyao.workflow.payment.handler.TimerCheckActionHandler"></action> 
5.            </timer> 
6.            <assignment class="com.baiyao.workflow.payment.handler.PaymentComfirmAssignmentHandler"></assignment> 
7.        </task> 
8.        <transition to="拨付"></transition> 
9.        <transition to="检查资金拨付情况" name="检查"></transition> 
10.    </task-node> 
<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, 比如这样写:

Java代码 
1. 
2./** 
3. * 超过七个工作日, 退出当前确认节点, 进入内勤检查任务节点 
4. *  
5. * @author Macro Chen 
6. * @since Jul 18, 2008 
7. */ 
8.public class TimerCheckActionHandler implements ActionHandler {  
9. 
10.    private static final long serialVersionUID = 1L;  
11. 
12.    public void execute(ExecutionContext ctx) throws Exception {  
13.        long taskId = ctx.getTaskInstance().getId();  
14.        TaskInstance ti = JbpmUtils.getTaskInstance(taskId);  
15.        JbpmUtils.end(ti, "检查");  
16.    }  
17. 
18.} 

/**
 * 超过七个工作日, 退出当前确认节点, 进入内勤检查任务节点
 *
 * @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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值