日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

OSWorkflow深層講解系列(一)初始化的原理 - 胡長(zhǎng)城(銀狐999)BLOG - ...

 昵稱2807 2008-07-14
OSWorkflow深層講解系列(一)初始化的原理收藏

 

周日,莫映我們javaparty的伙伴講了講osworkflow,估計(jì)很多人還是一頭霧水。目前國(guó)內(nèi)似乎關(guān)注osworkflow的人越來(lái)越多,但是卻沒有多少人去關(guān)注其真正值得參考和學(xué)習(xí)的地方,這是不應(yīng)該的。OSWorkflow的確非常靈活,但是我們不光需要知道“用的靈活”,還要知道“深層次的東東”。

于是才有了這個(gè)系列介紹的打算:

 

在閱讀此系列之前,請(qǐng)隊(duì)FSM又算了解,也請(qǐng)先閱讀一下這篇文檔:http://blog.csdn.net/james999/archive/2004/10/29/158653.aspx

 

我們現(xiàn)在就先從osworkflow的一個(gè)實(shí)例如何初始化入手:

 


 

首先OSWorkflow,和我們通常所理解的Engine并不是很一樣。在OSWorkflow中沒有“Service”的概念,所以每次訪問的時(shí)候,都可以重新創(chuàng)建一個(gè)Workflow對(duì)象。我們可以把這個(gè)Workflow理解成一個(gè)Execute Engine或者Execute Runner。在一個(gè)訪問請(qǐng)求中,一個(gè)Workfow對(duì)象負(fù)責(zé)維護(hù)一個(gè)流程實(shí)例的管理和操作。

 

Workflow workflow = new BasicWorkflow("testuser");
DefaultConfiguration config = new DefaultConfiguration();
workflow.setConfiguration(config);
long workflowId = workflow.initialize("mytest", 1, null);
workflow.doAction(workflowId, 1, null);

 

我們先來(lái)說說initialize方法,可以邊看文檔,邊閱讀osworkflowAbstractWorkflow類:

       在你的一個(gè)工作流定義文件中,至少是需要定義一個(gè)initial action。這些initial action其實(shí)就是流程實(shí)例的可能運(yùn)行起點(diǎn)。就如同我們通常說說的start node或者start activity等等。

 

<?xml version="1.0" encoding="UTF-8"?>

<workflow>

  <initial-actions>

    ...

  </initial-actions>

  <steps>

    ...

  </steps>

</workflow>

 

initialize方法中,主要是存在四個(gè)功能:

(1)       創(chuàng)建流程實(shí)例對(duì)象,在osworkflow中,流程實(shí)例對(duì)象用WorkflowEntry接口的子類實(shí)現(xiàn)

(2)       構(gòu)造臨時(shí)變量的集合,即transientVars;用于在一個(gè)轉(zhuǎn)移過程中臨時(shí)保持?jǐn)?shù)據(jù)狀態(tài)

(3)       獲取指定的Action對(duì)象

(4)       執(zhí)行這個(gè)Action,并造成轉(zhuǎn)移,即transitionWorkflow方法

 

這幾個(gè)功能中,重中之重,也是OSWorkflow的最為核心的算法,就是最后的轉(zhuǎn)移。在這轉(zhuǎn)移過程中,會(huì)執(zhí)行下面的一系列操作:

 

(這張列表最初是由 莫映 整理,我補(bǔ)充和修改了一些)

(01) Get current step(獲取當(dāng)前的Step

(02) Validate transientVars(驗(yàn)證臨時(shí)變量)

(03) Validate inputs(驗(yàn)證輸入的數(shù)據(jù))

    如果step不為null(執(zhí)行初始化action的時(shí)候,current step還不存在)

(04) Execute post-functions(step-level) (執(zhí)行steppost function

(05) Execute pre-functions(action-level) (執(zhí)行actionpre function

(06) Check each conditional results (檢查每一個(gè)條件的執(zhí)行結(jié)果)

(07) Execute pre-functions(result-level) (運(yùn)行resultpre function

(08) Move current step into history

(09) Create new current step

(10) Execute pre-functions(step-level)

(11) Execute post-functions(result-level)

(12) Execute post-functions(action-level)

    如果是初始化動(dòng)作

(13) Mark the entry state as Activated

如果是結(jié)束動(dòng)作

(14) Set the entry state Completed

獲取globalActions中可以自動(dòng)執(zhí)行的,并執(zhí)行

(15) perform available and auto global actions

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(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)論公約

    類似文章 更多