在高杰所著的 深入浅出JBMP 书做练习时遇到一个问题纠缠了很久,
所要练习的内容: jbpm 任务执行器,timer定时器,希望在任务实例产生30秒后,每隔20秒能在控制台循环输出 "触发test job timer”
流程图如上,定义如下
<start-state name="start-state1"> <transition to="task-node1"></transition> </start-state>
<task-node name="task-node1"> <task name="test-task"> <assignment actor-id="ziliang871118"></assignment> </task> <timer name="test job timer" duedate="30 seconds" repeat="20 seconds"> <script> System.out.println("触发test job timer"); </script> </timer> <transition to="end-state1"></transition> </task-node>
<end-state name="end-state1"></end-state>
按照上述代码我写了一个测试类,
public static void main(String[] args) {
JbpmConfiguration.getInstance().getJobExecutor().start();
System.out.println("流程测试开始......."); JbpmContext jbpmContext = JbpmConfiguration.getInstance() .createJbpmContext(); try { ProcessDefinition processDefinition = jbpmContext.getGraphSession() .findLatestProcessDefinition("asynctest"); ProcessInstance pi = processDefinition.createProcessInstance(); Token token = pi.getRootToken(); token.signal(); System.out.println("当前流程的节点名:" + token.getNode().getName()); } finally { jbpmContext.close(); }
}
运行上述代码,输出结果如下:
当前流程的节点名:task-node1
并没有预想的 循环字符串输出, 纠结了很久,最后发现我的任务执行器和测试类写在了一个线程上,所以看不到想要的输出。
把上述的main方法 红色部分提出来单独开启一个任务执行器的线程,问题得到解决。