JBPM工作流中的任務(wù)分配(轉(zhuǎn))
Posted on 2008-06-23 18:04 leekiang 閱讀(1717) 評(píng)論(0) 編輯 收藏 所屬分類: 工作流(JBPM)在jBPM中,任務(wù)的分配有兩種模式:
- 推(Push)模式??? 在這種模式下,系統(tǒng)計(jì)算出應(yīng)該由哪個(gè)參與者(actor)完成當(dāng)前任務(wù)(task),然后直接將此task送到該actor的任務(wù)列表中(tasklist);
- 拉(Pull)模式??? 在這種模式下,系統(tǒng)首先計(jì)算出應(yīng)該由哪個(gè)參與者池(pool of actors)完成當(dāng)任務(wù),并將該任務(wù)送入相應(yīng)的任務(wù)池中;然后,再由參與者池中的任一人將任務(wù)拉到自己的任務(wù)列表中。
參與者池與角色、用戶組的差異
一般的應(yīng)用中,角色與用戶組的概念比較常見,而參與者池則不常見。
針對(duì)一個(gè)Task一般會(huì)有多個(gè)可能的操作,而不同的角色有可能有權(quán)限進(jìn)行其中的一部分或全部操作。所以,不同角色有可能屬于相同的參與者池,一個(gè)角色也有可能被加入到多個(gè)參與者池中。
一 般用戶組是按組織架構(gòu)進(jìn)行劃分的,在同一個(gè)用戶組可能會(huì)有多個(gè)不同的角色,或者具有不級(jí)別的權(quán)限。即使將同一角色、具有同一級(jí)別權(quán)限的用戶劃分為一組,也 不能回避具有更高級(jí)別權(quán)限的用戶操作低級(jí)別工作任務(wù)項(xiàng)的情形。另一方面,在Multi-Entity架構(gòu)下,也存在跨Entity操作的情形。
總而言之,參與者池是區(qū)別于按角色、按組織進(jìn)行劃分的、一種特別的用戶分組方法。換言之,參與者池其實(shí)也是可以預(yù)先定義的。
何時(shí)進(jìn)行任務(wù)分配計(jì)算
既然參與者池是可以預(yù)見的,那么在“拉模式”下,何時(shí)進(jìn)行任務(wù)分配計(jì)算呢?
毫無疑問,在工作流系統(tǒng)中,計(jì)算是在任務(wù)狀態(tài)轉(zhuǎn)換時(shí)自動(dòng)完成的。(當(dāng)然,相對(duì)于應(yīng)用的事務(wù)提交,工作流的這些操作都可以是異步完成的。)
因些,“拉”的含義,不是在用戶刷新任務(wù)列表時(shí)才去計(jì)算他/她的所有工作項(xiàng);恰恰相反,無論是“拉”或是“推”,工作流系統(tǒng)其實(shí)都預(yù)先計(jì)算好了參與者的任務(wù)列表或可以從中挑選任務(wù)的“任務(wù)池”。
jBPM參與者池的數(shù)據(jù)庫設(shè)計(jì)

jbpm_taskinstance與jbpm_pooledactor是典型的“多對(duì)多”的關(guān)系,中間通過jbpm_taskactorpool拆分成兩個(gè)“一對(duì)多”。
原文:http://dayubian.spaces.live.com/blog/cns!9E5A349DF844201E!365.entry