在高杰所著的 深入浅出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方法 红色部分提出来单独开启一个任务执行器的线程,问题得到解决。