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

分享

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

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

 

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

于是才有了這個系列介紹的打算:

 

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

 

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

 


 

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

 

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

 

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

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

 

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

<workflow>

  <initial-actions>

    ...

  </initial-actions>

  <steps>

    ...

  </steps>

</workflow>

 

initialize方法中,主要是存在四個功能:

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

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

(3)       獲取指定的Action對象

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

 

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

 

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

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

(02) Validate transientVars(驗證臨時變量)

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

    如果step不為null(執(zhí)行初始化action的時候,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 (檢查每一個條件的執(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)

    如果是初始化動作

(13) Mark the entry state as Activated

如果是結(jié)束動作

(14) Set the entry state Completed

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

(15) perform available and auto global actions

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多