首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

流程變量與任務變量實戰對比:JBPM 變量作用域與映射機制深度解析

     編輯:Java 相關知識

在 JBPM(jBPM 3.x/4.x)工作流引擎中,變量管理是實現業務數據流轉的核心。理解流程變量(Process Variable)與任務變量(Task Variable)的作用域、存取屬性、映射規則,是設計正確流程邏輯的前提。本文通過 XML 配置實例,系統剖析兩者差異與交互機制。

一、流程變量:全局上下文的數據載體

定義與存取屬性

流程變量定義於流程定義檔(processdefinition.xml)的 <variable> 元素,access 屬性控制父子流程間的數據流向:

access 值行為語義典型場景
read子流程啟動時,從父流程讀取同名變量值,寫入子流程上下文;子流程結束時不回寫父流程傳遞只讀配置參數給子流程
write子流程啟動時不讀取父流程值;子流程結束時,將子流程同名變量值回寫父流程子流程執行計算/審批,結果回傳父流程
read,write雙向流動:啟動時讀取父值,結束時回寫子值(可能覆蓋父值)父子流程共享協作數據
read,write + mapped-name名稱映射:父流程用 name,子流程用 mapped-name,雙向同步父子流程變量命名不一致時的適配

XML 配置實例

<variable access="read" name="master" />
<variable access="write" name="slave" />
<variable access="read,write" name="variable" />
<variable access="read,write" name="mapping" mapped-name="mapped d" />
  • master:父→子單向傳遞
  • slave:子→父單向回寫
  • variable:雙向同步,同名
  • mapping:雙向同步,父叫 mapping,子叫 mapped d

二、任務變量:節點級的表單數據綁定

控制器配置

任務變量定義於任務節點的 <controller> 內,綁定表單欄位與流程變量:

<task name="chengyi">
  <controller>
    <variable name="v1" access="read" mapped-name="test v1" />
    <variable name="v2" access="write" mapped-name="test v2" />
    <variable name="v3" access="read,write" mapped-name="test v3" />
    <variable name="v4" access="read,write,required" mapped-name="test v4" />
  </controller>
</task>

四種存取模式深度解析

變量access初始化(任務建立時)完成(任務結束時)關鍵差異
v1read從流程上下文讀取 key=v1 的值 → Controller 變量 v1不回寫 流程上下文純展示用,如顯示審批歷史
v2write不讀取 流程上下文,Controller v2 初始為 null將 Controller v2 值回寫流程上下文,key 為 v2(無 mapped-name 時)純輸入用,如錄入審批意見
v3read,write讀取流程 key=v3 → Controller v3回寫流程,key 為 mapped-name 值(test v3),而非 v3雙向綁定,且支援名稱映射
v4read,write,required同 v3同 v3,但強制回寫:若未設值拋出 IllegalArgumentException必填字段保護

mapped-name 核心作用

  • 解耦命名:表單欄位名(Controller 變量名)與流程變量名分離
  • 多任務復用:不同任務節點可映射同一流程變量,或同任務不同表單版本映射不同流程變量
  • 注意:name 對應流程變量 key,mapped-name 對應 Controller/表單欄位名

三、核心差異總結表

維度流程變量任務變量
作用域整個流程實例(跨節點)單一任務實例(節點內)
生命週期流程啟動→流程結束任務建立→任務完成
定義位置<process-definition> 根節點<task> 節點下的 <controller>
數據流向控制access 控制父子流程間流向access 控制任務與流程上下文間流向
名稱映射mapped-name 用於父子流程映射mapped-name 用於表單欄位與流程變量映射
持久化存儲於 jbpm_variableinstance,processinstance_ 關聯流程同表,但 taskinstance_ 關聯任務實例

四、實戰最佳實踐

  1. 最小權限原則:任務只需讀取的數據用 read,只需寫入的用 write,避免誤覆蓋流程數據
  2. 統一命名規範:流程變量用駝峰(orderId),表單欄位用下劃線(order_id),透過 mapped-name 映射,語義清晰
  3. 必填驗證前置:required 僅在任務完成時檢查,建議在表單前端/Controller 邏輯中提前校驗,體驗更好
  4. 避免循環依賴:多任務並行時,警惕 read,write 導致的併發覆蓋,必要時用鎖或分離變量

總結:流程變量是「全局總線」,任務變量是「節點適配器」。掌握 access 四種模式與 mapped-name 映射機制,能精準控制數據在流程層與任務層的流向,構建清晰、可維護的工作流應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved