1. 程式人生 > >JBPM流程圖詳解總結

JBPM流程圖詳解總結

1.jbpm 流程圖
在jbpm的Eclipse的外掛中,提供了各種各樣的形狀,不同的形狀代表不同的意思和功能.如果現有的形狀還不夠用,還可以自定義新的形狀.不同的節 點型別代表不同的行為。
在畫流程圖的時候要特別注意, 每個流程都必須要有開始節點和結束節點,而且只能有一個.

2.預定義節點
start-state,開始節點:標識流程開始、
end- state,結束節點:標識流程結束、
task-node,任務節點:可以放0個或多個任務、
decision,決策節點:路徑選擇,只使用一個流轉(叉路口)、
fork/join,分支節點/合併節點:可以分為多個並行執行的分支、
state,狀態節點:等待。
總結:
還有mail-node、process-state、super-state等

每個節點都對應一個類(Jbpm的持久化類),都是 org.jbpm.graph.def.Node的子類。節點都有名字、流轉(end-state除外)。
start-state 節點
開始節點:標識流程開始邊界。開始狀態有且只有一個,就是說流程中不能有任何 transition 指向開始節點。
建立新的流程例項後,就有一個對應的Token(RootToken,根令牌)指向 start-state。並且處於等待狀態,需要給 Token 發訊號(signal)才能使流程繼續執行。
end-state 節點
結束節點:標識流程的結束邊界。不需要 transition 元素。
流程例項執行到結束節點是時,流程例項結束,會填充結束時間。(以流程例項的結束時間是否為null,判斷流程例項是否結束)

task-node 節點
任務節點:可以包含任意數量(0..*)的Task(任務定義)。人就是通過任務與流程互動的。
預設行為:
進入節點時會建立任務例項。(create-tasks)
處於等待狀態,直到任務例項全部完成。(Signal)

3.節點執行過程
1)當執行到一個任務節點的時候,將會根據這個 task-node 中的 task 的定義,建立相同數量的 TaskInstance(任務例項)(為每一個Task都建立一個任務例項,並且分配給任務定義中指定的參與者)。
2)這個 task-node 一直處於等待狀態。等到這些任務例項都被完成後,才會離開當前的節點,到達下一個節點。如果一個 task-node 中沒有定義任務。執行時,一進入這個節點就會馬上離開,即 Token 不會在這個 task-node 上停留。因為他發現所有的任務例項都執行完了(任務例項的數量為0)。


4.節點屬性
1)signal屬性
指定完成任務例項對執行流程的影響,發訊號。指定哪個任務例項完成後會發訊號離開節點.
屬性可取的值:
last:預設值,當最後一個例項被完成時候發訊號。當在這個入口沒有任務被生成時候,流程繼續執行(發訊號)
first:當第一個例項被完成時候發訊號。當在這個入口沒有任務被生成時候, 執行繼續.
never:不管任務例項是否完成,都不發訊號。
nsynchronized:進入節點後就發訊號,不管任務是否沒建立或有沒有完成。就是說任務的執行和流程執行互不影響。
last-wait:當進入節點時沒有任務例項被建立時,就會一直處於等待狀態,直到任務例項被建立;建立任務例項後,就是當所有的例項都執行完成後發信 號(和last一樣了)。

2)decision 節點
決策節點:用於計算流向。在 decision 中使用 DecisionHandler。或使用一個表示式,也是返回要使用的 transition 的 name。

3)fork 與 join (分支節點與合併節點)
fork(分支節點)的作用是將單個執行流程分裂成多個併發的執行流程。預設的行為是為每個分支生成一個子令牌,並建立子令牌和主流程令牌之間的父子關 系。此時,父令牌指向fork節點,子令牌指向各個分支節點。

join(合併節點)將分支收攏。當從同一個fork中出來的所有的分支都到達該節點的時候,join節點將結束這些分支上的子token,並給他們的父 Token發一個訊號離開 join節點(從fork節點直接到join節點的下一個節點,不會經過join節點)。如果只有分支中的部分token到達時,join結點將處於等待 狀態。

fork和join節點要成對的出現。

今天學習了那麼多,得及時做做練習,要不不能很好的理解和運用.最近的學習,發現了自己的一個缺點,動手能力不是很好.有很多的原理聽的很明白,可是自己 一動手寫程式碼的時候就不是那麼回事.總是發生這樣或那樣的問題.所有,聽懂和能寫程式碼了是兩回事.得抓緊時間多多的練習.