流程模型

作者:我想我是海

1概述
一個流程定義是對一個業務流程的正式說明,以及它是基於有向圖的。該圖是結點(node)與流向(transition)的組合。圖中每一個結點都是一個特殊的類型,結果的類型決定了該結點的運行時的行爲。一個流程定義有且僅有一個開始狀態。
一個令牌(token)是執行的軌跡。令牌是一個運行時的概念,其維護着速個圖中指向結點的指針。
一個流程實例(process instance),是流程定義的一次執行過程。當流程實例被創建 ,一個令牌被創建,該令牌叫做這個流程實例的根令牌並處於這個流程實例的開始狀態。
信號(signal)命令令牌繼續執行,當接收到一個未命名的信號時,一個令牌將通過默認的“離開流向”離開當前結點,如果該信號有明確命名,令牌將通過指定的流向離開該結點。給流程實例發送命令是由令牌來代理。
當令牌進入結點後,結點會被執和,結點本身負頁讓流程繼續,而讓流程繼續就是讓令牌離開當前結點,每個結點類型可以實現不同的動作來讓流程繼續。一個結點如果不繼續執行則可以看作是一個狀態。
動作(Action)是在執行流程的時候事件觸發執行的Java代碼,圖是軟件需求的重要表達方式,但是圖只是一個軟件的視圖,它隱藏了許多技術的細節。動作就是把技術細節隱藏在圖以外的一種 機制。動作可以裝飾圖。主要的事件有:進入一個結點,離開一個結點,開始一個流向等。

2流程圖
流程定義的基本設施是由結點及流向組成的圖。那些信息是由一個叫processdefinition.xml的XML文件來定義的,每個結點有自已的類型,如狀態、選擇、分支、合併。每個結點有自已的流向集,每個流向有其唯一的名稱。如,下面一幅圖是一個JBAY拍賣流程的流程圖:

下面是其對應的processdefinition.xml

代碼
  1. <process-definition>  
  2.   
  3.   <start-state>  
  4.     <transition to="auction" />  
  5.   </start-state>  
  6.      
  7.   <state name="auction">  
  8.     <transition name="auction ends" to="salefork" />  
  9.     <transition name="cancel" to="end" />  
  10.   </state>  
  11.      
  12.   <fork name="salefork">  
  13.     <transition name="shipping" to="send item" />  
  14.     <transition name="billing" to="receive money" />  
  15.   </fork>  
  16.      
  17.   <state name="send item">  
  18.     <transition to="receive item" />  
  19.   </state>  
  20.   
  21.   <state name="receive item">  
  22.     <transition to="salejoin" />  
  23.   </state>  
  24.      
  25.   <state name="receive money">  
  26.     <transition to="send money" />  
  27.   </state>  
  28.   
  29.   <state name="send money">  
  30.     <transition to="salejoin" />  
  31.   </state>  
  32.      
  33.   <join name="salejoin">  
  34.     <transition to="end" />  
  35.   </join>  
  36.      
  37.   <end-state name="end" />  
  38.      
  39. </process-definition>  
<script type="text/javascript">render_code();</script>

3結點
流和圖由結點及流向組成,更多的圖及執行模型,見第四章,面向圖形編程。
結點有類型,結點的類型決定了在運行時,執行進入到一個結點時發生的事情。JBPM有一系列的預置結點類型供我們使用。同時,你可以自已定義自已的結點類型。

3.1結點的責任
結點有兩個主要的責任,一,可以執行Java代碼,通常這些Java代碼與該結點的功能有點,如創建一個任務實例,發送一個通知,更新數據庫,二,結點負責傳播流程,即使流程可繼續執行,概括地說,結點在傳播流程時有下面一些選項:
* 1 不傳播流程,這種情況下該結點表現爲一個等待狀態。
* 2 執行其中一個流向,流開當前結點。也就是說令牌在進入該結點的時候被程序要求執行一個流向流開:executionContext.leaveNode(String)。該結點表現爲自動結點,它可以執行一些自定義邏輯並且繼續流程而不需要等待。
*3 創建新的執行軌跡,結點可以決定創建新的令牌。每一個新令牌代表一個新的執行軌跡且可以在結點的流向中加載。一個好的示例就是分支結點。
*4 執行軌跡的結束點。結點可以決定結束一個執行軌跡。意味着令牌被終止、執行軌跡完成。
*5 通常,結點可以改變流程的整個運行時結構,運行時結構是指包括一系列的品樹形分佈的令牌。每個令牌代表一條執行軌跡,結點創建或結束令牌,通過流向把令牌放到一個結點
JBPM包括 -- 像所有的工作流和BPM引擎一樣-- 一系列的預置的結點類型,有文檔描述
它們的配置和行爲。但是JBPM和麪向圖形編程基金會最難得的一點是我們對開發者開放模型,開發者可以自定義結點行爲並易於在流程中使用。
傳統的工作流和業務流程管理系統很相像的時,他們通常提供合適的結點集合(稱爲流程語言),他們的流程語言是封閉的,並且執行模型是隱藏在運行環境之後。查找工作流模式結果表明,光有流程語言是不足夠的。我們選擇一種簡單的模型並允許開發者寫自已的結點類型。JPDL流程語言是開放的。

發佈了0 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章