JBPM知識點------timer、Scheduler
定時器timer可以被用於decision fork join node
process-state state super-state
task-node,可以設置開始時間duedate和頻率repeat,定時器動作可以是所支持的任何動作元素,如action或script,會運行
我們設置的商務動作。定時器通過動作創建和取消,有兩個動作元素create-timer和cancel-timer。事實上,默認的定時器元素只是
create-timer動作依附於node-enter事件、cancel-timer動作依附於node-leave事件的一個簡略表示。
timer 還有一個很重要的屬性cancel-event,這個是timer和task結合時使用的,任務定時器的cancel-event可以被定製。默認情況 下,當任務被結束時(=完成)任務上的定時器將被取消,這是通過在定時器上使用cancel-event屬性,流程開發者可以定製諸如task- assign或task-start。cancel-event支持多個事件,通過在屬性中指定一個用逗號分割的列表,可以組合cancel-event 的類型。 這個屬性沒搞過呢。
調度這一塊其實分成2部分,一個就是定時器,還有一個是調度服務。從jbpm 的javadoc可以看到調度服務涉及了幾個類, 由於時間原因我還沒有深入的研究過。
下面舉一個簡單的例子,運行一個定時器reminder,這個定時器立刻就運行duedate='0 seconds',頻率是3seconds,執行的動作是輸出timer running。這個定時器會在12秒後被定時器reminderend終結。
(有一個問題,終結是終結了但是SchedulerThread還在那等着,要回頭再看看java的線程了。)
(還有一個問題,transition的用途還不是很明白?我以爲運行12秒後流程就會跳轉到end了。)
< process-definition xmlns ="" name ="yytest" >
< start-state >
< transition to ="a" />
</ start-state >
< state name ='a'>
<timer name ='reminder'
duedate ='0 seconds'
repeat ='3 seconds' >
< script > System.out.println("timer running"); </ script >
</ timer >
< timer name ='reminderend'
duedate ='12 seconds'
transition ='end'
>
< cancel-timer name ='reminder'/>
</timer >
</ state >
< end-state name ="end" ></ end-state >
</ process-definition >
Jbpm Context jbpm Context = jbpm Configuration.createJbpm Context();
try {
long processInstanceId = 1 ;
processInstance = jbpm Context.loadProcessInstance(processInstanceId);
Token token = processInstance.getRootToken();
// schedulerSession = jbpm Context.getSchedulerSession();
System.out.println(token.getNode());
token.signal();
System.out.println(token.getNode());
// Timer timer = (Timer) schedulerSession.findTimersByDueDate().next();
// timer.execute();
SchedulerThread st = new SchedulerThread(jbpm Configuration);
// st.executeTimers();
st.run();
// token.signal();
// System.out.println(token.getNode());
// jbpm Context.save(processInstance);
} finally {
jbpm Context.close();
}
}
運行結果如下:
StartState(159e154)
State(a)
timer running
timer running
timer running
timer running
(12秒後停止但是線程還在run)