程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JBPM中流程變量與任務變量的區別

JBPM中流程變量與任務變量的區別

編輯:關於JAVA
 

在jbpm主要有兩類變量, 一種是流程實例范圍的變量, 另一種是任務實例范圍的變量. 而在流程實例氛圍中的變量又分為兩種:一種是瞬時變量(transient variable), 另一種是普通的變量, 瞬時變量通過setTransientVariable()方法來設置, 該變量不會持久化到jbpm_variableinstance表中, 它只能在當前流程實例的整個生命周期中存在, 一旦流程實例結束之後, 該變量將不復存在. 而另一種是通過setVariable()和setVariableLocally()方法進行保存,通過getVariable()訪問的變量, 這種變量是在整個流程實例中都可訪問的, 因為它會保存到jbpm_variableinstance表中.

流程實例變量還是很好理解的, 任務實例變量則相對復雜一些.
任務實例變量還可以直接訪問實例變量, 這可以按照java程序中變量的作用范圍來理解, 任務實例變量相當於局部變量, 僅在當前流程實例中可見, 流程實例變量相當於全局變量, 在整個流程中可見. 當通過任務實例查找一個流程時, 如果在當前的任務實例中沒有找到, 將繼續到流程實例中去找. 比如通過ContextInstance.setVariable("foo", "foo")創建的流程實例變量, 那麼任務實例可以直接通過TaskInstance.getVariable("foo")訪問到.

而如果要在TaskInstance中修改流程實例變量, 則需要通過Task Controller. 在定義流程文件的時候, 我們會在task節點下使用這樣的配置:

Xml代碼 復制代碼
<controller>
<variable access="read,required" name="foo"></variable>
</controller>
<controller> <variable access="read,required" name="foo"></variable> </controller>
Task Controller會在創建一個任務實例時, 根據Controller下配置的variable, 先找是否存在同名的流程實例變量, 如果存在, 那麼將用流程實例變量的值來創建屬於當前任務實例變量, 在任務結束的時候, 將任務實例變量的值保存到同名的流程實例變量中.如果在流程實例中不存在同名的流程變量, 那麼會創建一個同名的流程變量, 比如上面的配置, 將同時創建一個名為foo的流程實例變量和任務實例變量.如果指定了mapped-name屬性, 那麼name指的是流程實例變量名, mapped-name指的是任務實例變量名,比如:

Xml代碼 復制代碼
<controller>
<variable access="read,required" name="foo" mapped-name = "bar"></variable>
</controller>
<controller> <variable access="read,required" name="foo" mapped-name = "bar"></variable> </controller>
該配置將在任務實例變量bar和流程實例變量foo之間建立映射關系, 變量值將在這兩個變量之間傳遞.至於access屬性, 我自己試驗了一下, 設置為read, required, write不同的組合值好像沒有什麼區別.

流程實例變量的設置也有一些要注意的地方, 如果變量沒有在task controller中作映射, 當使用TaskInstance.setVariable("foo", "bar")的時候, 則保存到jbpm_variableinstance表中的taskinstance_字段是空的, 也就是只能做為流程實例變量訪問, 而無法通過任務實例變量訪問到, 如何才能通過任務實例來訪問該變量呢? 回答是使用TaskInstance.setVariableLocally("foo", "bar")來設置流程實例變量, 這樣保存到jbpm_variableinstance表會同時任務實例id設置為taskinstance_字段的值, 同時它還創建了一個同名的流程實例變量(不知道jbpm為什麼要這麼做).

 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved