第16章 jBPM流程定義語言(JPDL)
JPDL指定了xml模式和打包所有流程定義相關文件到一個流程檔案的機制。
16.1 流程檔案
一個流程檔案就是一個zip文件,流程檔案中的核心文件是processdefinition.xml,該文件的主要信息是流程圖,processdefinition.xml文件還包括有關動作和任務的信息。流程檔案也可以包含其他流程相關文件,如classes(類的字節碼文件)、任務的ui-forms(任務的用戶界面窗體)、…
16.1.1 部署流程檔案
可以用3種方式部署流程檔案:用流程設計器工具,用ant任務或編程。
使用設計器工具部署流程檔案仍然在構建階段。
使用ant任務部署流程檔案可以按照如下方式:
<target name="deploy.par">
<taskdef name="deploypar" classname="org.jbpm.ant.DeployParTask">
<classpath --make sure the jbpm-[version].jar is in this classpath--/>
</taskdef>
<deploypar par="build/myprocess.par" />
</target>
要一次部署多個流程檔案,可以使用嵌套的fileset元素,file屬性是可選的。Ant任務的其他屬性是:
l cfg:cfg是可選的,默認值是“hibernate.cfg.xml”,hibernate配置文件包含jdbc連接數據庫的屬性以及映射文件。
l properties:properties是可選的,並且覆蓋所有hibernate.cfg.xml文件中的hibernate相同屬性。
l createschema:如果設置爲true,則jbpm數據庫模式(數據表)在流程部署前被創建。
流程檔案還可以通過使用類org.jbpm.jpdl.par.ProcessArchiveDeployer編程被部署。
16.1.2 流程版本
流程定義不應該改變,因爲預測流程變化帶來的所有可能的影響是非常困難的(或者說是不可能的)。
圍繞這個問題,jBPM有一個明智的流程版本機制。版本機制允許在數據庫中多個同名流程定義共存,流程實例以當時的最新版本來啓動,並且在它的整個生命週期中將保持以相同的流程定義執行。當一個新的版本被部署,新的流程實例以新版本啓動,而老的流程實例則以老的流程定義繼續執行。
流程定義是指定的流程圖以及其他一組相關的java classes(字節碼文件)的結合體,有兩種方式可以使java classes在jBPM運行環境是可用的:確保這些java classes對於jBPM類裝載器是可見的,這通常意味着你可以把委託classes放入一個.jar文件,然後再放入jbpm-[version].jar文件;另外,java classes也可以被包含在流程檔案中,當在流程檔案中包含自己的委託classes時(它們不被jbpm類裝載器可見),jBPM也將在這些classes上應用版本機制。有關流程類裝載的更多信息可以在“16.2委託”中找到。
當一個流程檔案被部署時,將在jBPM數據庫中創建一個流程定義,流程定義基於流程定義的名稱被版本化。當一個被命名的流程檔案被部署,部署器將分配一個版本號。爲了分配版本號,部署器將查詢同名流程定義的最高版本號,並且在其上加1,未命名的流程定義其版本號總是-1。
16.1.3 改變已部署的流程定義
在部署到jBPM數據庫之後改變流程定義有很多潛在的缺陷,因此非常不鼓勵這樣做。
事實上,對於流程定義會有很多可能的改變,這些流程定義中的某些也許是無害的,但是改變意味着會更合理。
因此請考慮通過這種途徑移植流程實例到新的定義。
如果你打算這麼做,下面是需要考慮的點:
使用hibernate的更新:你可以加載一個流程定義,改變它並且使用hibernate session保存它。Hibernate session可以用JbpmContext.getSession()方法獲取。
二級緩存:在你更新一個存在的流程定義之後,該流程定義需要從二級緩存中移除,請參看“第7.10節二級緩存”。
16.1.4 移植流程實例
改變流程定義可能會要求轉換執行(正在執行的流程實例)到一個新的流程定義,由於業務流程的持續性,考慮到這不是沒有價值的。當前,這還是一個實驗區域,還沒有在支持範圍之內。
就象你所瞭解的那樣,流程定義數據、流程實例數據(運行時數據)、以及日誌數據有明顯的區別。使用這種方式,在jBPM數據庫中創建一個獨立的新的流程定義(例如,可以部署一個相同流程的新的版本),然後運行時信息被轉換到新的流程定義。這可能包括導致一箇舊流程指向的節點在新流程中已被移除的轉化,因此,僅僅新的數據纔在數據庫中被創建,但是這樣一個流程執行被遍佈在兩個流程實例對象上,這可能會成爲工具和統計計算中棘手的部分。當資源允許時,我們將在以後做支持,例如,流程實例上會添加一個指向其前一個實例的指針。
16.1.5 流程變換
一個轉換類用來幫助你把jBPM2.0流程檔案轉換到jBPM3.0兼容的流程檔案。創建一個用來放置轉換後流程檔案的輸出目錄,從jBPM3.0分發的構建目錄鍵入下面命令行:
java –jar converter.jar 輸入目錄 輸出目錄
用你的jBPM2.0流程檔案位置替換“輸入目錄”,用創建的放置新的轉換後流程檔案的目錄替換“輸出目錄”。
16.2 委託
委託是用來在流程執行中包含用戶自定義代碼的機制。
16.2.1 jBPM類裝載器
jBPM類裝載器是裝載jBPM類的裝載器,這意味着jbpm-3.x.jar庫在類裝載器的classpath中。要使類對於jBPM類裝載器可見,就把它們放入一個jar文件,並把這個jar文件放入jbpm-3.x.jar,或者放入web應用的WEB-INF/lib文件夾下。
16.2.2 流程類裝載器
委託類由它們各自流程定義的流程類裝載器來裝載,流程類裝載器是以jBPM類裝載器爲父的類裝載器。流程類裝載器添加某個流程定義的所有類,你可以通過把類放入流程檔案的/classes文件夾而把類添加到流程定義。注意,這僅僅當你想要把所添加的類版本化時纔有用。
如果版本化不是必須的,則使類對於jBPM類裝載器可見效率會更高。
16.2.3 委託配置
委託類包含在流程執行中將被調用的用戶代碼,最一般的例子就是動作(action),在這種情況下,ActionHandler接口的一個實現在流程事件上被調用。委託在processdefinition.xml中被指定,當指定一個委託時可以提供3部分的數據:
l 類名(必需的):委託類的完整類名。
l 配置類型(可選的):指定實例化和配置委託類對象的方式。默認情況下,默認的構造器被使用並且配置信息被忽略。
l 配置(可選的):按照配置類型所要求格式對委託對象的配置信息。
下面是所有配置類型的描述:
16.2.3.1配置類型field
這是默認的配置類型,配置類型field將首先實例化一個委託類的對象,然後按照配置中的指定將值設置到對象的成員(field)中。配置是xml格式的,其元素與類的成員名稱一致,元素的內容文本被放入相應的成員。如果是必需且可能的,則元素的內容文本被轉換爲成員類型。
所支持的類型轉換:
l String當然不需要轉換,但是它會被修整(trim)。
l 原始類型,例如int、long、float、double、…
l 原始類型的基本包裝類。
l 列表(list)、集合(set)、以及聚集(collection)。這種情況下,xml內容的每個元素被看作聚集的一個元素,並且在轉換中被遞歸的解析。如果元素類型與java.lang.String不同,則需要通過爲類型屬性指定一個完整類型名來標出。例如,下面片斷將把一個字符串的ArrayList注入成員“numbers”:
<numbers>
<element>one</element>
<element>two</element>
<element>three</element>
</numbers>
元素中的文本可以被轉換爲任何擁有一個String構造器的對象,要使用String類型之外的其他類型,則在成員元素(本例中的“numbers”)中指定element-type。
下面是另外一個map的例子:
<numbers>
<entry><key>one</key><value>1</value></entry>
<entry><key>two</key><value>2</value></entry>
<entry><key>three</key><value>3</value></entry>
</numbers>
l maps。這種情況,每個成員元素需要有一個子元素key和一個元素value。key和value都被遞歸的使用轉換規則解析,與聚集(collection)完全一樣,如果沒有類型屬性被指定,則假定轉換到java.lang.String。
l org.dom4j.Element
l 其他類型,字符串構造器被使用。
例如下面的類…
public class MyAction implements ActionHandler {
// access specifiers can be private, default, protected or public
private String city;
Integer rounds;
...
}
…下面是有效的配置:
...
<action class="org.test.MyAction">
<city>Atlanta</city>
<rounds>5</rounds>
</action>
...
16.2.3.2配置類型bean
與field配置類型相似,除了屬性被通過setter方法設置之外,而不是直接設置到成員上,使用相同的轉換規則。
16.2.3.3配置類型constructor
這種實例化會取委託的xml元素的所有內容,並且把它們作爲文本傳入委託類的構造器。
16.2.3.4配置類型configuration-property
首先,使用默認的構造器,然後這種實例化將取出委託xml元素的所有內容,並且把它們作爲文本傳入方法void configure(String)。(就像jBPM2中一樣)
16.3 表達式
對於某些委託,支持一種象JSP/JSF EL那樣的表達式語言。在動作(actions)、分配(assignments)和決策(decision)條件中,你可以寫一個如expression=“#{myVar.handler[assignments].assign}”的表達式。
這種表達式語言的基礎知識可以在J2EE指南中找到。
jPDL表達式語言與JSF表達式語言相似,jPDL EL基於JSP EL,除了使用#{…}符號以及它包括對方法綁定的支持之外。
依賴於上下文,流程變量或者任務實例變量連同下面的內置對象可以被作爲變量使用:
l taskInstance(org.jbpm.taskmgmt.exe.TaskInstance)
l processInstance(org.jbpm.graph.exe.ProcessInstance)
l token(org.jbpm.graph.exe.Token)
l taskMgmtInstance(org.jbpm.taskmgmt.exe.TaskMgmtInstance)
l contextInstance(org.jbpm.context.exe.ContextInstance)
這個特性在Jboss SEAM環境中變得真正強大,因爲jBPM與Jboss SEAM的集成,所有你自己的bean、EJB和其他某種素材在你的流程定義中變得直接可用。
16.4 jBPM XML 模式
jPDL模式是流程檔案裏的processdefinition.xml文件中所使用的模式。
16.4.1 確認
在解析一個jPDL XML文件時,當遇到兩種情形時jBPM將靠jPDL模式驗證你的文檔:第一種,模式在XML文件中被引用,如下
<process-definition xmlns="urn:jbpm.org:jpdl-3.1">
...
</process-definition>
第二種,xerces解析器被放置在了classpath。
jPDL模式可以在${jbpm.home}/src/java.jbpm/org/jbpm/jpdl/xml/jpdl-3.1.xsd或http://jbpm.org/jpdl-3.1.xsd中找到。
16.4.2 process-definition
表格 16.1
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
可選的
|
流程的名稱。
|
元素
|
[0..*]
|
流程中使用的泳道。泳道表示流程角色,它們被用於任務分配。
|
|
元素
|
[0..1]
|
流程起始狀態。注意,沒有起始狀態的流程是合法的,但是不能被執行。
|
|
元素
|
[0..*]
|
流程定義的節點。注意,沒有節點的流程是合法的,但是不能被執行。
|
|
元素
|
[0..*]
|
作爲一個容器服務於動作的流程事件。
|
|
元素
|
[0..*]
|
全局定義的的動作,可以在事件和轉換中引用。注意,爲了被引用,這些動作必須指定名稱。
|
|
元素
|
[0..*]
|
全局定義的任務,可以在動作中使用。
|
|
元素
|
[0..*]
|
一個異常處理器列表,用於這個流程定義中的委託類所拋出的所有異常。
|
16.4.3 node
表格 16.2
名稱
|
類型
|
多樣性
|
描述
|
事件
|
1
|
用於表示這個節點行爲的定製動作。
|
|
|
|
16.4.4 普通節點元素
表格 16.3
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
必需的
|
節點的名稱。
|
async
|
屬性
|
{true|false},默認是false
|
|
元素
|
[0..*]
|
離開轉換。每個離開節點的轉換必須有一個不同的名稱,最多隻允許所有離開轉換中的一個沒有名稱。第一個轉換被指定爲默認轉換,當離開節點而沒有指定轉換時,默認轉換髮生。
|
|
元素
|
[0..*]
|
支持的事件類型:{node-enter|node-leave}。
|
|
元素
|
[0..*]
|
一個異常處理器列表,用於這個流程節點中的委託類所拋出的所有異常。
|
|
元素
|
[0..*]
|
指定一個定時器,用來監視節點中的一個執行所持續的時間。
|
16.4.5 start-state
表格 16.4
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
可選的
|
節點的名稱。
|
元素
|
[0..1]
|
||
元素
|
[0..*]
|
支持的事件類型:{node-leave}。
|
|
元素
|
[0..*]
|
離開轉換,每個離開節點的轉換必須有一個不同的名稱。
|
|
元素
|
[0..*]
|
一個異常處理器列表,用於這個流程節點中的委託類所拋出的所有異常。
|
16.4.6 end-state
表格 16.5
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
必需的
|
結束狀態的名稱。
|
元素
|
[0..*]
|
支持的事件類型:{node-enter}。
|
|
元素
|
[0..*]
|
一個異常處理器列表,用於這個流程節點中的委託類所拋出的所有異常。
|
16.4.7 state
表格 16.6
名稱
|
類型
|
多樣性
|
描述
|
|
|
16.4.8 task-node
表格 16.7
名稱
|
類型
|
多樣性
|
描述
|
signal
|
屬性
|
可選的
|
{unsynchronized|never|first|first-wait|last|last-wait},默認是last。signal指定了任務的完成對流程執行繼續的影響。
|
create-tasks
|
屬性
|
可選的
|
{yes|no|true|false},默認是true。當需要在運行時通過計算來決定哪個任務將被創建時,可以設置爲false,如果這樣的話,在node-enter事件上加一個動作,在動作中創建任務,並且把create-tasks設置爲false。
|
end-tasks
|
屬性
|
可選的
|
{yes|no|true|false},默認是false。如果設置end-tasks爲true,在離開節點時,所有打開的任務將被結束。
|
元素
|
[0..*]
|
當執行到達本節點時所應被創建的任務。
|
|
|
|
16.4.9 process-state
表格 16.8
名稱
|
類型
|
多樣性
|
描述
|
元素
|
1
|
與被節點相關聯的子流程。
|
|
元素
|
[0..*]
|
指定在子流程發起時數據如何從超流程拷貝到子流程,以及在子流程結束時數據如何從子流程拷貝到超流程。
|
|
|
|
16.4.10 super-state
表格 16.9
名稱
|
類型
|
多樣性
|
描述
|
元素
|
[0..*]
|
超狀態節點,超狀態可以嵌套。
|
|
|
|
16.4.11 fork
表格 16.10
名稱
|
類型
|
多樣性
|
描述
|
|
|
16.4.12 join
表格 16.11
名稱
|
類型
|
多樣性
|
描述
|
|
|
16.4.13 decision
表格 16.12
名稱
|
類型
|
多樣性
|
描述
|
元素
|
要麼指定“handler”元素,或者在轉換上指定條件。
|
一個org.jbpm.jpdl.Def.DecisionHandler的實現名稱。
|
|
元素
|
[0..*]
|
||
|
|
16.4.14 event
表格 16.13
名稱
|
類型
|
多樣性
|
描述
|
type
|
屬性
|
必需的
|
表示相對於事件要放置的元素事件類型。
|
元素
|
[0..*]
|
在這個事件上將要執行的動作列表。
|
16.4.15 transition
表格 16.14
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
可選的
|
轉換的名稱。注意,每個節點的離開轉換必須有一個不同的名稱。
|
to
|
屬性
|
必需的
|
|
元素
|
[0..*]
|
發生轉換時將要執行的動作。注意,轉換的動作無需放入事件(因爲只有一個事件)。
|
|
元素
|
[0..*]
|
一個異常處理器列表,用於這個流程節點中的委託類所拋出的所有異常。
|
16.4.16 action
表格 16.15
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
必需的
|
動作的名稱。當動作被指定名稱後,它們可以在流程定義中被查出,這對於運行時動作以及僅一次聲明動作是有用的。
|
class
|
屬性
|
或者用ref-name,或者用expression。
|
實現org.jbpm.graph.def.ActionHandler接口的類的全名。
|
ref-name
|
屬性
|
或者用class。
|
所引用動作的名稱。如果指定一個引用動作,則本動作不需要再做處理。
|
expression
|
屬性
|
或者指定一個class,或者ref-name。
|
|
accept-propagated-events
|
屬性
|
可選的
|
|
config-type
|
屬性
|
可選的
|
{field|bean|constructor|configuration-property}。指定動作對象將被怎樣創建以及本元素的內容怎樣象配置信息那樣被動作對象所使用。
|
async
|
屬性
|
{true|false}
|
默認false,這意味着動作將在當前執行的線程中被執行。如果設置爲true,一個消息將被髮送到命令執行器,並且執行器組件將在一個獨立的事務中同步執行動作。
|
|
{內容}
|
可選的
|
16.4.17 script
表格 16.16
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
可選的
|
腳本動作的名稱。當動作被指定名稱後,它們可以在流程定義中被查出,這對於運行時動作以及僅一次聲明動作是有用的。
|
accept-propagated-events
|
屬性
|
可選的[0..*]
|
|
expression
|
元素
|
[0..1]
|
|
元素
|
[0..*]
|
腳本所需變量。如果沒有指定變量,則當前令牌的所有變量將被裝載到腳本,當你想要限制裝載到腳本中的變量數量時使用variable。
|
16.4.18 expression
表格 16.17
名稱
|
類型
|
多樣性
|
描述
|
|
{內容}
|
|
一個beanshell腳本。
|
16.4.19 variable
表格 16.18
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
必需的
|
流程變量的名稱。
|
access
|
屬性
|
可選的
|
默認是read,write,用逗號分割的一個訪問列表。迄今爲止,使用的訪問僅爲read,write和required。
|
mapped-name
|
屬性
|
可選的
|
默認是變量的名稱。用來指定變量名稱被映射的名稱,mapped-name的含義依賴於這個元素所被使用的上下文。對於一個腳本,將是一個腳本變量名稱;對於一個任務控制器,將是任務表單參數的標籤;對於一個process-state,將是在子流程中使用的變量名稱。
|
16.4.20 handler
表格 16.19
名稱
|
類型
|
多樣性
|
描述
|
expression
|
屬性
|
或者用class
|
|
class
|
屬性
|
或者用ref-name
|
實現了org.jbpm.graph.node.DecisionHandler接口的類的全名。
|
config-type
|
屬性
|
可選的
|
{field|bean|constructor|configuration-property}。指定動作對象將被怎樣創建以及本元素的內容怎樣象配置信息那樣被動作對象所使用。
|
|
{內容}
|
可選的
|
16.4.21 timer
表格 16.20
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
可選的
|
定時器的名稱。如果沒有指定名稱,則採用外部的節點名稱。注意,每個定時器應該有一個唯一的名稱。
|
duedate
|
屬性
|
必需的
|
|
repeat
|
屬性
|
可選的
|
{duration|’yes’|’true’}當一個定時器在預期時間執行後,“repeat”可選項指定了在離開節點之前重複的執行定時器之間的期限。如果指定爲true或yese,則與duedate相同的期限被使用。請參考“第14.1節期限”的語法。
|
transition
|
屬性
|
可選的
|
當定時器執行、定時器事件觸發後以及執行動作時時所使用的轉換名稱。
|
cancel-event
|
屬性
|
可選的
|
這個屬性只用在任務的定時器中,它指定了定時器將被取消的事件。默認是task-end事件,但是也可以被設置爲如task-assign或task-start。cancel-event的類型也可以通過指定一個用逗號分割的列表被組合。
|
元素
|
[0..*]
|
當定時器被觸發時所應被執行的動作。
|
16.4.22 create-timer
表格 16.21
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
可選的
|
定時器的名稱。這個名稱可被用於用一個cancel-timer動作取消定時器。
|
duedate
|
屬性
|
必需的
|
|
repeat
|
屬性
|
可選的
|
{duration|’yes’|’true’}當一個定時器在預期時間執行後,“repeat”可選項指定了在離開節點之前重複的執行定時器之間的期限。如果指定爲true或yese,則與duedate相同的期限被使用。請參考“第14.1節期限”的語法。
|
transition
|
屬性
|
可選的
|
當定時器執行、定時器事件觸發後以及執行動作時時(如果要)所獲取的轉換名稱。
|
16.4.23 cancel-timer
表格 16.22
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
可選的
|
要被取消的定時器的名稱。
|
16.4.24 task
表格 16.23
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
可選的
|
任務的名稱。命名的任可以被引用並且可以通過TaskMgmtDefinition被查出。
|
blocking
|
屬性
|
可選的
|
{yes|no|true|false},默認是false。如果blocking設置爲true,當任務沒有結束時節點不能被離開;如果設置爲false(默認),令牌上的一個新號被用來繼續執行並離開節點。默認設置爲false,因爲通常是由用戶接口來強制阻塞。
|
signalling
|
屬性
|
可選的
|
{yes|no|true|false},默認是true。如果設置signalling爲false,則本任務將沒有觸發令牌繼續的能力。
|
duedate
|
屬性
|
可選的
|
|
swimlane
|
屬性
|
可選的
|
|
priority
|
屬性
|
可選的
|
{highest,high,normal,low,lowest}之一。作爲選擇,可以爲priority指定任何整數,供參考:(highest=1,lowest=5)。
|
元素
|
可選的
|
||
元素
|
[0..*]
|
支持的事件類型:{task-create|task-start|task-assign|task-end}。爲了任務分配,我們特別的爲TaskInstance添加了一個非持久化的屬性previousActorId。
|
|
元素
|
[0..*]
|
一個異常處理器列表,用於這個流程節點中的委託類所拋出的所有異常。
|
|
元素
|
[0..*]
|
指定一個監視本任務執行期限的一個定時器。對於任務定時器特殊的是可以指定cancel-event,cancel-event默認是task-end,但是它可以被自定義如task-assign或task-start。
|
|
元素
|
[0..1]
|
指定流程變量怎樣被轉換爲任務表單參數。任務表單參數有用戶界面使用,用力向用戶表現一個任務表單。
|
16.4.25 swimlane
表格 16.24
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
必需的
|
泳道的名稱。泳道可以被引用並且可以通過TaskMgmtDefinition被查出。
|
元素
|
[1..1]
|
指定泳道的分配。這個分配在本泳道中的第一個任務實例被創建時完成。
|
16.4.26 assignment
表格 16.25
名稱
|
類型
|
多樣性
|
描述
|
expression
|
屬性
|
可選的
|
由於歷史原因,這個屬性的表達式不是jPDL表達式,而是對jBPM身份組件的一個分配表達式。有關怎樣寫jBPM身份組件表達式的更多信息,請參考“第11.11.2節分配表達式”。注意,這個依賴於jbpm身份組件。
|
actor-id
|
屬性
|
可選的
|
一個actorId,可以與pooled-actors協同使用。actor-id被作爲一個表達式,因此你可以引用一個固定的actorId,如actor-id=”bobthebuiler”;或者你可以引用一個可以返回一個字符串的屬性或方法,如actor-id=”myVar.actorId”,這將調用任務實例變量“myVar”上的getActorId方法。
|
pooled-actors
|
屬性
|
可選的
|
一個逗號分割的actorId列表,可以與actor-id協同使用。一個固定的參與者池可以指定如下:pooled-actors=”chicagobulls,pointersisters”。 pooled-actors被作爲一個表達式,因此你可以引用一個返回String[]、Collection、或一個逗號分割的池中的參與者列表的屬性或方法。
|
class
|
屬性
|
可選的
|
一個實現org.jbpm.taskmgmt.def.AssignmentHandler接口的類的全名稱。
|
config-type
|
屬性
|
可選的
|
{field|bean|constructor|configuration-property}。指定分配處理器對象(assignment-handler-object)對象將被怎樣創建以及本元素的內容怎樣象配置信息那樣被分配處理器對象所使用。
|
|
{內容}
|
可選的
|
16.4.27 controller
表格 16.26
名稱
|
類型
|
多樣性
|
描述
|
class
|
屬性
|
可選的
|
一個實現org.jbpm.taskmgmt.def.TaskControllerHandler接口的類的全名稱。
|
config-type
|
屬性
|
可選的
|
{field|bean|constructor|configuration-property}。指定分配處理器對象(assignment-handler-object)對象將被怎樣創建以及本元素的內容怎樣象配置信息那樣被分配處理器對象所使用。
|
|
{內容}
|
|
controller元素的內容要麼是指定的任務控制處理器的配置信息(如果指定了class屬性),要麼必須是一個variable元素列表(如果沒有指定任務控制器)。
|
元素
|
[0..*]
|
如果沒有通過class屬性指定任務控制處理器,則controller元素的內容必須是變量列表。
|
16.4.28 sub-process
表格 16.27
名稱
|
類型
|
多樣性
|
描述
|
name
|
屬性
|
必需的
|
|
version
|
屬性
|
可選的
|
子流程的版本。如果沒有指定版本,則給定流程的最新版本將被使用。
|
16.4.29 condition
表格 16.28
名稱
|
類型
|
多樣性
|
描述
|
|
{內容}或屬性
表達式
|
必需的
|
condition元素的內容是一個計算結果爲布爾值的jPDL表達式。決策採用第一個表達式處理結果爲true的轉換(按在processdefinition.xml中的順序),如果沒有條件處理結果爲true,則採用默認離開轉換(也及時第一個)。
|
16.4.30 exception-handler
表格 16.29
名稱
|
類型
|
多樣性
|
描述
|
exception-class
|
屬性
|
可選的
|
指定與本異常處理器所匹配的java throwable類,如果這個沒有指定這個屬性,則它匹配所有異常(java.lang.Throwable)。
|
元素
|
[1..*]
|
當異常被異常處理器捕獲時將要執行的動作列表。
|