jBPM4引入Process Virtual Machine (PVM)作為核心引擎,旨在提供一個語言無關、可擴展的流程執行基礎設施,以支持jPDL、BPEL、BPMN等多種流程語言。本文深入解析PVM的流程定義模型(靜態結構)與執行調度機制(動態行為),揭示其如何通過CompositeElement實現結構塊嵌套、Execution樹狀結構管理並發與作用域、AtomicOperation原子操作鏈驅動流程流轉,實現極致靈活的節點運行時行為。
Map<String, EventImpl> events。EventListener唯一方法notify(EventListenerExecution execution),引擎調度時回調。getActivities()、getActivity(name)。關鍵創新:Activity自身實現CompositeElement,實現節點嵌套(結構塊/Group)。
PVM流程定義模型接口體系
Activity嵌套形成結構塊(對應jPDL的group、BPMN的SubProcess)
設計啟示:結構塊是BPEL/BPMN合規的關鍵,引入後調度複雜度顯著上升(需處理跨層級事件傳播、作用域銷毀順序),但賦予了建模語言表達復雜業務邊界的能力。
activity(當前節點)、transition(當前轉移)定位執行位置。
Execution樹狀結構:根Execution包含並發子Execution與Scope Execution
所有Execution移動封裝在AtomicOperation中,確保狀態變更原子性。核心五步構成標準節點間移動鏈:
ActivityBehaviour.execute()。自動節點直接完成,等待節點(如State、Task)在此暫停。ExternalActivityBehaviour.signal(),典型實現調用execution.take(transition)。
七大AtomicOperation類圖
Execution在結構塊間移動:MOVE_TO_CHILD / MOVE_TO_PARENT 協同工作
execute(Execution),實現自動節點邏輯(服務調用、腳本執行等)。signal(Execution, signalName, parameters),實現等待狀態節點(人工任務、消息接收、定時器)的外部觸發邏輯。開發自定義節點時,僅需實現對應接口並配置到Activity的behaviour屬性,即可無縫接入PVM調度體系,享受事務、作用域、事件傳播等基礎設施能力。
jBPM4 PVM通過CompositeElement遞歸定義實現結構塊建模,通過Execution樹狀結構統一管理並發與作用域,通過AtomicOperation鏈保證流程流轉的原子性與可擴展性。這套機制雖增加了引擎內部複雜度,但為上層流程語言(jPDL/BPMN/BPEL)提供了堅實、靈活的運行時基座,也是理解jBPM4高級特性(如異常處理、補償、動態流程變更)的鑰匙。