流程:submit loan request (自動) → evaluate (等待) → approve → wire money (自動) → archive (等待) → end (等待)。
用 ProcessFactory (Fluent DSL) 構建,簡化圖形建模。
執行軌跡:
1. startProcessInstance() → 執行自動節點 → 定位 evaluate。
2. signal("approve") → 選擇 approve 轉移 → 執行 wire money (打印) → 默認傳播 → 定位 archive 返回。
3. 再次 signal("approve") → 定位 end 返回。
EventListener 接口:notify(EventListenerExecution)。
目的:開發者向流程添加程序邏輯 (如 DB 插入) 不改流程圖,促進業務分析師與開發者協作。
常用事件由執行自動觸發 (start/end/transition 等)。用戶/流程語言可用 fire(eventName, eventSource) 編程觸發。
多監聽器按序執行,不可控制執行流向 (異於 Activity 行為)。
默認向最近流程元素傳播 (父活動、流程定義)。允許在組合活動/流程定義註冊監聽器捕獲子活動事件。
示例:DisplaySource 監聽器註冊於組合活動的 end 事件,打印離開活動名。
執行過程:
1. 啟動 → 定位 a (初始自動)。
2. signal() → 選擇轉移 → 觸發 a 的 end 事件 → 傳播至組合活動 → 監聽器打印 leaving activity(a)。
3. 再次 signal() → 觸發 b 和組合活動的 end 事件 → 打印 leaving activity(b)、leaving activity(composite)。
傳播基於繼承組合結構:流程定義 → 活動 → 內嵌活動 (超級狀態/組合活動)。轉移父節點為源/目標首個共同父節點。
監聽器構建時調用 propagationDisabled()。
示例同前,但組合活動監聽器禁用傳播。
第一次 signal:a 的 end 事件傳播至組合活動,但監聽器不執行。
第二次 signal:b 的 end 事件傳播至組合活動 (監聽器不執行);組合活動自身觸發 end 事件 (非傳播) → 監聽器執行一次,打印 leaving activity(composite)。
禁用傳播屬於單個監聽器,不影響其他監聽器;事件仍會觸發並傳播至整個父繼承結構。
| 接口/類 | 關鍵方法 |
|---|---|
| EventListener | notify(EventListenerExecution) |
| Execution | fire(String eventName, ProcessElement eventSource) |
| ProcessFactory | activity().event().listener().propagationDisabled() |