freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

揭秘jbpm流程引擎內(nèi)核設(shè)計(jì)思想及構(gòu)架(參考版)

2025-04-11 23:33本頁面
  

【正文】 耗時(shí)一周的業(yè)余時(shí)間,雖然還很難詮釋自己的全部想法,但“點(diǎn)出幾個(gè)要點(diǎn)”,還是應(yīng)該有了。前些日子,受朋友所托,為他們的公司學(xué)員講了幾節(jié)工作流的課程,期間嘗試jBpm來詮釋了一下引擎的實(shí)現(xiàn)思路,發(fā)現(xiàn)效果不錯(cuò)。正如前面所說的那樣,引擎內(nèi)核的實(shí)現(xiàn),并沒有一套“固定的模式”或者“固定的實(shí)現(xiàn)體系”,會(huì)因?yàn)楹芏嘁蛩囟斐蓪?shí)現(xiàn)不同。而workflow,也有兩三年沒有從事這方面的開發(fā)了,所以寫此篇文章,著實(shí)費(fèi)了點(diǎn)功夫。10 后記上半年寫了些bpm和SOA的文章,也被csdn的好友拉著忽悠了不少這方面的概念,弄的好像我開始搞這方面的工作似的。(2)每個(gè)流程實(shí)例,都會(huì)維護(hù)一套屬于其自己的“執(zhí)行環(huán)境”,也就是ExecutionContext對(duì)象。如下圖所示。9 jBpm內(nèi)核結(jié)構(gòu)與實(shí)例對(duì)象 Jbpm引擎內(nèi)核的結(jié)構(gòu)非常“精簡”。 return forkedToken。 }} protected ForkedToken createForkedToken(Token parent, String transitionName) { Token childToken = new Token(parent, getTokenName(parent, transitionName))。 while( () ) { //省略部分代碼 ExecutionContext childExecutionContext = new ExecutionContext(childToken)。 (createForkedToken(token, transitionName))。 Iterator iter = ()。在聚合節(jié)點(diǎn)(Join或Merge),則依賴其同步或異步的聚合方式,來分別處理。 jBpm的執(zhí)行機(jī)制非常簡單,但還是需要稍微補(bǔ)充一下有關(guān)“分支”方面的處理。 讓我們?cè)谇懊婺菑坖Bpm的“調(diào)度機(jī)制思維圖”上,再稍稍補(bǔ)充一點(diǎn)(為了突出顯示,與上圖有所改動(dòng))。作為個(gè)人,我并不行賞jBpm這樣拋棄“節(jié)點(diǎn)生命周期管理”的實(shí)現(xiàn)方式,更行賞OBE(最早的基于XPDL模型的java工作流引擎之一)的生命周期約束和管理。(3)通常我們需要在Active和Completed的生命周期內(nèi)所要操作的分支與聚合,在jBpm模型中分別由Fork、Join之類的節(jié)點(diǎn)替代。利用Token和TaskInstance,jBpm足以持久化足夠的信息,能夠讓流程實(shí)例迅速定位到當(dāng)前運(yùn)行的狀態(tài)。(僅供參考,實(shí)際很多工作流引擎的節(jié)點(diǎn)的生命周期要比這復(fù)雜)但是,jbpm并沒有突出“節(jié)點(diǎn)生命周期”這個(gè)理念,僅僅只是在“Event”中體現(xiàn)出出來。首先我們需要明確如下的概念:(1)節(jié)點(diǎn)有很多中,每種節(jié)點(diǎn)的執(zhí)行方式肯定是不一樣的(2)節(jié)點(diǎn)有自己的生命周期,不同的生命周期階段,所處的狀態(tài)不同。—— 這就是jbpm的調(diào)度機(jī)制。 // execute the node if (isAsync) { } else { execute(executionContext)。 // remove the transition references from the runtime context (null)。讓我們來看看Node對(duì)象的enter操作:public void enter(ExecutionContext executionContext) { Token token = ()。 // pass the token to the destinationNode node (executionContext)。 (executionContext)。 (transition)。讓我們來看看node對(duì)象的leave方法:public void leave(ExecutionContext executionContext, Transition transition) { Token token = ()。所以,jbpm此處的設(shè)計(jì)思路,是于此有一定關(guān)系的。}前面說過,jbpm的調(diào)度機(jī)制吸納的Petri Net的思想。如果這地方讓你自己來實(shí)現(xiàn),代碼會(huì)不會(huì)就是這樣子呢?不妨此處想一想。}接下來,()這個(gè)操作。讓我們來看看Token類中signal方法的部分代碼實(shí)現(xiàn),僅供參考:public void signal() { //注意ExecutionContext對(duì)象 signal((), new ExecutionContext(this))。 但是,這兩個(gè)操作,都是通過“當(dāng)前token的signal操作”來內(nèi)部實(shí)現(xiàn)的,如下圖所示:Token的Signal操作表示:實(shí)例需要離開當(dāng)前token所在的節(jié)點(diǎn),轉(zhuǎn)移到下一個(gè)節(jié)點(diǎn)上。 Token的推進(jìn)當(dāng)Token已經(jīng)在StartState節(jié)點(diǎn)了,我們可以開始往前推進(jìn),來促使流程實(shí)例往前運(yùn)行。jbpm是允許在startstate執(zhí)行Task的,也允許在startstat
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1