Activiti-5.3工作流引擎-源碼解析(流程文檔解析)


前面我們通過BPMN20.xsd和Activiti自定義的XML Schema文件初步了解了業務流程模型的定義,那么現在我們來了解一下流程文檔的解析過程,這個過程主要是通過代碼解析來完成。

代碼解析過程

       就代碼解析還是承接《業務流程部署》一篇的“代碼10”的片段來說吧。在解析之前我們先來看看Activiti5.3的微內核類圖結構

Activiti-5.3工作流引擎-源碼解析(流程文檔解析) - homeland520 - 好好學習,天天向上

圖1 

 

      (一)解析StartEvents

       根據“代碼10”的代碼片段,我們先看parseStartEvents(scopeElement, parentScope)的解析過程,該解析過程主要是創建startEventActivity實例,並將其放入流程定義processDefinition內。

parseStartEvents執行的主要過程:

    1. 解析並創建startEventActivity實例。
    2. 設置流程定義的初始化節點。
    3. 解析並創建startFormHandler實例。
    4. 設置流程定義的startFormHandler。
    5. 解析Activiti-5.2擴展的initiator屬性,並將其設置到流程定義的屬性列表里。
    6. 為startEventActivity設置活動行為執行器(NoneStartEventActivityBehavior)。

        上面提到了活動行為執行器,活動行為執行器的作用主要是執行流程轉移的。這里我們查看一下activiti5.3流程引擎中的活動行為執行器的類結構圖 

Activiti-5.3工作流引擎-源碼解析(流程文檔解析) - homeland520 - 好好學習,天天向上

 

圖2

Activiti-5.3工作流引擎-源碼解析(流程文檔解析) - homeland520 - 好好學習,天天向上

 圖3

Activiti-5.3工作流引擎-源碼解析(流程文檔解析) - homeland520 - 好好學習,天天向上

圖4

Activiti-5.3工作流引擎-源碼解析(流程文檔解析) - homeland520 - 好好學習,天天向上

 圖5

Activiti-5.3工作流引擎-源碼解析(流程文檔解析) - homeland520 - 好好學習,天天向上

 圖6

        從圖2-圖6我們可以看出活動行為執行器的類結構及其相互關系。

         (二)解析Activities

        現在我們再看parseActivities(scopeElement,parentScope)的解析過程,該解析過程主要解析exclusiveGateway、 parallelGateway、scriptTask、serviceTask、businessRuleTask、task、manualTask、userTask、sendTask、receiveTask、subProcess、callActivity。現在我們一次看上面各種節點的解析過程。

parseExclusiveGateway執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 為activity對象設置活動行為執行器(ExclusiveGatewayActivityBehavior)。
  3. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseParallelGateway執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 為activity對象設置活動行為執行器(ParallelGatewayActivityBehavior)。
  3. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseScriptTask執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 獲取子元素script及其文本內容,獲取scriptFormat屬性值,默認為juel,獲取resultVariable屬性值,這步主要是為第3步做准備。
  3. 為activity對象設置活動行為執行器(ScriptTaskActivityBehavior)。
  4. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseServiceTask執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 分別獲取元素屬性type、class、expression、delegateExpression、resultVariable、implementation、operationRef的值。
  3. 為activity對象設置活動行為執行器(ScriptTaskActivityBehavior)。
  4. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseBusinessRuleTask執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 初始化BusinessRuleTaskActivityBehavior實例ruleActivity並為其設置相關屬性。
  3. 為activity對象設置活動行為執行器(BusinessRuleTaskActivityBehavior)。
  4. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseTask執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 為activity對象設置活動行為執行器(TaskActivityBehavior)。
  3. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseManualTask執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 為activity對象設置活動行為執行器(ManualTaskActivityBehavior)。
  3. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseUserTask執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 初始化UserTaskActivityBehavior實例userTaskActivity並為其設置相關屬性。
  3. 為activity對象設置活動行為執行器(UserTaskActivityBehavior)。
  4. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseSendTask執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 為activity對象設置活動行為執行器(WebServiceActivityBehavior)。
  3. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseReceiveTask執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 為activity對象設置活動行為執行器(ReceiveTaskActivityBehavior)。
  3. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseSubProcess執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 為activity對象設置活動行為執行器(SubProcessActivityBehavior)。
  3. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseCallActivity執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 初始化CallActivityBehavior實例callActivityBehaviour並為其設置相關屬性。
  3. 為activity對象設置活動行為執行器(CallActivityBehavior)。
  4. 解析並創建ExecutionListener的實例,同時將其設置到actvity實例內。

parseIntermediateCatchEvent執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 為activity對象設置活動行為執行器(IntermediateCatchEventActivitiBehaviour)。

(三)解析EndEvents

parseEndEvents執行的主要過程:

  1. 解析並創建ActivityImpl實例activity,創建的過程中主要依賴的屬性是“id”,該屬性在所有的Activity中不允許重復。
  2. 為activity對象設置活動行為執行器(NoneEndEventActivityBehavior)。

(四)解析BoundaryEvents

 

(五)解析SequenceFlow

 

(六)解析ExecutionListeners


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM