小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

activiti源碼學(xué)習(xí)之pvm篇

 賈朋亮博客 2015-12-25

pvm是什么?

PVM(Process Virtual Machine):流程虛擬機(jī)。

官方解釋:

流程虛擬機(jī)-一種可嵌入的、原生的支持多流程語(yǔ)言的獨(dú)立技術(shù)。

流程虛擬機(jī)是一個(gè)用來(lái)構(gòu)建和執(zhí)行流程圖的簡(jiǎn)單的java類庫(kù)。它充當(dāng)各種工作流、業(yè)務(wù)流程管理和編制流程語(yǔ)言的基礎(chǔ)。

流程虛擬機(jī)是多流程語(yǔ)言的基礎(chǔ)。對(duì)任何流程語(yǔ)言的原生支持都可以建立在流程虛擬機(jī)之上。流程圖中每個(gè)活動(dòng)的運(yùn)行期行為被委托給一個(gè)java的接口。流程語(yǔ)言是一套活動(dòng)類型的集合。一個(gè)活動(dòng)實(shí)現(xiàn)運(yùn)行期行為并且對(duì)應(yīng)一個(gè)活動(dòng)類型。因此在流程虛擬機(jī)上建立一個(gè)流程語(yǔ)言就和創(chuàng)建一套活動(dòng)實(shí)現(xiàn)一樣簡(jiǎn)單。通過(guò)相同的機(jī)制,像jpdl這種語(yǔ)言是很容易擴(kuò)展的。


說(shuō)白了,在activiti中就是一堆java類庫(kù),支持流程的所有運(yùn)行期的運(yùn)轉(zhuǎn),包括啟動(dòng)、停止、審批等等。


PVM是做什么的?

PVM主要就是負(fù)責(zé)流程整個(gè)運(yùn)行期的執(zhí)行、流轉(zhuǎn)等所有運(yùn)行過(guò)程。


PVM何時(shí)被調(diào)用?

PVM從啟動(dòng)開(kāi)始,一直到流程的結(jié)束,包括啟動(dòng)、停止、審批流程等有關(guān)于改變流程的操作,都要調(diào)用pvm來(lái)實(shí)現(xiàn)。


activiti中是如何實(shí)現(xiàn)pvm的?

activiti中pvm的設(shè)計(jì)實(shí)現(xiàn)非常巧妙,下面通過(guò)源碼解析,來(lái)了解activiti中pvm的實(shí)現(xiàn)。

activiti對(duì)pvm的實(shí)現(xiàn)都放在org.activiti.engine.impl.pvm包里。

1.面向?qū)ο蟮脑O(shè)計(jì):

眾所周知,activiti是通過(guò)bpmn2.0規(guī)范來(lái)設(shè)計(jì),每個(gè)流程包括開(kāi)始節(jié)點(diǎn)、結(jié)束節(jié)點(diǎn)、Task節(jié)點(diǎn)、以及連接線走向和各種way。

activiti在pvm中,將每個(gè)流程元素設(shè)計(jì)成對(duì)象,類圖如下:


a.PvmActivity:活動(dòng)節(jié)點(diǎn),在流程圖上對(duì)應(yīng)開(kāi)始節(jié)點(diǎn)、結(jié)束節(jié)點(diǎn)、各種任務(wù)節(jié)點(diǎn)、各種菱形代表的聚合節(jié)點(diǎn)。

b.PvmTransition:連接線。

c.PvmProcessDefinition:流程定義(全局)。

以上為activiti元素與pvm對(duì)象的映射關(guān)系,那么是誰(shuí)通過(guò)這些對(duì)象來(lái)運(yùn)行的流程呢?

2.面向行為的設(shè)計(jì)

pvm運(yùn)行期的操作類,都放在org.activiti.engine.impl.pvm.runtime包中。

activiti中對(duì)流程的操作都封裝為特定的操作(Operation),如流程啟動(dòng)、流程結(jié)束、任務(wù)啟動(dòng)、任務(wù)執(zhí)行、任務(wù)結(jié)束等。每個(gè)具體的操作控制每個(gè)具體點(diǎn)流程運(yùn)行邏輯。如任務(wù)啟動(dòng)操作行為會(huì)觸發(fā)監(jiān)聽(tīng)器、流程任務(wù)等。

下面為流程運(yùn)行期的操作設(shè)計(jì),如圖:


通過(guò)名字不難看出,每個(gè)操作都封裝成了一個(gè)操作行為,如:

AtomicOperationProcessStart,代表流程啟動(dòng)操作行為

AtomicOperationProcessEnd,代表流程結(jié)束操作行為

等等。

這里的操作行為是針對(duì)于通用的流程的運(yùn)轉(zhuǎn)。而流程的任務(wù)分為多種類型,如Usertask/mailtask/ReceiveTask/以及子流程等。根據(jù)類型的不同,行為也是不同的,activiti中是這樣設(shè)計(jì)的:運(yùn)用委托模式,將每種類型的行為封裝成一個(gè)單獨(dú)的行為類,在執(zhí)行不同的類型任務(wù)是,將該類型的行為對(duì)象賦值給ActivityImpl,ActivityImpl運(yùn)行時(shí),將行為委托給這個(gè)行為對(duì)象,行為對(duì)象在調(diào)用pvm的操作,就完成了流程的運(yùn)轉(zhuǎn)。

pvm的委托行為總接口都放在org.activiti.engine.impl.pvm.delegate包中。

acitiviti 具體的任務(wù)委托行為類都放在org.activiti.engine.impl.bpmn.behavior包中。

下面為部分的委托類圖,如圖:


本篇主要介紹pvm的基本結(jié)構(gòu)和大體的調(diào)用關(guān)系,至于詳細(xì)的調(diào)用過(guò)程,后續(xù)會(huì)從啟動(dòng)、審批、結(jié)束,整個(gè)流程周期為出發(fā)點(diǎn)詳細(xì)解讀。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多