jBPM 是一個(gè)非常優(yōu)秀的開(kāi)源工作流引擎,雖然他不是一個(gè)一站式的工作流平臺(tái),不過(guò)它已經(jīng)為我們提供了比較豐富的底層操作,為了滿足特定的項(xiàng)目需求,我們一般需要對(duì)其進(jìn)行二次開(kāi)發(fā),才能適用于具體的業(yè)務(wù)需求。
其中一個(gè)主要的擴(kuò)展點(diǎn)是針對(duì) TaskNode 進(jìn)行的用戶的分配。TaskNode 是 jBPM 中一個(gè)非常重要的概念,一個(gè)任務(wù)節(jié)點(diǎn)可以包含若干個(gè)任務(wù),不同的任務(wù)可以由不同的人來(lái)完成,任務(wù)實(shí)例被分配給 actorId 來(lái)完成,其中指定到人的分配工作就是 Assignment 要處理的,這也是我們需要定制的功能,為了實(shí)現(xiàn)用戶的分配,我們需要實(shí)現(xiàn) AssignmentHandler 接口,接口原型如下。
public interface AssignmentHandler extends Serializable {
void assign(Assignable assignable, ExecutionContext executionContext) throws Exception;
}
通常用代碼實(shí)現(xiàn)的話,我們可以讓一個(gè)類(lèi)實(shí)現(xiàn)這個(gè)接口,并在 swimlane 或者 tasknode 中的 assignment 指定該類(lèi)。但是,這樣的靈活性是顯然不夠的,在系統(tǒng)的使用過(guò)程中,分配策略會(huì)不斷的進(jìn)行調(diào)整,因此我們需要更為靈活的解決方案,jBPM 本身可以使用基于 Bean Shell 的腳本來(lái)寫(xiě)分配策略,但是 Bean Shell 不是那么強(qiáng)大,我們需要更為強(qiáng)大的解決方案,因此,我們選用了已經(jīng)被 JBoss 收為旗下的 JBoss Drools 4.0 規(guī)則引擎 (在 3.0 的時(shí)候曾經(jīng)改名為 JBoss Rules,4.0 又改回來(lái)了)
完整版本請(qǐng)查看:http://www.steadyxp.com/archives/120.html
posted on 2008-09-05 15:29
steady 閱讀(2312)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
Java