活動可基於轉移或組合實現循環,循環可包含等待狀態。為支持多次自動循環,流程虛擬機將尾部遞歸轉換為 while 循環傳播執行。
TODO:待補充。
Activity 作為行為時,可用以下方法外部控制流程:waitForSignal()、take(Transition)、end()、execute(Activity)、createExecution()。
若無調用傳播方法,則按默認行為:
1. 有默認外向轉移 → 選擇它。
2. 有父活動 → 回退父活動。
3. 否則 → 結束執行。
流程語言可重寫 ExecutionImpl.proceed() 覆蓋默認行為。
活動可作事件監聽器 (功能活動):發送郵件、數據庫更新、生成 PDF、計算平均值等自動活動,不改變執行流向。實現 Activity、EventListener 接口,execute() 與 notify() 均委派 perform(OpenExecution)。OpenExecution 提供當前狀態、變量檢驗、環境信息。perform 完成後按默認行為傳播。
流程虛擬機通過客戶端線程將執行從一等待狀態推進至下一等待狀態。
signal() 默認同步阻塞至下一等待狀態返回。兩種異步補充:異步繼續、異步命令服務。
流程定義 (DSL) 包含:wait 1 (初始) → automatic 1/2/3/4 (Display 打印) → wait 2 → wait 3。
執行軌跡:
1. startProcessInstance() → 定位 wait 1。
2. signal() → 穿透四自動活動 → 定位 wait 2 返回。
3. 再次 signal() → 定位 wait 3 返回。
同一定義可在客戶端模式 (內存) 或持久化模式運行。
外部觸發 (紅色) 後計算工作 (綠色) 通常極短 (<1s),等待狀態可能持續數小時/天/年。默認持久化模式下,流程工作在客戶端線程同一事務中完成,直到下一等待狀態。分支/同步路徑亦在同一事務順序執行,無多線程並發問題。
業務分析員只需知活動由人/系統響應;開發者必須精確劃分自動活動、等待狀態、線程分配。查找外部觸發器 (等待狀態) 是關鍵,如同 UML 類圖識別名詞動詞。