乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

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

       

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

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

       

      在閱讀此系列之前,請隊(duì)FSM又算了解,也請先閱讀一下這篇文檔: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對象。我們可以把這個(gè)Workflow理解成一個(gè)Execute Engine或者Execute Runner。在一個(gè)訪問請求中,一個(gè)Workfow對象負(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);

       

      我們先來說說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í)例對象,在osworkflow中,流程實(shí)例對象用WorkflowEntry接口的子類實(shí)現(xiàn)

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

      (3)       獲取指定的Action對象

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

       

      這幾個(gè)功能中,重中之重,也是OSWorkflow的最為核心的算法,就是最后的轉(zhuǎn)移。在這轉(zhuǎn)移過程中,會執(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è)人知識管理的網(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)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多