《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 設(shè)計(jì)應(yīng)用 > 基于jBPM4的臨時(shí)動(dòng)態(tài)性需求研究
基于jBPM4的臨時(shí)動(dòng)態(tài)性需求研究
蘇 展,,劉 鋒
(安徽大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,,安徽 合肥 230039)
摘要: 介紹了國(guó)內(nèi)目前的工作流領(lǐng)域特點(diǎn),尤其對(duì)臨時(shí)動(dòng)態(tài)性需求(會(huì)簽,、撤銷,、任意回退等)的各種場(chǎng)景進(jìn)行了分析,,提出了基于jBPM4的解決思路及一種動(dòng)態(tài)路由的方法,以解決臨時(shí)回退的問(wèn)題,。
Abstract:
Key words :

摘  要: 介紹了國(guó)內(nèi)目前的工作流領(lǐng)域特點(diǎn),,尤其對(duì)臨時(shí)動(dòng)態(tài)性需求(會(huì)簽、撤銷,、任意回退等)的各種場(chǎng)景進(jìn)行了分析,,提出了基于jBPM4的解決思路及一種動(dòng)態(tài)路由的方法,,以解決臨時(shí)回退的問(wèn)題。
關(guān)鍵詞: jBPM,;臨時(shí)動(dòng)態(tài)性需求,;動(dòng)態(tài)路由

    工作流管理技術(shù)[1-2]作為一種過(guò)程建模和過(guò)程管理的核心技術(shù),是新興于20世紀(jì)90年代的一種信息化技術(shù),。隨著近些年國(guó)內(nèi)企業(yè),、政府信息化的建設(shè),工作流技術(shù)被越來(lái)越廣泛地應(yīng)用于業(yè)務(wù)流程管理(BPM)領(lǐng)域,。jBPM是一種輕量級(jí)的J2EE開(kāi)源框架,,具有良好的可擴(kuò)展性。其最新版本較jBPM3.2版本,,在核心引擎等方面都有較大改動(dòng),,本文總結(jié)了新版本的特點(diǎn)。結(jié)合國(guó)內(nèi)工作流領(lǐng)域的應(yīng)用特點(diǎn),,本文特別針對(duì)臨時(shí)動(dòng)態(tài)性需求,,分析了各種場(chǎng)景的情況,給出了應(yīng)用jBPM4的解決思路,,為解決臨時(shí)回退的問(wèn)題,,提出了一種動(dòng)態(tài)路由的方法,該方法亦可以用于解決各種臨時(shí)動(dòng)態(tài)性需求的場(chǎng)景,。
1 jBPM4特點(diǎn)
    jBPM是JBoss眾多開(kāi)源項(xiàng)目中的一個(gè)工作流開(kāi)源項(xiàng)目,,也是目前應(yīng)用最廣泛的工作流項(xiàng)目。在2009年7月10日,,JBoss jBPM團(tuán)隊(duì)發(fā)布了jBPM4的正式版本,。jBPM4完全基于流程虛擬機(jī)(PVM)的機(jī)制,對(duì)核心引擎進(jìn)行了重新設(shè)計(jì),,而PVM的引入也使jBPM4可以支持多流程語(yǔ)言[3],。jBPM4特點(diǎn)如下:
    (1)在流程定義的對(duì)象上,,節(jié)點(diǎn)類型劃分更清晰,。
    (2)基于觀察者模式的事件監(jiān)聽(tīng)(Event-Listener)機(jī)制。在jBPM4中活動(dòng)節(jié)點(diǎn)對(duì)象(ActivityImpl),、轉(zhuǎn)移對(duì)象(TransitionImpl),、流程定義對(duì)象(ProcessDefinitionImpl),全都繼承了ObservableElementImpl對(duì)象,,因此,,組成流程定義的3個(gè)主要元素都可作為觀察者模式中的被觀察者來(lái)觀察,而這些對(duì)象本身就直接支持注冊(cè)各種事件(Event),,然后由監(jiān)聽(tīng)器(Listener)來(lái)監(jiān)聽(tīng)這些Event,。
    (3)基于ExecutionImpl,、Command模式和AtomicOperation實(shí)現(xiàn)的內(nèi)核引擎在jBPM4中用ExcutionImpl代替jBPM3中Token機(jī)制。流程的流轉(zhuǎn)依賴于ExcutionImpl調(diào)用各個(gè)AtomicOperation原子操作,,如ExecuteActivity,、MoveToParentActivity、TransitionTake,、TransitionStartActivity,、ExecuteEventListener、TransitionEndActivity進(jìn)行推進(jìn),,而ExecutionImpl在各個(gè)實(shí)例對(duì)象之間進(jìn)行轉(zhuǎn)移,。
    (4)加入了歷史庫(kù),但還不完善,。
2 國(guó)內(nèi)工作流領(lǐng)域的特點(diǎn)
    目前國(guó)內(nèi)在工作流領(lǐng)域[4]主要的應(yīng)用是人工工作流,,也就是以人工任務(wù)密集型的工作流為主。隨著國(guó)內(nèi)企業(yè)和公共組織的信息化發(fā)展越來(lái)越快,,IT系統(tǒng)的積累和建設(shè)經(jīng)驗(yàn)也越來(lái)越豐富,,以自動(dòng)任務(wù)密集型為主的應(yīng)用將會(huì)逐漸增多。人工任務(wù)密集型工作流的應(yīng)用主要集中在以下領(lǐng)域:電子政務(wù),,行政審批,,企業(yè)協(xié)同辦公,電信,、電力的工單,,企業(yè)采購(gòu)、合同,、銷售等,。
    從功能需求上,這些人工任務(wù)密集型流程的典型特點(diǎn)主要有:(1)用戶友好的流程定義工具,。(2)表單能夠自定義,。(3)靈活的臨時(shí)動(dòng)態(tài)性需求,例如:任意回退,、會(huì)簽,、撤銷等。這些需求,,存在很強(qiáng)的人為性因素,。
    國(guó)內(nèi)專注于工作流產(chǎn)品方面的公司起步較國(guó)外晚,其產(chǎn)品大多只專注于某個(gè)行業(yè)的具體需求,,如:有生博大的工作流產(chǎn)品主要定位于“電子政務(wù)系統(tǒng)中的審批流”,;西安協(xié)同的工作流產(chǎn)品偏重于“電信行業(yè)”;信雅達(dá)的工作流產(chǎn)品偏重于“金融行業(yè)”,;上海東蘭的工作流產(chǎn)品則偏重于“協(xié)同領(lǐng)域”等等,。
3 各種臨時(shí)動(dòng)態(tài)性需求情況的解決思路
    jBPM4是由國(guó)外開(kāi)源小組領(lǐng)導(dǎo)的項(xiàng)目,,流程定義工具和表單設(shè)計(jì)并不是其項(xiàng)目的特點(diǎn),但其在流程處理方面的思想有其特色,,特別是流程核心引擎的架構(gòu)很值得學(xué)習(xí)研究,。筆者在學(xué)習(xí)研究的過(guò)程中,對(duì)國(guó)內(nèi)靈活的各種臨時(shí)動(dòng)態(tài)性需求的場(chǎng)景進(jìn)行了模擬分析,,提出了如何應(yīng)用jBPM4來(lái)解決問(wèn)題的思路,。
3.1 會(huì)簽
    會(huì)簽在政府或企業(yè)都是必不可少的功能,尤其是審批流中,。會(huì)簽可以分為單步會(huì)簽(只有1個(gè)審批環(huán)節(jié))及多步會(huì)簽(每1個(gè)子審批流有多個(gè)審批環(huán)節(jié)),。單步會(huì)簽:在流程的某個(gè)環(huán)節(jié)需要由多個(gè)辦理人(多個(gè)不同部門(mén)的領(lǐng)導(dǎo))共同辦理或者簽署意見(jiàn),這是企業(yè)或政府的內(nèi)部最為常見(jiàn)的情況,。多步會(huì)簽(也稱為并聯(lián)審批):其實(shí)質(zhì)就是一個(gè)單步的審批環(huán)節(jié)變?yōu)榱嗽诓块T(mén)內(nèi)部一個(gè)比較復(fù)雜的審批流程,,這個(gè)審批流程有多個(gè)審批環(huán)節(jié)。
    多步會(huì)簽的情況較為復(fù)雜,,本文只提供應(yīng)用jBPM4解決單步會(huì)簽的思路:即對(duì)TaskService進(jìn)行擴(kuò)展開(kāi)發(fā),,實(shí)現(xiàn)動(dòng)態(tài)任務(wù)實(shí)例的創(chuàng)建,參照TaskActivity類中的方法進(jìn)行擴(kuò)展,,擴(kuò)展后再調(diào)用addTaskParticipatingUser( )或addTaskParticipatingGroup( )方法實(shí)現(xiàn)動(dòng)態(tài)增加任務(wù)辦理人,,此時(shí)即實(shí)現(xiàn)了單步會(huì)簽功能。
3.2 撤銷
    撤銷是指任務(wù)在發(fā)送給下一個(gè)辦理人之后,,發(fā)現(xiàn)任務(wù)發(fā)送錯(cuò)誤,,此時(shí)在下一個(gè)辦理人還沒(méi)有辦理之前,可以撤回當(dāng)前任務(wù),,而重新選擇其他人進(jìn)行辦理,。串行流程如圖1所示。

    節(jié)點(diǎn)2的處理人(假設(shè)是王二)辦理完畢之后,,將任務(wù)提交,,此時(shí)任務(wù)到達(dá)了節(jié)點(diǎn)3(假設(shè)李三辦理),這時(shí)李三就會(huì)收到一個(gè)待辦任務(wù),,在李三還沒(méi)有辦理之前,,王二突然發(fā)現(xiàn),有1個(gè)業(yè)務(wù)數(shù)據(jù)填寫(xiě)錯(cuò)誤,,或者粘貼的附件錯(cuò)誤,,這時(shí)王二需要將發(fā)送給李三的任務(wù)撤銷,,重新更正數(shù)據(jù)后或修改粘貼的附件后再發(fā)送給李三審批,。此外,假設(shè)節(jié)點(diǎn)3的辦理人有2個(gè)人(李三和趙五),,那么王二需要在運(yùn)行期間根據(jù)業(yè)務(wù)特性手動(dòng)地選擇任務(wù)是提交給李三還是趙五,,但由于王二的誤操作,,把本來(lái)應(yīng)該發(fā)給趙五的辦理任務(wù)錯(cuò)發(fā)送給了李三,此時(shí),,在李三辦理之前,,王二也可以將發(fā)送給李三的任務(wù)撤銷,然后重新發(fā)送給趙五,。
    對(duì)于上述模擬的撤銷,,jBPM4解決思路如下:
    (1)刪除需要撤銷的任務(wù)實(shí)例及其與此任務(wù)實(shí)例相關(guān)的所有工作流實(shí)例。在文件TaskServiceImpl.java中,,jBPM4提供了級(jí)聯(lián)刪除任務(wù)實(shí)例的相關(guān)方法:
    public void deleteTaskCascade(String taskId) {
        commandService.execute(new DeleteTaskCmd(taskId,,true));
    }
    (2)修改當(dāng)前任務(wù)實(shí)例的狀態(tài),。即將張三的已經(jīng)辦理完畢的節(jié)點(diǎn)2對(duì)應(yīng)的TaskInstance的狀態(tài)更改為待辦狀態(tài):(Task.STATE_OPEN)
    task.setState(ask.STATE_OPEN),;
    taskService.saveTask(task);
3.3 任意回退
    回退作為審批流最常見(jiàn)的需求,,每1個(gè)審批環(huán)節(jié)都有可能會(huì)有審批通過(guò),、不通過(guò)2種情況。審批不通過(guò)時(shí),,一般是回退到上一個(gè)環(huán)節(jié),,但是在某些情況下,有可能跨環(huán)節(jié)回退,,而到底回退到哪個(gè)環(huán)節(jié),,可以由用戶根據(jù)業(yè)務(wù)需求進(jìn)行自定義,并且在回退環(huán)節(jié)工作完成之后,,其下一步的方向也可以由用戶自定義,。下面根據(jù)各種不同的回退分別模擬并給出解決思路。
3.3.1 串行流程
    串行流程,,最直接的方式就是在需要回退的各個(gè)節(jié)點(diǎn)之間建立回退線,,如圖2所示。如果需要從節(jié)點(diǎn)4回退到節(jié)點(diǎn)2,,則直接在節(jié)點(diǎn)4之后加1個(gè)分支決策節(jié)點(diǎn),,連接2個(gè)分支,1個(gè)是流向節(jié)點(diǎn)5,,1個(gè)是返回節(jié)點(diǎn)2,。

    對(duì)于節(jié)點(diǎn)2,在jBPM4中,,其參與模式又分為4種:task-assignee(assignee user,、assignee expression)、task candidates(candidate-groups、candidate-users),、task assignment handler,、task swimlanes。
    (1)task-assignee任務(wù)的辦理人的值可以直接指向1個(gè)特指的用戶的ID或者1個(gè)關(guān)聯(lián)到業(yè)務(wù)中某個(gè)特指用戶的表達(dá)式(如order.owner),。此時(shí),,如果assignee賦予了1個(gè)特指用戶的ID,回退時(shí)不用做任何處理,;如果assignee賦予了1個(gè)業(yè)務(wù)表達(dá)式,,在回退時(shí),需要保證業(yè)務(wù)表達(dá)式的運(yùn)算邏輯能夠正確執(zhí)行,。
    (2)如果task candidates任務(wù)的辦理人為幾個(gè)特定的組的集合或者用戶的集合,,實(shí)際上就是俗稱的“競(jìng)辦”。這樣的任務(wù)被稱為groupTask,,必須被某一個(gè)組或者用戶拾取才能進(jìn)行辦理,,因此,如果回退到這樣的節(jié)點(diǎn)時(shí),,需要把任務(wù)回退給當(dāng)時(shí)的拾取人,。而拾取人需要到HistoryTask和HistoryDetailImpl 2個(gè)實(shí)體對(duì)應(yīng)的歷史庫(kù)中取得。
       (3)task assignment handler任務(wù)的辦理人通過(guò)用戶自己編寫(xiě)的代碼來(lái)實(shí)現(xiàn),,當(dāng)回退到這樣的節(jié)點(diǎn)時(shí),,也不需要做特殊處理,只要保證自己的代碼(AssignmentHandler)在執(zhí)行回退邏輯時(shí)同樣能夠正確執(zhí)行即可,。
    (4)task swimlanes任務(wù)的辦理人為“泳道”,,回退到這樣的節(jié)點(diǎn)時(shí),任務(wù)的辦理人可以自動(dòng)取得,,同樣不需要做任何處理,。
    以上4種情況,在回退之后的處理又分為2種情況:一種是按照原來(lái)的路徑重新執(zhí)行,,即節(jié)點(diǎn)2→節(jié)點(diǎn)3→節(jié)點(diǎn)4,;另一種是,節(jié)點(diǎn)2辦理完畢后,,直接返回給節(jié)點(diǎn)4,。對(duì)于第1種情況,不需要做處理,。而對(duì)于第2種情況,,由于在節(jié)點(diǎn)2和節(jié)點(diǎn)4之間并沒(méi)有一個(gè)轉(zhuǎn)移存在,因此jBPM4也沒(méi)有提供支持,。針對(duì)這種情況可以通過(guò)動(dòng)態(tài)路由(即動(dòng)態(tài)創(chuàng)建轉(zhuǎn)移)的思路來(lái)實(shí)現(xiàn)(具體實(shí)現(xiàn)思路見(jiàn)第4節(jié)),,實(shí)際上回退也可以用動(dòng)態(tài)創(chuàng)建轉(zhuǎn)移來(lái)實(shí)現(xiàn),但不用畫(huà)回退線了。
3.3.2 M選N分支流程
    M選N分支流程中,,N必須滿足M>N?叟1,假設(shè)回退前流程的執(zhí)行路徑為節(jié)點(diǎn)1→節(jié)點(diǎn)2→節(jié)點(diǎn)4→節(jié)點(diǎn)5,,如圖3所示,,此時(shí)回退有2種情況:
    (1)由節(jié)點(diǎn)5回退到節(jié)點(diǎn)1,而節(jié)點(diǎn)1在進(jìn)行業(yè)務(wù)數(shù)據(jù)的修改后,,直接返回給節(jié)點(diǎn)5的處理人進(jìn)行辦理或?qū)徟?br />     (2)由節(jié)點(diǎn)5回退到節(jié)點(diǎn)1,,而節(jié)點(diǎn)1在進(jìn)行業(yè)務(wù)數(shù)據(jù)的修改后,重新按照節(jié)點(diǎn)1→節(jié)點(diǎn)2→節(jié)點(diǎn)4→節(jié)點(diǎn)5的路徑再執(zhí)行1遍,。
    情況(2)與情況(1)不同的是:在回退之后繼續(xù)審批時(shí),,需要考慮分支節(jié)點(diǎn)的決策條件,在自動(dòng)決策時(shí)要保證決策邏輯正確執(zhí)行,;在人工決策時(shí),,需要記錄原來(lái)的執(zhí)行路徑(保證重走節(jié)點(diǎn)1→節(jié)點(diǎn)2→節(jié)點(diǎn)4→節(jié)點(diǎn)5)。


3.3.3 同步分裂,、“與”匯聚流程
    同步分裂,、“與”匯聚流程如圖4所示,回退前執(zhí)行的路徑為節(jié)點(diǎn)1→節(jié)點(diǎn)2→(節(jié)點(diǎn)3,、節(jié)點(diǎn)4)→節(jié)點(diǎn)5→節(jié)點(diǎn)6,。此時(shí)回退有4種不同的情況:
    (1)由節(jié)點(diǎn)6(或節(jié)點(diǎn)5)回退到節(jié)點(diǎn)2(或節(jié)點(diǎn)1),節(jié)點(diǎn)2重新辦理完畢后,,直接返回給節(jié)點(diǎn)6的處理人進(jìn)行辦理或?qū)徟?br />     (2)由節(jié)點(diǎn)6(或節(jié)點(diǎn)5)回退到節(jié)點(diǎn)2(或節(jié)點(diǎn)1),,節(jié)點(diǎn)2重新辦理完畢后,重新按照節(jié)點(diǎn)2→(節(jié)點(diǎn)3,、節(jié)點(diǎn)4)→節(jié)點(diǎn)5→節(jié)點(diǎn)6的路徑再次執(zhí)行1遍,。
    (3)由節(jié)點(diǎn)6(或節(jié)點(diǎn)5)回退到節(jié)點(diǎn)3(或節(jié)點(diǎn)4),節(jié)點(diǎn)3(或節(jié)點(diǎn)4)辦理完畢后,,直接返回給節(jié)點(diǎn)6,。
    (4)由節(jié)點(diǎn)6(或節(jié)點(diǎn)5)回退到節(jié)點(diǎn)3(或節(jié)點(diǎn)4),節(jié)點(diǎn)3(或節(jié)點(diǎn)4)辦理完畢后,,按照節(jié)點(diǎn)3(或節(jié)點(diǎn)4)→節(jié)點(diǎn)5→節(jié)點(diǎn)6的執(zhí)行路徑,,再次執(zhí)行。

    情況(1),、(2)和(3)處理起來(lái)沒(méi)有什么問(wèn)題,。但情況4中,當(dāng)流程由節(jié)點(diǎn)6回退到節(jié)點(diǎn)3,,節(jié)點(diǎn)3辦理完畢后,,重走路徑節(jié)點(diǎn)3→節(jié)點(diǎn)5→節(jié)點(diǎn)6時(shí),在“與節(jié)點(diǎn)”的“與”運(yùn)算邏輯就會(huì)無(wú)法執(zhí)行,因?yàn)榱?個(gè)“與”分支(節(jié)點(diǎn)4)并沒(méi)有新的實(shí)例產(chǎn)生,,流程就會(huì)僵死此處,。所以可以通過(guò)修改JoinActivity.java這個(gè)類文件中的方法:
    protected boolean isComplete(List<executionimpl> joined
Executions,Activity activity)
在此方法中加入對(duì)該情況的處理代碼即可,。
3.3.4 同步分裂,、“或”匯聚流程
    同步分裂、“或”匯聚流程如圖5所示,,回退前執(zhí)行的路徑為節(jié)點(diǎn)1→節(jié)點(diǎn)2→(節(jié)點(diǎn)3,、節(jié)點(diǎn)4)→節(jié)點(diǎn)5→節(jié)點(diǎn)6。此時(shí)回退同樣有4種不同的情況:
    (1)由節(jié)點(diǎn)6(或節(jié)點(diǎn)5)回退到節(jié)點(diǎn)2(或節(jié)點(diǎn)1),,節(jié)點(diǎn)2重新辦理完畢后,,直接返回給節(jié)點(diǎn)6的處理人進(jìn)行辦理或?qū)徟?br />     (2)由節(jié)點(diǎn)6(或節(jié)點(diǎn)5)回退到節(jié)點(diǎn)2(或節(jié)點(diǎn)1),節(jié)點(diǎn)2重新辦理完畢后,,重新按照節(jié)點(diǎn)2→(節(jié)點(diǎn)3,、節(jié)點(diǎn)4)→節(jié)點(diǎn)5→節(jié)點(diǎn)6的路徑再次執(zhí)行1遍。
    (3)由節(jié)點(diǎn)6(或節(jié)點(diǎn)5)回退到節(jié)點(diǎn)3(或節(jié)點(diǎn)4),,節(jié)點(diǎn)3(或節(jié)點(diǎn)4)辦理完畢后,,直接返回給節(jié)點(diǎn)6。
    (4)由節(jié)點(diǎn)6(或節(jié)點(diǎn)5)回退到節(jié)點(diǎn)3(或節(jié)點(diǎn)4),,節(jié)點(diǎn)3(或節(jié)點(diǎn)4)辦理完畢后,,按照節(jié)點(diǎn)3→節(jié)點(diǎn)5→節(jié)點(diǎn)6的執(zhí)行路徑,再次執(zhí)行,。


    由于是“或”匯聚,,因此在實(shí)現(xiàn)上不需要做任何其他處理了。
    綜合以上情況,,回退本身在理論上有各種各樣的情況存在,,再加上業(yè)務(wù)的回退(或者業(yè)務(wù)邏輯補(bǔ)償,如果需要就必須在流程的每個(gè)環(huán)節(jié)進(jìn)行業(yè)務(wù)快照的備份,,在回退時(shí)調(diào)用這個(gè)快照進(jìn)行補(bǔ)償),,此時(shí)回退可以說(shuō)是整個(gè)流程體系中最復(fù)雜的。但是在真實(shí)的業(yè)務(wù)情況中,,有些可能是根本不會(huì)出現(xiàn)或者很少出現(xiàn),,因此要考慮的是能不能通過(guò)變通的方式處理。
4 動(dòng)態(tài)路由的思路
    針對(duì)于特定的業(yè)務(wù)實(shí)例,,有時(shí)需要在原本沒(méi)有轉(zhuǎn)移關(guān)系的環(huán)節(jié)之間進(jìn)行特定的跳轉(zhuǎn),,例如在圖1中的串行流程中(1-2-3-4-5),節(jié)點(diǎn)4與節(jié)點(diǎn)2之間是沒(méi)有任何轉(zhuǎn)移存在的,,但是針對(duì)于某個(gè)運(yùn)行期的特定業(yè)務(wù)實(shí)例,,臨時(shí)要求環(huán)節(jié)直接從節(jié)點(diǎn)4回退跳轉(zhuǎn)到節(jié)點(diǎn)2(而略過(guò)了節(jié)點(diǎn)3),。此時(shí)就需要在節(jié)點(diǎn)4和節(jié)點(diǎn)2之間由程序動(dòng)態(tài)地創(chuàng)建一個(gè)轉(zhuǎn)移(transition),并設(shè)定為優(yōu)先級(jí)最高,,如圖6所示,。


    因此在執(zhí)行takeTransition( )方法時(shí),按照優(yōu)先級(jí)將優(yōu)先執(zhí)行動(dòng)態(tài)創(chuàng)建的轉(zhuǎn)移,,然后對(duì)外暴露1個(gè)jumpTransition(String destinationActivityName)方法給客戶端,。應(yīng)用jBPM4實(shí)現(xiàn)時(shí)可按照如下步驟進(jìn)行擴(kuò)展:
    (1)參照文件CompleteTaskCmd.java擴(kuò)展開(kāi)發(fā)用于跳轉(zhuǎn)的cmd:JumpTaskCmd。
    (2)參照文件TransitionStartActivity.java的原子操作,,定制開(kāi)發(fā)用于跳轉(zhuǎn)的原子操作JumpTransitionStartActivity,。
    由于jBPM4中的執(zhí)行動(dòng)作都是基于Command模式實(shí)現(xiàn)的,,因此在擴(kuò)展開(kāi)發(fā)自己的跳轉(zhuǎn)動(dòng)作時(shí),,就可以做到對(duì)jBPM4本身的代碼不做侵入修改而實(shí)現(xiàn)。這種臨時(shí)建立動(dòng)態(tài)路由的思路不僅可以用于回退,,同樣可以用于重新操作后的跳轉(zhuǎn)的實(shí)現(xiàn),。
    jBPM作為目前應(yīng)用最廣泛的開(kāi)源工作流產(chǎn)品,其最新的第4版有著很好的架構(gòu)及擴(kuò)展性,。但是由于國(guó)外的流程應(yīng)用與國(guó)內(nèi)的應(yīng)用有所不同,,因此要想讓jBPM4更好地滿足國(guó)內(nèi)的流程應(yīng)用的需求,還需要做一定的定制開(kāi)發(fā),。本文針對(duì)國(guó)內(nèi)的流程應(yīng)用的典型特點(diǎn)進(jìn)行了較詳細(xì)的分析,,特別針對(duì)臨時(shí)動(dòng)態(tài)性需求的各種情況,給出了基于jBPM4的解決思路(限于篇幅文中并沒(méi)有給出很詳細(xì)的可以運(yùn)行的代碼),。本文所做的工作只是工作流應(yīng)用技術(shù)研究的一小部分,,還有很多方面需要繼續(xù)學(xué)習(xí)和實(shí)踐,需要進(jìn)行深入的研究,。
參考文獻(xiàn)
[1] 范玉順.工作流管理技術(shù)基礎(chǔ)[M].北京:清華大學(xué)出版社,,2001.
[2] WfMC-TC00-1003v1. 1. The workflow reference model[S]. 1995.
[3] JBoss官方.jBPM Documentation[EB/OL].http://www.jboss.org/jbossjbpm.2009-09.
[4] 胡長(zhǎng)城.工作流講解[EB/OL].www.javafox.org.2009-09.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。