流程定義語言模板_第1頁
流程定義語言模板_第2頁
流程定義語言模板_第3頁
流程定義語言模板_第4頁
流程定義語言模板_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

一JPDL步驟定義process-definition(步驟定義)步驟定義根節(jié)點(diǎn),是全部節(jié)點(diǎn)父節(jié)點(diǎn)名稱類型數(shù)量描述name屬性可選步驟名稱。swimlane元素[0..*]步驟中使用泳道。泳道表示步驟角色,它們被用于任務(wù)分配。start-state元素[0..1]步驟起始狀態(tài)。注意,沒有起始狀態(tài)步驟是正當(dāng),不過不能被實(shí)施。end-state|state|node|task-node|process-state|super-state|fork|join|decision元素[0..*]步驟定義節(jié)點(diǎn)。注意,沒有節(jié)點(diǎn)步驟是正當(dāng),不過不能被實(shí)施。event元素[0..*]作為一個(gè)容器服務(wù)于動(dòng)作步驟事件。action|script|create-timer|cancel-timer元素[0..*]全局定義動(dòng)作,能夠在事件和轉(zhuǎn)換中引用。注意,為了被引用,這些動(dòng)作必需指定名稱。task元素[0..*]全局定義任務(wù),能夠在動(dòng)作中使用。exception-handler元素[0..*]一個(gè)異常處理器列表,用于這個(gè)步驟定義中委托類所拋出全部異常。node(自動(dòng)節(jié)點(diǎn))這種節(jié)點(diǎn)和State相反,也稱自動(dòng)節(jié)點(diǎn)。當(dāng)業(yè)務(wù)程序?qū)嵗龑?shí)施到這個(gè)節(jié)點(diǎn),不會(huì)停止實(shí)施。而是會(huì)繼續(xù)往下實(shí)施。假如該節(jié)點(diǎn)存在多個(gè)離開轉(zhuǎn)向。那么,就會(huì)實(shí)施其中第一個(gè)離開轉(zhuǎn)向,在Node狀態(tài)中,不需要外部參與者參與,業(yè)務(wù)步驟這個(gè)部分是自動(dòng)、即時(shí)完成。名稱類型數(shù)量描述action|script|create-timer|cancel-timer事件1用于表示這個(gè)節(jié)點(diǎn)行為定制動(dòng)作。一般節(jié)點(diǎn)元素

請(qǐng)參考一般節(jié)點(diǎn)元素。

start-state(開始狀態(tài))start-state是我們整個(gè)步驟開始節(jié)點(diǎn),全部步驟實(shí)例從這里開始。名稱類型數(shù)量描述Name屬性可選節(jié)點(diǎn)名稱。Task元素[0..1]起始一個(gè)步驟實(shí)例任務(wù),或用來捕捉步驟提議者Event元素[0..*]支持事件類型:{node-leave}。transition元素[0..*]離開轉(zhuǎn)換,每個(gè)離開節(jié)點(diǎn)轉(zhuǎn)換必需有一個(gè)不一樣名稱。exception-handler元素[0..*]一個(gè)異常處理器列表,用于這個(gè)步驟節(jié)點(diǎn)中委托類所拋出全部異常。

end-state(結(jié)束節(jié)點(diǎn))對(duì)于每一個(gè)步驟定義全部會(huì)有一個(gè)結(jié)束節(jié)點(diǎn),和開始節(jié)點(diǎn)對(duì)應(yīng)名稱類型數(shù)量描述Name屬性必需結(jié)束狀態(tài)名稱。event元素[0..*]支持事件類型:{node-enter}。exception-handler元素[0..*]一個(gè)異常處理器列表,用于這個(gè)步驟節(jié)點(diǎn)中委托類所拋出全部異常。

state(狀態(tài)) State節(jié)點(diǎn)也叫手工節(jié)點(diǎn),進(jìn)入到這種節(jié)點(diǎn),整個(gè)步驟實(shí)施就會(huì)中止。直到系統(tǒng)外參與者提議繼續(xù)實(shí)施命令,即調(diào)用signal或end方法,業(yè)務(wù)程序?qū)嵗龑?shí)施才能夠繼續(xù)下去。名稱類型數(shù)量描述name屬性必需節(jié)點(diǎn)名稱。async屬性{true|false},默認(rèn)是false假如設(shè)置為true,這個(gè)節(jié)點(diǎn)將會(huì)異步實(shí)施。請(qǐng)參考”異步實(shí)施”章節(jié)。transition元素[0..*]離開轉(zhuǎn)換。每個(gè)離開節(jié)點(diǎn)轉(zhuǎn)換必需有一個(gè)不一樣名稱,最多只許可全部離開轉(zhuǎn)換中一個(gè)沒有名稱。第一個(gè)轉(zhuǎn)換被指定為默認(rèn)轉(zhuǎn)換,當(dāng)離開節(jié)點(diǎn)而沒有指定轉(zhuǎn)換時(shí),默認(rèn)轉(zhuǎn)換發(fā)生。event元素[0..*]支持事件類型:{node-enter|node-leave}。exception-handler元素[0..*]一個(gè)異常處理器列表,用于這個(gè)步驟節(jié)點(diǎn)中委托類所拋出全部異常。timer元素[0..*]指定一個(gè)定時(shí)器,用來監(jiān)視節(jié)點(diǎn)中一個(gè)實(shí)施所連續(xù)時(shí)間。

task-node(任務(wù)節(jié)點(diǎn))其性質(zhì)和node節(jié)點(diǎn)一樣,在沒有task時(shí)候,也全部是自動(dòng)實(shí)施,不等候。task-node被歸類為一個(gè)等候節(jié)點(diǎn),是指在task-node中task列表中task沒有全部實(shí)施完之前,它會(huì)一直等候。Task能夠在task-node節(jié)點(diǎn)下定義,也能夠掛在process-definition節(jié)點(diǎn)下。最普遍方法是在task-node節(jié)點(diǎn)下定義一個(gè)或多個(gè)任務(wù)。默認(rèn)情況下,步驟在task-node節(jié)點(diǎn)會(huì)處于等候狀態(tài),直到全部任務(wù)被實(shí)施完成。Task實(shí)施是按次序?qū)嵤?,任?wù)全部完成后,token仍然不會(huì)指向后面節(jié)點(diǎn);需要自己手動(dòng)調(diào)用processInstance.signal()才會(huì)驅(qū)動(dòng)步驟到下面節(jié)點(diǎn)。名稱類型數(shù)量描述signal屬性可選{unsynchronized|never|first|first-wait|last|last-wait},默認(rèn)是last。signal指定了任務(wù)完成對(duì)步驟實(shí)施繼續(xù)影響。create-tasks屬性可選{yes|no|true|false},默認(rèn)是true。當(dāng)需要在運(yùn)行時(shí)經(jīng)過計(jì)算來決定哪個(gè)任務(wù)將被創(chuàng)建時(shí),能夠設(shè)置為false,假如這么話,在node-enter事件上加一個(gè)動(dòng)作,在動(dòng)作中創(chuàng)建任務(wù),而且把create-tasks設(shè)置為false。end-tasks屬性可選{yes|no|true|false},默認(rèn)是false。假如設(shè)置end-tasks為true,在離開節(jié)點(diǎn)時(shí),全部打開任務(wù)將被結(jié)束。task元素[0..*]當(dāng)實(shí)施抵達(dá)本節(jié)點(diǎn)時(shí)所應(yīng)被創(chuàng)建任務(wù)。一般節(jié)點(diǎn)元素

請(qǐng)參考一般節(jié)點(diǎn)元素。

為了幫助讀者了解task-node節(jié)點(diǎn)signal屬性,這里舉例以下:對(duì)于這么步驟定義:<task-nodename='a'><taskname='laundry'/><taskname='dishes'/><taskname='changenappy'/><transitionto='b'/></task-node>這里沒有定義signal屬性值,這就表明當(dāng)節(jié)點(diǎn)中三個(gè)任務(wù)全部完成后,步驟才進(jìn)入后面節(jié)點(diǎn)當(dāng)<task-nodename='a'signal='unsynchronized'>表明token不會(huì)在本節(jié)點(diǎn)停留,而是直接到后面節(jié)點(diǎn)當(dāng)<task-nodename='a'signal='never'>表明三個(gè)任務(wù)全部完成后,token仍然不會(huì)指向后面節(jié)點(diǎn);需要自己手動(dòng)調(diào)用processInstance.signal()才會(huì)驅(qū)動(dòng)步驟到下面節(jié)點(diǎn)當(dāng)<task-nodename='a'signal='first'>表明只要有一個(gè)任務(wù)完成后,token就指向后面節(jié)點(diǎn)當(dāng)<task-nodename='a'signal='first-wait'>表明當(dāng)?shù)谝粋€(gè)任務(wù)實(shí)例完成時(shí)繼續(xù)實(shí)施;當(dāng)在a節(jié)點(diǎn)入口處沒有任務(wù)創(chuàng)建時(shí),token在a任務(wù)節(jié)點(diǎn)處等候,直到任務(wù)被創(chuàng)建或完成。當(dāng)<task-nodename='a'signal='last'>時(shí),這是默認(rèn)值,和不設(shè)置signal屬性情況相同。當(dāng)<task-nodename='a'signal='last-wait'>時(shí),當(dāng)最終一個(gè)任務(wù)實(shí)例完成時(shí)候繼續(xù)實(shí)施下去。當(dāng)a這個(gè)任務(wù)節(jié)點(diǎn)沒有任務(wù)被建立時(shí),任務(wù)節(jié)點(diǎn)等候直到任務(wù)被建立。fork(分支)一個(gè)fork把一個(gè)實(shí)施路線分割成多個(gè)實(shí)施路線.默認(rèn)分支行為是為每個(gè)離開分支轉(zhuǎn)換建立一個(gè)子令牌,在令牌要抵達(dá)分支之間建立一個(gè)父母-兒女關(guān)系名稱類型數(shù)量描述name屬性必需節(jié)點(diǎn)名稱。async屬性{true|false},默認(rèn)是false假如設(shè)置為true,這個(gè)節(jié)點(diǎn)將會(huì)異步實(shí)施。請(qǐng)參考”異步實(shí)施”章節(jié)。transition元素[0..*]離開轉(zhuǎn)換。每個(gè)離開節(jié)點(diǎn)轉(zhuǎn)換必需有一個(gè)不一樣名稱,最多只許可全部離開轉(zhuǎn)換中一個(gè)沒有名稱。第一個(gè)轉(zhuǎn)換被指定為默認(rèn)轉(zhuǎn)換,當(dāng)離開節(jié)點(diǎn)而沒有指定轉(zhuǎn)換時(shí),默認(rèn)轉(zhuǎn)換發(fā)生。event元素[0..*]支持事件類型:{node-enter|node-leave}。exception-handler元素[0..*]一個(gè)異常處理器列表,用于這個(gè)步驟節(jié)點(diǎn)中委托類所拋出全部異常。timer元素[0..*]指定一個(gè)定時(shí)器,用來監(jiān)視節(jié)點(diǎn)中一個(gè)實(shí)施所連續(xù)時(shí)間。join(聯(lián)合)默認(rèn)聯(lián)合(join)假設(shè)全部來自同一個(gè)父母子令牌聯(lián)合,當(dāng)在上使用fork(分支)這個(gè)情形就出現(xiàn)了而且全部令牌分支建立,而且抵達(dá)同一個(gè)聯(lián)合(join)。當(dāng)全部令牌全部進(jìn)入聯(lián)合時(shí)候聯(lián)合就結(jié)束了,然后聯(lián)合將檢驗(yàn)父母-兒女,當(dāng)全部弟兄令牌抵達(dá)聯(lián)合(join),父母令牌將傳輸(唯一)離開轉(zhuǎn)換,當(dāng)還有弟兄令牌活動(dòng)時(shí),聯(lián)合行為將作為等候狀態(tài)。名稱類型數(shù)量描述name屬性必需節(jié)點(diǎn)名稱。async屬性{true|false},默認(rèn)是false假如設(shè)置為true,這個(gè)節(jié)點(diǎn)將會(huì)異步實(shí)施。transition元素[0..*]離開轉(zhuǎn)換。每個(gè)離開節(jié)點(diǎn)轉(zhuǎn)換必需有一個(gè)不一樣名稱,最多只許可全部離開轉(zhuǎn)換中一個(gè)沒有名稱。第一個(gè)轉(zhuǎn)換被指定為默認(rèn)轉(zhuǎn)換,當(dāng)離開節(jié)點(diǎn)而沒有指定轉(zhuǎn)換時(shí),默認(rèn)轉(zhuǎn)換發(fā)生。event元素[0..*]支持事件類型:{node-enter|node-leave}。exception-handler元素[0..*]一個(gè)異常處理器列表,用于這個(gè)步驟節(jié)點(diǎn)中委托類所拋出全部異常。timer元素[0..*]指定一個(gè)定時(shí)器,用來監(jiān)視節(jié)點(diǎn)中一個(gè)實(shí)施所連續(xù)時(shí)間。對(duì)于Join節(jié)點(diǎn),我們知道默認(rèn)是要等到全部分支全部到了步驟才能往下繼續(xù)走,要改變這一情況,我們能夠經(jīng)過給該節(jié)點(diǎn)加Action方法改變?cè)揓oin節(jié)點(diǎn)Discriminator,就能夠使只要有一個(gè)分支抵達(dá)步驟就能夠繼續(xù)實(shí)施效果了decision(決議)一個(gè)decision用以決定在多個(gè)實(shí)施路徑中哪個(gè)才能夠被實(shí)施。假如你是一個(gè)程序員,把它能夠了解成switchcase結(jié)構(gòu)即可,一個(gè)decision能夠含有很多離開transition。名稱類型數(shù)量描述handler元素要么指定“handler”元素,或在轉(zhuǎn)換上指定條件。一個(gè)org.jbpm.jpdl.Def.DecisionHandler實(shí)現(xiàn)名稱。transition元素[0..*]離開轉(zhuǎn)換。決議離開轉(zhuǎn)換能夠被擴(kuò)展為擁有一個(gè)條件,決議會(huì)查找條件計(jì)算為true第一個(gè)轉(zhuǎn)換,沒有條件轉(zhuǎn)換被認(rèn)為計(jì)算為true(為了建?!皁therwise”分支)。請(qǐng)參考condition元素。一般節(jié)點(diǎn)元素

請(qǐng)參考一般節(jié)點(diǎn)元素。

Handler所指定DecisionHandler實(shí)現(xiàn)類里decide方法返回一個(gè)字符串,表示要實(shí)施哪個(gè)transitiontransition(轉(zhuǎn)換)轉(zhuǎn)換用來指定節(jié)點(diǎn)之間連接。transition元素放在node里面,那么這個(gè)transition就會(huì)從這個(gè)節(jié)點(diǎn)出離開。名稱類型數(shù)量描述name屬性可選轉(zhuǎn)換名稱。注意,每個(gè)節(jié)點(diǎn)離開轉(zhuǎn)換必需有一個(gè)不一樣名稱。to屬性必需目標(biāo)節(jié)點(diǎn)分級(jí)名稱,表示將要達(dá)成那個(gè)節(jié)點(diǎn)名稱.action|script|create-timer|cancel-timer元素[0..*]發(fā)生轉(zhuǎn)換時(shí)將要實(shí)施動(dòng)作。注意,轉(zhuǎn)換動(dòng)作無需放入事件(因?yàn)橹挥幸粋€(gè)事件)。exception-handler元素[0..*]一個(gè)異常處理器列表,用于這個(gè)步驟節(jié)點(diǎn)中委托類所拋出全部異常。event(事件)JBPM定義了一系列和工作流節(jié)點(diǎn)元素相關(guān)聯(lián)事件,比如,步驟實(shí)例運(yùn)行過程中,能夠觸發(fā)節(jié)點(diǎn)進(jìn)入(node-enter)、節(jié)點(diǎn)離開(node-leave)、步驟開啟(process-start)、步驟結(jié)束(process-end)、任務(wù)創(chuàng)建(task-create)、任務(wù)分配(task-assign)、任務(wù)開啟(task-start)等事件。在步驟定義時(shí),JBPM事件均和action綁定。事件觸發(fā)將造成對(duì)應(yīng)actions實(shí)施。名稱類型數(shù)量描述type屬性必需表示相對(duì)于事件要放置元素事件類型。action|script|create-timer|cancel-timer元素[0..*]在這個(gè)事件上將要實(shí)施動(dòng)作列表。

action(動(dòng)作)一個(gè)action是一段java代碼。在步驟實(shí)施期間在部分事件之上定義,這么會(huì)在相關(guān)事件觸發(fā)時(shí)自動(dòng)在工作流引擎上實(shí)施。名稱類型數(shù)量描述name屬性必需動(dòng)作名稱。當(dāng)動(dòng)作被指定名稱后,它們能夠在步驟定義中被查出,這對(duì)于運(yùn)行時(shí)動(dòng)作和僅一次申明動(dòng)作是有用。class屬性或用ref-name,或用expression。實(shí)現(xiàn)org.jbpm.graph.def.ActionHandler接口類全名。ref-name屬性或用class。所引用動(dòng)作名稱。假如指定一個(gè)引用動(dòng)作,則本動(dòng)作不需要再做處理。expression屬性或指定一個(gè)class,或ref-name。一個(gè)處理一個(gè)方法jPDL表示式。accept-propagated-events屬性可選{yes|no|true|false},默認(rèn)是yes|true。假如設(shè)置為false,則動(dòng)作僅在本動(dòng)作元素觸發(fā)事件上被實(shí)施。更多信息,請(qǐng)參考“第9.5.4事件傳輸”。config-type屬性可選{field|bean|constructor|configuration-property}。指定動(dòng)作對(duì)象將被怎樣創(chuàng)建和本元素內(nèi)容怎樣象配置信息那樣被動(dòng)作對(duì)象所使用。async屬性{true|false}默認(rèn)false,這意味著動(dòng)作將在目前實(shí)施線程中被實(shí)施。假如設(shè)置為true,一個(gè)消息將被發(fā)送到命令實(shí)施器,而且實(shí)施器組件將在一個(gè)獨(dú)立事務(wù)中同時(shí)實(shí)施動(dòng)作。請(qǐng)參考”異步實(shí)施”章節(jié)。

{內(nèi)容}可選action內(nèi)容能夠被作為你定制動(dòng)作實(shí)現(xiàn)配置信息,這是考慮到可重用委托類創(chuàng)建。相關(guān)委托配置更多信息,請(qǐng)參考“第16.2.3節(jié)委托配置”。

script(腳本)Script里是動(dòng)作實(shí)施beanshell腳本.名稱類型數(shù)量描述name屬性可選腳本動(dòng)作名稱。當(dāng)動(dòng)作被指定名稱后,它們能夠在步驟定義中被查出,這對(duì)于運(yùn)行時(shí)動(dòng)作和僅一次申明動(dòng)作是有用。Accept-propagated-events屬性可選[0..*]{yes|no|true|false},默認(rèn)是yes|true。假如設(shè)置為false,則動(dòng)作僅在本動(dòng)作元素觸發(fā)事件上被實(shí)施.expression元素[0..1]beanshell腳本。假如你沒有指定variable元素,能夠?qū)懕硎臼阶鳛槟_本元素內(nèi)容(忽略expression元素標(biāo)簽)。variable元素[0..*]腳本所需變量。假如沒有指定變量,則目前令牌全部變量將被裝載到腳本,當(dāng)你想要限制裝載到腳本中變量數(shù)量時(shí)使用variable。expression(表示式)Expression里可書寫B(tài)eanshell腳本名稱類型數(shù)量描述

{內(nèi)容}

一個(gè)beanshell腳本。variable(變量)一個(gè)是變量是一個(gè)key-value對(duì)。它和過程實(shí)例(一次過程實(shí)施)相關(guān)聯(lián)。Key是java.lang.string,value是任何java類型任何pojo。所以任何是java類型,即使不給jbpm知道也能被應(yīng)用到變量中。JBPM步驟變量在盡可能模擬java.util.map語義。這一點(diǎn)能夠經(jīng)過JBPMAPI來了解。也就是說一個(gè)變量只能當(dāng)它被插入時(shí)被賦值,任何java類型全部能夠作為變量中value。名稱類型數(shù)量描述name屬性必需步驟變量名稱。access屬性可選默認(rèn)是read,write,用逗號(hào)分割一個(gè)訪問列表。迄今為止,使用訪問僅為read,write和required。mapped-name屬性可選默認(rèn)是變量名稱。用來指定變量名稱被映射名稱,mapped-name含義依靠于這個(gè)元素所被使用上下文。對(duì)于一個(gè)腳本,將是一個(gè)腳本變量名稱;對(duì)于一個(gè)任務(wù)控制器,將是任務(wù)表單參數(shù)標(biāo)簽;對(duì)于一個(gè)process-state,將是在子步驟中使用變量名稱。handler(句柄)Handler是在定義一個(gè)decision時(shí)需要為其定義一個(gè)DecisionHandler時(shí)采取。名稱類型數(shù)量描述expression屬性或用class一個(gè)jPDL表示式,返回結(jié)果被用toString()方法轉(zhuǎn)換為字符串,結(jié)果字符串應(yīng)該和某個(gè)離開轉(zhuǎn)換匹配。class屬性或用ref-name實(shí)現(xiàn)了org.jbpm.graph.node.DecisionHandler接口類全名。Config-type屬性可選{field|bean|constructor|configuration-property}。指定動(dòng)作對(duì)象將被怎樣創(chuàng)建和本元素內(nèi)容怎樣象配置信息那樣被動(dòng)作對(duì)象所使用。

{內(nèi)容}可選Action里內(nèi)容能夠用來幫助結(jié)合我們業(yè)務(wù)來處理我們步驟,同時(shí)我們能夠在Action里加上業(yè)務(wù)處理邏輯,以愈加好利用步驟.

timer(定時(shí)器)定時(shí)器timer能夠被用于decisionforkjoinnodeprocess-statestatesuper-statetask-node,能夠設(shè)置開始時(shí)間duedate和頻率repeat,定時(shí)器動(dòng)作能夠是所支持任何動(dòng)作元素,如action或script。timer還有一個(gè)很關(guān)鍵屬性cancel-event,這個(gè)是timer和task結(jié)合時(shí)使用,任務(wù)定時(shí)器cancel-event能夠被定制。默認(rèn)情況下,當(dāng)任務(wù)被結(jié)束時(shí)(=完成)任務(wù)上定時(shí)器將被取消,這是經(jīng)過在定時(shí)器上使用cancel-event屬性,步驟開發(fā)者能夠定制諸如task-assign或task-start。cancel-event支持多個(gè)事件,經(jīng)過在屬性中指定一個(gè)用逗號(hào)分割列表,能夠組合cancel-event類型。名稱類型數(shù)量描述name屬性可選定時(shí)器名稱。假如沒有指定名稱,則采取外部節(jié)點(diǎn)名稱。注意,每個(gè)定時(shí)器應(yīng)該有一個(gè)唯一名稱。duedate屬性必需所指定定時(shí)器創(chuàng)建到定時(shí)器實(shí)施之間期限(能夠用業(yè)務(wù)時(shí)間來表示)。repeat屬性可選{duration|yes|true}當(dāng)一個(gè)定時(shí)器在預(yù)期時(shí)間實(shí)施后,“repeat”可選項(xiàng)指定了在離開節(jié)點(diǎn)之前反復(fù)實(shí)施定時(shí)器之間期限。假如指定為true或false,則和duedate相同期限被使用。transition屬性可選當(dāng)定時(shí)器實(shí)施、定時(shí)器事件觸發(fā)后和實(shí)施動(dòng)作時(shí)時(shí)所使用轉(zhuǎn)換名稱。cancel-event屬性可選這個(gè)屬性只用在任務(wù)定時(shí)器中,它指定了定時(shí)器將被取消事件。默認(rèn)是task-end事件,不過也能夠被設(shè)置為如task-assign或task-start。cancel-event類型也能夠經(jīng)過指定一個(gè)用逗號(hào)分割列表被組合。action|script|create-timer|cancel-timer元素[0..*]當(dāng)定時(shí)器被觸發(fā)時(shí)所應(yīng)被實(shí)施動(dòng)作。create-timer(創(chuàng)建定時(shí)器)Create-timer是定時(shí)器創(chuàng)建名稱類型數(shù)量描述name屬性可選定時(shí)器名稱。這個(gè)名稱可被用于用一個(gè)cancel-timer動(dòng)作取消定時(shí)器。duedate屬性必需所指定定時(shí)器創(chuàng)建到定時(shí)器實(shí)施之間期限(能夠用業(yè)務(wù)時(shí)間來表示)。請(qǐng)參考“第14.1節(jié)期限”中語法。repeat屬性可選{duration|’yes’|’true’}當(dāng)一個(gè)定時(shí)器在預(yù)期時(shí)間實(shí)施后,“repeat”可選項(xiàng)指定了在離開節(jié)點(diǎn)之前反復(fù)實(shí)施定時(shí)器之間期限。假如指定為true或yese,則和duedate相同期限被使用。請(qǐng)參考“第14.1節(jié)期限”語法。transition屬性可選當(dāng)定時(shí)器實(shí)施、定時(shí)器事件觸發(fā)后和實(shí)施動(dòng)作時(shí)時(shí)(假如要)所獲取轉(zhuǎn)換名稱。

cancel-timer(取消定時(shí)器)Cancel-timer是定時(shí)器取消名稱類型數(shù)量描述name屬性可選要被取消定時(shí)器名稱。task(任務(wù))Task是是步驟定義里一部分,它決定了taskinstance創(chuàng)建和分配名稱類型數(shù)量描述name屬性可選任務(wù)名稱。命名任能夠被引用而且能夠經(jīng)過TaskMgmtDefinition被查出。blocking屬性可選{yes|no|true|false}假如blocking設(shè)置為true,當(dāng)任務(wù)沒有結(jié)束時(shí)節(jié)點(diǎn)不能被離開(必需要經(jīng)過taskInstance.end()方法離開節(jié)點(diǎn));假如設(shè)置為false(默認(rèn)),許可用戶經(jīng)過signal繼續(xù)實(shí)施和離開節(jié)點(diǎn)。默認(rèn)設(shè)置為false,因?yàn)橥ǔJ怯捎脩艚涌趤韽?qiáng)制阻塞。signalling屬性可選{yes|no|true|false},默認(rèn)是true。假如設(shè)置signalling為false,則任務(wù)沒有觸發(fā)令牌繼續(xù)能力。duedate屬性可選延遲時(shí)間(任務(wù)實(shí)施延遲時(shí)間)。請(qǐng)見業(yè)務(wù)日歷中解釋。swimlane屬性可選引用一個(gè)swimlane,假如在任務(wù)上指定了一個(gè)swimlane,則assignment將被忽略。priority屬性可選{highest,high,normal,low,lowest}之一。作為選擇,能夠?yàn)閜riority指定任何整數(shù),供參考:(highest=1,lowest=5)。assignment元素可選描寫一個(gè)委托,該委托將在任務(wù)被創(chuàng)建時(shí)把任務(wù)分配給一個(gè)參與者。event元素[0..*]支持事件類型:{task-create|task-start|task-assign|task-end}。為了任務(wù)分配,我們尤其為TaskInstance添加了一個(gè)非持久化屬性previousActorId。exception

-handler元素[0..*]一個(gè)異常處理器列表,用于這個(gè)步驟節(jié)點(diǎn)中委托類所拋出全部異常。timer元素[0..*]指定一個(gè)監(jiān)視本任務(wù)實(shí)施期限一個(gè)定時(shí)器。對(duì)于任務(wù)定時(shí)器特殊是能夠指定cancel-event,cancel-event默認(rèn)是task-end,不過它能夠被自定義如task-assign或task-start。controller元素[0..1]指定步驟變量怎樣被轉(zhuǎn)換為任務(wù)表單參數(shù)。任務(wù)表單參數(shù)有用戶界面使用,用力向用戶表現(xiàn)一個(gè)任務(wù)表單。swimlane(泳道)實(shí)際應(yīng)用中,一個(gè)人是一個(gè)步驟中多個(gè)Task參與者(actor)情況是很常見。在jbpm中經(jīng)過創(chuàng)建一個(gè)swimlane而且把swimlane賦給一個(gè)task方法來設(shè)置目前task參與者(actor)。一個(gè)業(yè)務(wù)步驟中swimlane能夠被看做為一個(gè)參與者參與者對(duì)象名稱,當(dāng)然它不一定是固定某個(gè)人,它能夠是一個(gè)用戶組,一個(gè)特定用戶角色等。首次實(shí)施抵達(dá)一個(gè)Task,賦給該Task一個(gè)swimlane就會(huì)算出參與者(actor)。名稱類型數(shù)量描述name屬性必需泳道名稱。泳道能夠被引用而且能夠經(jīng)過TaskMgmtDefinition被查出。assignment元素[1..1]指定泳道分配。這個(gè)分配在本泳道中第一個(gè)任務(wù)實(shí)例被創(chuàng)建時(shí)完成。assignment(委派)當(dāng)步驟實(shí)施到某個(gè)Task時(shí)候,引時(shí)步驟引摯要調(diào)用對(duì)應(yīng)swimlane或assignment將目前task分配(委派)給某個(gè)參與者,外部參與者能夠是一個(gè)人也能夠是某個(gè)系統(tǒng)等。名稱類型數(shù)量描述expression屬性可選因?yàn)闅v史原因,這個(gè)屬性表示式不是jPDL表示式,而是對(duì)jBPM身份組件一個(gè)分配表示式。actor-id屬性可選一個(gè)actorId,能夠和pooled-actors協(xié)同使用。actor-id被作為一個(gè)表示式,所以你能夠引用一個(gè)固定actorId,如actor-id=”bobthebuiler”;或你能夠引用一個(gè)能夠返回一個(gè)字符串屬性或方法,如actor-id=”myVar.actorId”,這將調(diào)用任務(wù)實(shí)例變量“myVar”上getActorId方法。Pooled-actors屬性可選一個(gè)逗號(hào)分割actorId列表,能夠和actor-id協(xié)同使用。一個(gè)固定參與者池能夠指定以下:pooled-actors=”chicagobulls,pointersisters”。pooled-actors被作為一個(gè)表示式,所以你能夠引用一個(gè)返回String[]、Collection、或一個(gè)逗號(hào)分割池中參與者列表屬性或方法。class屬性可選一個(gè)實(shí)現(xiàn)org.jbpm.taskmgmt.def.AssignmentHandler接口類全名稱。config-type屬性可選{field|bean|constructor|configuration-property}。指定分配處理器對(duì)象(assignment-handler-object)對(duì)象將被怎樣創(chuàng)建和本元素內(nèi)容怎樣象配置信息那樣被分配處理器對(duì)象所使用。

{內(nèi)容}可選assignment元素內(nèi)容能夠被作為分配處理器(AssignmentHandler)實(shí)現(xiàn)配置信息,這是考慮到可重用委托類創(chuàng)建。

controller(控制器)在任務(wù)實(shí)施時(shí),可能需要讀、寫步驟變量;在任務(wù)完成并提交時(shí),可能需要寫步驟變量。為此,jBPM提供了"任務(wù)變量"概念。在一些情況下,任務(wù)變量和流程變量并非簡單一一對(duì)應(yīng)關(guān)系,比如,三個(gè)步驟變量代表三個(gè)月銷售額,任務(wù)變量只需要它們平均值。為實(shí)現(xiàn)任務(wù)和步驟實(shí)例之間信息交流,jBPM設(shè)置了任務(wù)控制器機(jī)制。該機(jī)制也采取遞進(jìn)模式:首先,jBPM提供基礎(chǔ)(默認(rèn))任務(wù)控制器;假如不敷使用,二次開發(fā)人員能夠使用自定義任務(wù)控制器。jBPM任務(wù)控制器機(jī)制在步驟變量和任務(wù)變量之間架起了一座橋梁。名稱類型數(shù)量描述class屬性可選一個(gè)實(shí)現(xiàn)org.jbpm.taskmgmt.def.TaskControllerHandler接口類全名稱。Config-type屬性可選{field|bean|constructor|configuration-property}。指定分配處理器對(duì)象(assignment-handler-object)對(duì)象將被怎樣創(chuàng)建和本元素內(nèi)容怎樣象配置信息那樣被分配處理器對(duì)象所使用。

{內(nèi)容}

controller元素內(nèi)容要么是指定任務(wù)控制處理器配置信息(假如指定了class屬性),要么必需是一個(gè)variable元素列表(假如沒有指定任務(wù)控制器)。variable元素[0..*]假如沒有經(jīng)過class屬性指定任務(wù)控制處理器,則controller元素內(nèi)容必需是變量列表。

process-state子步驟process-state是JBPM提供用來處理子步驟節(jié)點(diǎn),一個(gè)process-state只能對(duì)應(yīng)一個(gè)子步驟,到底指到哪個(gè)子步驟能夠在process-stateaction里指定,當(dāng)token實(shí)施到指定子步驟時(shí),子步驟就已經(jīng)開啟,不用像開啟主步驟一樣手工開啟子步驟。其它部分處理就和一般步驟沒有區(qū)分了。名稱類型數(shù)量描述name屬性必需名稱。Sub-process元素只能定義一個(gè)子步驟variable變量[0…*]Variable是用來指定怎樣把數(shù)據(jù)從父步驟copy到子步驟

sub-process子步驟名稱類型數(shù)量描述

name屬性必需

子步驟名稱version屬性可選子步驟版本。假如沒有指定該屬性,默認(rèn)將會(huì)采且該子步驟最終一個(gè)版本condition條件名稱類型數(shù)量描述

{內(nèi)容}或?qū)傩员硎臼奖匦?/p>

condition元素內(nèi)容是一個(gè)計(jì)算結(jié)果為布爾值jPDL表示式。決議采取第一個(gè)表示式處理結(jié)果為true轉(zhuǎn)換(按在processdefinition.xml中次序),假如沒有條件處理結(jié)果為true,則采取默認(rèn)離開轉(zhuǎn)換(也就是第一個(gè))。

exception-handler異常處理Jbpm異常處理機(jī)制僅僅集中于java異常,步驟定義本身實(shí)施不會(huì)造成什么異常,只有在實(shí)施委托類時(shí)才會(huì)造成異常。

在步驟定義(process-definitions)添加exception-handler對(duì)整個(gè)步驟起作用、節(jié)點(diǎn)(nodes)上添加異常只對(duì)目前節(jié)點(diǎn)起作用(同時(shí)假如在process-definitions里也設(shè)置了exception-handler那么將不會(huì)再實(shí)施process-definitions里exception-handler),和轉(zhuǎn)換(transitions)添加exception-handler只對(duì)目前transitions起作用(同時(shí)假如在process-definitions里也設(shè)置了exception-handler那么將不會(huì)再實(shí)施process-definitions里exception-handler),能夠指定一個(gè)異常處理(exception-handlers)清單,每個(gè)異常處理(exception-handler)有一個(gè)動(dòng)作列表,當(dāng)在委托類中發(fā)生異常時(shí),會(huì)在步驟元素父層次搜索一個(gè)合適異常處理(exception-handler),當(dāng)它被搜索到,則異常處理(exception-handler)動(dòng)作將被實(shí)施。

注意,Jbpm異常處理機(jī)制和java異常處理不完全相同。在java中,一個(gè)捕捉異常能夠影響控制流,而在Jbpm中,步驟不會(huì)被Jbpm異常處理機(jī)制所改變。異常要么被捕捉,要么不捕捉,沒有被捕捉異常被拋向用戶端(比如用戶端調(diào)用token.signal()),而被捕捉異常則是經(jīng)過Jbpmexception-handler,對(duì)于被捕捉異常,圖實(shí)施仍會(huì)繼續(xù),就像沒有異常發(fā)生一樣。

在處理異常動(dòng)作中,能夠使用Token.setNode(Nodenode)把令牌放入圖中任何節(jié)點(diǎn)。名稱類型數(shù)量描述exception-class屬性可選指定和本異常處理器所匹配javathrowable類,假如這個(gè)沒有指定這個(gè)屬性,則它匹配全部異常(java.lang.Throwable)。action元素[1..*]當(dāng)異常被異常處理器捕捉時(shí)將要實(shí)施動(dòng)作列表。二XPDL之步驟定義元模型XPDL元模型定義了步驟定義里所包含實(shí)體、它們關(guān)系和屬性,其中屬性不僅僅為了實(shí)施需要,很多屬性是為了統(tǒng)計(jì)和監(jiān)控需要。2.1包(Package)步驟模型包含很多作用域大于步驟定義實(shí)體,比如參與者申明、應(yīng)用程序申明和相關(guān)數(shù)據(jù)元素,它們可能被多個(gè)步驟定義所引用。為了避免每個(gè)步驟定義全部反復(fù)定義這些實(shí)體,XPDL引入包概念,包作為步驟定義容器,對(duì)步驟定義根據(jù)關(guān)聯(lián)性進(jìn)行分組。在包上定義實(shí)體被其包含步驟定義繼承,同時(shí),包能夠?yàn)樗鶎俨襟E定義申明一系列通用屬性,比如作者、版本號(hào)、狀態(tài)等。XPDL里包等價(jià)于BPMN里業(yè)務(wù)步驟圖(BusinessProcessDiagram)。2.2泳道(Swimlanes)泳道被用來對(duì)步驟定義和活動(dòng)進(jìn)行布局。我們使用泳道在步驟等級(jí)上定義參與者信息(部門、企業(yè)),在活動(dòng)等級(jí)上定義實(shí)施者信息(角色、人員)。我們使用一系列非重合長方形來描述泳道,這些長方形稱為池(Pool),同時(shí),池又被細(xì)分為一系列子泳道(Lane)。以下圖2-6所表示:圖2-6泳道一樣在下圖中描述了一個(gè)包含貸款應(yīng)用步驟池。池中沒有道。步驟能夠是可重用子步驟或內(nèi)嵌子步驟。要注意遷移(次序流)能夠穿越同一個(gè)池中道。遷移可能不會(huì)穿越池。2.3步驟定義(ProcessDefinition)步驟定義是對(duì)步驟建模和描述,為步驟中其它實(shí)體提供上下文信息。其屬性包含創(chuàng)建時(shí)間、作者、初始化參數(shù)、實(shí)施優(yōu)先級(jí)、時(shí)間約束、仿真信息等。Xpdl2.1文檔包含對(duì)步驟集(包)步驟定義。Xml文檔不僅被模型工具、模擬工具和實(shí)施工具使用,它一樣為bam報(bào)表工具提供了基礎(chǔ)信息,尤其是為OLAP立體報(bào)表技術(shù)提供了維度和變量信息。在這里我們描述了使用管理工具發(fā)送xpdl步驟定義到分析工具并傳達(dá)能捕捉實(shí)施具體情況日志事件流企業(yè)步驟管理系統(tǒng)。分析工具依據(jù)步驟定義、參與者和隊(duì)列信息來結(jié)構(gòu)數(shù)據(jù)庫和OLAP立方。分析工具處理事件來更新數(shù)據(jù)庫中實(shí)際和維度上表,而且利用excel和(或)其它擁有步驟和企業(yè)智能工具立體處理事件來完成對(duì)切片和切塊查看數(shù)據(jù)交互準(zhǔn)備。一個(gè)可供選擇數(shù)據(jù)展示方法顯示了步驟定義視覺環(huán)境中選擇數(shù)據(jù)。這個(gè)能夠由歷史展示或動(dòng)畫實(shí)施系統(tǒng)或模擬運(yùn)行來實(shí)現(xiàn)。2.4活動(dòng)(Activity)活動(dòng)是步驟中一個(gè)步驟,一個(gè)基礎(chǔ)活動(dòng)含有屬性。這些屬性提供了在這一步驟中誰能夠?qū)嵤┻@個(gè)活動(dòng)、什么應(yīng)用或Web服務(wù)會(huì)被調(diào)用、正在工作對(duì)象哪些內(nèi)容被使用了和(或)被改變了等信息。參與者(資源)和應(yīng)用可能會(huì)定義在一個(gè)步驟中,或被定義在企業(yè)步驟模型整個(gè)步驟集中。工作對(duì)象內(nèi)容一樣能夠定義在一個(gè)步驟中或整個(gè)模型中?;顒?dòng)有部分其它屬性更深入定義了它們特殊角色或它們是怎樣實(shí)現(xiàn)一個(gè)步驟包含一個(gè)或多個(gè)活動(dòng),活動(dòng)對(duì)應(yīng)著步驟里一個(gè)工作單元。一個(gè)經(jīng)典活動(dòng)能被人力資源或計(jì)算機(jī)所實(shí)施。XPDL活動(dòng)粒度比較粗,分為四類,分別對(duì)應(yīng)BPMN里任務(wù)、子步驟、網(wǎng)關(guān)和事件。以下圖2-7所表示:圖2-7XPDL活動(dòng)和BPMN映射2.5轉(zhuǎn)移線(Transition)活動(dòng)之間經(jīng)過轉(zhuǎn)移線連接。轉(zhuǎn)移線包含3個(gè)屬性:源活動(dòng)、目標(biāo)活動(dòng)和條件。轉(zhuǎn)移線能夠是有條件(設(shè)置表示式),也能夠是無條件。XPDL轉(zhuǎn)移線對(duì)應(yīng)于BPMN里次序流,以下圖2-8所表示:圖2-8XPDL轉(zhuǎn)移線對(duì)應(yīng)BPMN里次序流2.6參與者申明(ParticipantDeclaration)描述實(shí)施步驟和活動(dòng)資源。資源能夠是單個(gè)人、也能夠是角色、部門、還能夠是自動(dòng)實(shí)施機(jī)器資源(比如打印機(jī))。2.7應(yīng)用程序申明(ApplicationDeclaration)活動(dòng)能夠調(diào)用IT系統(tǒng)、接口、Web服務(wù)。BPMN使用內(nèi)置服務(wù)任務(wù)(ServiceTask)直接代表對(duì)應(yīng)用程序調(diào)用。2.8人工產(chǎn)出物(Artifact)為步驟附加額外建模信息,這些信息不屬于基礎(chǔ)步驟實(shí)體(活動(dòng)、轉(zhuǎn)移線、消息流),它們經(jīng)過關(guān)聯(lián)和步驟實(shí)體聯(lián)絡(luò)在一起。在BPMN里,人工交付物包含3種類型,以下圖2-9所表示:圖2-9人工產(chǎn)出物2.9消息流(MessageFlow)消息流用來展示兩個(gè)參與者/步驟之間消息流向。在BPMN中,用泳道中池代表兩個(gè)參與者/步驟。消息流不能連接同一個(gè)池中活動(dòng)。圖2-10消息流消息流通常由Web服務(wù)或消息隊(duì)列實(shí)現(xiàn)。在例子中我們敘述了不一樣池中活動(dòng)之間消息流是怎樣流動(dòng)。這使得我們能夠圖形化展示步驟之間各方面安排。應(yīng)該注意是消息流不會(huì)出現(xiàn)在同一個(gè)池中活動(dòng)之間。換句話說,次序流用來連接同一個(gè)池中活動(dòng),而消息流用來展示不一樣池中活動(dòng)之間通信。這個(gè)例子中池被畫成水平方向而且擴(kuò)展到整個(gè)頁面。不過,規(guī)范中也支持垂直池,并許可限制寬度和高度。這支持了規(guī)范中抽象步驟和安排對(duì)池使用。2.10關(guān)聯(lián)(Association)我們使用關(guān)聯(lián)將信息、人工產(chǎn)出物和步驟實(shí)體連接起來,為步驟模型提供更多信息,它不影響步驟實(shí)施。以下圖2-11所表示:圖2-11關(guān)聯(lián)2.11相關(guān)數(shù)據(jù)元素(Relevantdatafield)為步驟定義實(shí)施過程中創(chuàng)建或使用到數(shù)據(jù),這些數(shù)據(jù)被活動(dòng)、應(yīng)用程序和步驟中定義多種表示式(轉(zhuǎn)移線條件計(jì)算、網(wǎng)關(guān)條件計(jì)算)所使用。2.12數(shù)據(jù)類型和表示式(DataTypesandExpressions)定義相關(guān)數(shù)據(jù)元素、系統(tǒng)和環(huán)境數(shù)據(jù)、參與者數(shù)據(jù)數(shù)據(jù)類型,這包含了部分標(biāo)準(zhǔn)類型,比如String、int、date等等,也包含了自定義擴(kuò)展。表示式被用于多種條件計(jì)算(轉(zhuǎn)移線、網(wǎng)關(guān))和給數(shù)據(jù)元素賦值。2.13系統(tǒng)和環(huán)境數(shù)據(jù)(SystemandEnvironmentalData)由工作流系統(tǒng)和外部環(huán)境所維護(hù)數(shù)據(jù),這些數(shù)據(jù)被步驟在實(shí)施過程中使用。2.14資源倉庫(ResourceRepository)實(shí)施活動(dòng)資源能夠是人、也能夠是角色、部門、程序、還能夠是自動(dòng)實(shí)施機(jī)器資源,所以我們使用資源倉庫將步驟所包含到資源管理起來。資源倉庫包含了對(duì)組織機(jī)構(gòu)建模支持。2.15廠商/用戶自定義擴(kuò)展(VendororUserspecificExtensions)工作流系統(tǒng)廠商/用戶能夠針對(duì)自己業(yè)務(wù)需求對(duì)步驟元素和屬性進(jìn)行擴(kuò)展。2.16步驟交換通常元模型許可工具交換模型。這些工含有:模擬工具監(jiān)控工具實(shí)施工具模型工具庫工具下圖展示了再BPM套件中步驟交換使用。三BPMN2.0一個(gè)BPMN2.0XML步驟根是definitions元素。在命名狀態(tài),子元素會(huì)包含真正業(yè)務(wù)步驟定義。每個(gè)process子元素能夠擁有一個(gè)id和name。BPMN2.0基礎(chǔ)結(jié)構(gòu):3.1事件和活動(dòng)和網(wǎng)關(guān)一起,事件用來在實(shí)際每個(gè)業(yè)務(wù)步驟中。事件讓業(yè)務(wù)建模工具用很自然方法描述業(yè)務(wù)步驟,比如“當(dāng)我接收到用戶訂單,這個(gè)步驟就開啟”,“假如兩天內(nèi)任務(wù)沒結(jié)束,就終止步驟”或當(dāng)我收到一封取消郵件,當(dāng)步驟在運(yùn)行時(shí),使用子步驟處理郵件。注意經(jīng)典業(yè)務(wù)通常使用這種事件驅(qū)動(dòng)方法。大家不會(huì)硬編碼次序創(chuàng)建,不過她們傾向于使用在她們環(huán)境中發(fā)生事情(比如,事件)。在BPMN規(guī)范中,描述了很多事件類型,為了覆蓋可能事情,在業(yè)務(wù)環(huán)境中可能出現(xiàn)情況。3.2事件:空開啟事件一個(gè)開啟事件說明了步驟開始(或子步驟)。圖形形式,它看起來是一個(gè)圓(可能)內(nèi)部有一個(gè)小圖標(biāo)。圖標(biāo)指定了事件實(shí)際類型會(huì)在步驟實(shí)例創(chuàng)建時(shí)被觸發(fā)??臻_啟事件畫出來是一個(gè)圓,內(nèi)部沒有圖標(biāo),意思是這個(gè)觸發(fā)器是未知或未指定。jPDL開始活動(dòng)基礎(chǔ)是一樣語法。步驟實(shí)例步驟定義包含一個(gè)空開啟事件,能夠使用executionServiceAPI調(diào)用創(chuàng)建。一個(gè)空開始事件像下面這么定義。id是必填,name是可選。<startEventid="start"name="myStart"/>3.3事件:空結(jié)束事件結(jié)束事件指定了步驟實(shí)例中一個(gè)步驟路徑結(jié)束。圖形上,它看起來就是一個(gè)圓擁有厚邊框(可能)內(nèi)部有小圖標(biāo)。圖標(biāo)指定了結(jié)束時(shí)候會(huì)實(shí)施哪種操作。空結(jié)束事件畫出來是一個(gè)圓,擁有厚邊框,內(nèi)部沒有圖標(biāo),這意味著當(dāng)步驟抵達(dá)事件時(shí),不會(huì)拋出任何信號(hào)。jPDL中結(jié)束事件和空結(jié)束事件語義相同??战Y(jié)束事件能夠像下面一樣定義,id是必填,name是可選。<endEventid="end"name="myEnd"/>下面例子顯示了只使用空開始和結(jié)束事件步驟:這個(gè)步驟對(duì)應(yīng)可實(shí)施XML像這么(忽略申明用definitions根元素)<processid="noneStartEndEvent"name="BPMN2Examplenonestartandendevent"><startEventid="start"/><sequenceFlowid="flow1"name="fromStartToEnd"sourceRef="start"targetRef="end"/><endEventid="end"name="End"/></process>3.4事件:終止結(jié)束事件終止和\o"3.8.3.

事件:空結(jié)束事件"空結(jié)束事件區(qū)分是實(shí)際中步驟路徑是怎樣處理(或使用BPMN2.0術(shù)語叫做token)。終止結(jié)束事件會(huì)結(jié)束整個(gè)步驟實(shí)例,而空結(jié)束事件只會(huì)結(jié)束目前步驟路徑。她們?nèi)坎粫?huì)拋出任何事情當(dāng)?shù)诌_(dá)結(jié)束事件時(shí)候。一個(gè)終止結(jié)束事件能夠像下面定義。id是必填,name是可選。<endEventid="terminateEnd"name="myTerminateEnd"><terminateEventDefinition/></endEvent>終止結(jié)束事件被描繪成結(jié)束事件一樣(圓,厚邊框),內(nèi)部圖標(biāo)時(shí)一個(gè)完整圓。在下面例子中,完成task1會(huì)結(jié)束步驟實(shí)例,當(dāng)完成task2時(shí)只會(huì)結(jié)束抵達(dá)結(jié)束事件步驟路徑,只剩下task1打開。3.5次序流次序流是事件,活動(dòng)和網(wǎng)關(guān)之間連線,顯示為一條實(shí)線帶有箭頭,在BPMN圖形中(jPDL中等效是transition)。每個(gè)次序流全部有一個(gè)源頭和一個(gè)目標(biāo)引用,包含了活動(dòng),事件或網(wǎng)關(guān)id。<sequenceFlowid="myFlow"name="MyFlow"sourceRef="sourceId"targetRef="targetId"/>和jPDL一個(gè)關(guān)鍵區(qū)分是多外向次序流行為。在jPDL中,只有一個(gè)轉(zhuǎn)移會(huì)成為外向轉(zhuǎn)移,除非活動(dòng)是fork(或自定義活動(dòng)擁有fork行為)。然而,在BPMN中,多外向次序流默認(rèn)行為是切分進(jìn)入token(jBPM中術(shù)語叫做execution)分成token集合,每個(gè)次序流一個(gè)。在下面情況中,在完成第一個(gè)任務(wù),就會(huì)激活三個(gè)任務(wù)。為了避免使用一個(gè)次序流,必需添加condition條件到次序流中。在運(yùn)行時(shí),只有當(dāng)condition條件結(jié)果為true,次序流才會(huì)被實(shí)施?;顒?dòng)(比如用戶任務(wù))和網(wǎng)關(guān)(比如唯一網(wǎng)關(guān))能夠用戶默認(rèn)次序流。默認(rèn)次序流只會(huì)在活動(dòng)或網(wǎng)關(guān)全部其它外向次序流condition條件為false時(shí)才會(huì)使用。默認(rèn)次序流圖形像是次序流多了一個(gè)斜線標(biāo)識(shí)。默認(rèn)次序流經(jīng)過指定活動(dòng)或網(wǎng)關(guān)'default'屬性來使用。也要注意,默認(rèn)次序流上表示式會(huì)被忽略。3.6網(wǎng)關(guān)BPMN中網(wǎng)關(guān)是用來控制步驟中流向。更確切是,當(dāng)一個(gè)token(BPMN2.0中execution概念注解)抵達(dá)一個(gè)網(wǎng)關(guān),它會(huì)依據(jù)網(wǎng)關(guān)類型進(jìn)行合并或切分。網(wǎng)關(guān)描繪成一個(gè)菱形,使用一個(gè)內(nèi)部圖標(biāo)來指定類型唯一,廣泛,其它)。全部網(wǎng)關(guān)類型,全部能夠設(shè)置gatewayDirection。下面值能夠使用:unspecificed(默認(rèn)):網(wǎng)關(guān)可能擁有多個(gè)進(jìn)入和外出次序流。mixed:網(wǎng)關(guān)必需擁有多個(gè)進(jìn)入和外出次序流。converging:網(wǎng)關(guān)必需擁有多個(gè)進(jìn)入次序流,不過只能有一個(gè)外出次序流。diverging:網(wǎng)關(guān)必需擁有一個(gè)進(jìn)入次序流,和多個(gè)外出次序流。3.7網(wǎng)關(guān):唯一網(wǎng)關(guān)唯一網(wǎng)關(guān)表示了一個(gè)步驟中唯一決議。會(huì)有一個(gè)外向次序流被使用,依據(jù)定義在次序流中條件。對(duì)應(yīng)jPDL結(jié)構(gòu),相同語法是decision活動(dòng)。唯一網(wǎng)關(guān)完全技術(shù)名稱是'基于數(shù)據(jù)唯一網(wǎng)關(guān)',不過也常常稱為XOR網(wǎng)關(guān)。XOR網(wǎng)關(guān)被描繪為一個(gè)菱形,內(nèi)部有一個(gè)'X',一個(gè)空菱形,沒有網(wǎng)關(guān)也象征著唯一網(wǎng)關(guān)。下面圖形顯示了唯一網(wǎng)關(guān)使用方法:依據(jù)amount變量值,會(huì)選擇唯一網(wǎng)關(guān)外向三個(gè)外向次序流中一個(gè)。3.8網(wǎng)關(guān):并行網(wǎng)關(guān)并行網(wǎng)關(guān)用來切分或同時(shí)相關(guān)進(jìn)入或外出次序流。并行網(wǎng)關(guān)擁有一個(gè)進(jìn)入次序流和多于一個(gè)外出次序流叫做'并行切分或'AND-split'。全部外出次序流全部會(huì)被并行使用。注意:像規(guī)范中定義那樣,外出次序流中條件全部會(huì)被忽略。并行網(wǎng)關(guān)擁有多個(gè)進(jìn)入次序流和一個(gè)外出次序流叫做'并行歸并'或AND-join。全部進(jìn)入次序流需要抵達(dá)這個(gè)并行歸并,在外向次序流使用之前。下面圖形顯示了一個(gè)并行網(wǎng)關(guān)能夠怎樣使用。在步驟開啟后,“prepareshipment”和“billcustomer”用戶任務(wù)全部會(huì)被激活。并行網(wǎng)關(guān)被描繪為一個(gè)菱形,內(nèi)部圖標(biāo)是一個(gè)十字,對(duì)切分和歸并行為全部是一樣。3.9任務(wù)一個(gè)任務(wù)表示工作需要被外部實(shí)體完成,比如人工或自動(dòng)服務(wù)。關(guān)鍵是注意BPMN語法'task'和jPDL語法區(qū)分。在jPDL中,'task'概念總是用在人工做部分事情環(huán)境。步驟引擎碰到j(luò)PDL中task,它會(huì)創(chuàng)建一個(gè)task,交給部分人任務(wù)列表,然后它會(huì)進(jìn)入等候狀態(tài)。然而在BPMN2.0中,這里有很多任務(wù)類型,部分表示等候狀態(tài)(比如,UserTask部分表示自動(dòng)活動(dòng)(比如,ServiceTask。所以小心不要混淆了任務(wù)概念,在切換語言時(shí)候。任務(wù)被描繪成一個(gè)圓角矩形,通常內(nèi)部包含文字。任務(wù)類型(用戶任務(wù),服務(wù)任務(wù),腳本任務(wù),等等)顯示在矩形左上角,用小圖標(biāo)區(qū)分。依據(jù)任務(wù)類型,引擎會(huì)實(shí)施不一樣功效。3.10任務(wù):人工任務(wù)usertask是經(jīng)典'人工任務(wù)',實(shí)際中每個(gè)workflow或BPMN軟件中全部能夠找到。當(dāng)步驟實(shí)施抵達(dá)這么一個(gè)usertask時(shí),一個(gè)新人工任務(wù)就會(huì)被創(chuàng)建,交給用戶任務(wù)列表和\o"3.8.13.

任務(wù):手工任務(wù)"manualtask關(guān)鍵區(qū)分是(也和人工工作對(duì)應(yīng))是步驟引擎了解任務(wù)。引擎能夠跟蹤競爭,分配,時(shí)間,其它,這些不是manualtask情況。usertask描繪為一個(gè)圓角矩形,在左上角是一個(gè)小用戶圖標(biāo)。usertask被定義為下面BPMN2.0XML:<userTaskid="myTask"name="Mytask"/>依據(jù)規(guī)范,能夠使用多個(gè)實(shí)現(xiàn)(WebService,WS-humantask,等等)。經(jīng)過使用implementation屬性。目前,只有標(biāo)準(zhǔn)jBPM任務(wù)機(jī)制才能夠用,所以這里(還)沒有定義'implementation'屬性功效。BPMN2.0規(guī)范包含了部分方法把任務(wù)分配給用戶、組、角色等等。目前BPMN2.0jBPM實(shí)現(xiàn)許可使用一個(gè)resourceAssignmentExpression來分配任務(wù),結(jié)合humanPerformerorPotentialOwner結(jié)構(gòu)。這部分期望在未來版本里能夠深入演化。potentialOwner用來在你期望確定用戶、組、角色時(shí)候。這是一個(gè)task候選人。也要注意,需要在步驟外部定義一個(gè)資源,這么任務(wù)分配器能夠引用到這個(gè)資源。實(shí)際上,任何活動(dòng)全部能夠引用一個(gè)或多個(gè)資源元素?,F(xiàn)在,只需要定義這個(gè)資源就能夠了(因?yàn)樗且?guī)范中一個(gè)必需元素),不過在以后公布中會(huì)進(jìn)行加強(qiáng)(比如,資源能夠擁有運(yùn)行時(shí)參數(shù))。3.11任務(wù):Java服務(wù)任務(wù)ServiceTask是一個(gè)自動(dòng)活動(dòng),它會(huì)調(diào)用部分服務(wù),比如webservice,javaservice等等。目前jBPM引擎只支持調(diào)用javaservice,不過webservice調(diào)用已經(jīng)在未來版本中做了計(jì)劃。定義一個(gè)服務(wù)任務(wù)需要好幾行XML(這里就能夠看到BPEL影響力)。當(dāng)然,在很快未來,我們期望有工具能夠把這部分大量簡化。一個(gè)服務(wù)任務(wù)需要以下定義:<serviceTaskid="MyServiceTask"name="Myservicetask"implementation="Other"operationRef="myOperation"/>服務(wù)任務(wù)需要一個(gè)必填id和一個(gè)可選name。implementation元素是用來表示調(diào)用服務(wù)類型。可選值是WebService,Other或Unspecified。因?yàn)槲覀冎粚?shí)現(xiàn)了Java調(diào)用,現(xiàn)在只能選擇Other。服務(wù)任務(wù)將調(diào)用一個(gè)操作,operationid會(huì)在operationRef屬性中引用。這么一個(gè)操作就是下面實(shí)例interface一部分。每個(gè)操作全部最少有一個(gè)輸入信息,而且最多有一個(gè)輸出信息。<interfaceid="myInterface"name="org.jbpm.MyJavaServicek"><operationid="myOperation2"name="myMethod"><inMessageRef>inputMessage</inMessageRef><outMessageRef>outputMessage</outMessageRef></bpmn:operation></interface>對(duì)于java服務(wù),接口名稱用來指定java類全類名。操作名稱用來指定將要調(diào)用方法名。輸入/輸出信息表示著java方法參數(shù)/返回值,定義以下所表示:<messageid="inputMessage"name="inputmessage"structureRef="myItemDefinition1"/>BPMN中很多元素叫做'item感知',包含這個(gè)消息結(jié)構(gòu)。這意味著它們會(huì)在步驟實(shí)施過程中保留或讀取item。負(fù)責(zé)這些元素?cái)?shù)據(jù)結(jié)構(gòu)需要使用ItemDefinition。在這個(gè)環(huán)境下,消息指定了它數(shù)據(jù)結(jié)構(gòu),經(jīng)過引用structureRef屬性中定義ItemDefinition。3.12任務(wù):腳本服務(wù)任務(wù)本任務(wù)時(shí)一個(gè)自動(dòng)活動(dòng),當(dāng)?shù)诌_(dá)這個(gè)任務(wù)時(shí)候步驟引擎會(huì)實(shí)施一個(gè)腳本。腳本任務(wù)使用方法以下:<scriptTaskid="scriptTask"name="ScriptTask"scriptLanguage="bsh"><script><![CDATA[for(inti=0;i<input.length;i++){System.out.println(input[i]+"x2="+(input[i]*2));}]]></script></scriptTask>腳本任務(wù),除了必填id和可選name之外,還許可指定scriptLanguage和script。因?yàn)槲覀兪褂昧薐SR-223(java平臺(tái)腳本語言),修改腳本語言就需要:把scriptLanguage屬性修改為JSR-223兼容名稱在classpath下添加JSR規(guī)范ScriptEngine實(shí)現(xiàn)上面XML對(duì)應(yīng)圖形以下所表示(添加了空開始和結(jié)束事件)。3.13任務(wù):手工任務(wù)手工任務(wù)時(shí)一個(gè)由外部人員實(shí)施任務(wù),不過沒有指定是一個(gè)BPM系統(tǒng)或是一個(gè)服務(wù)會(huì)被調(diào)用。在真實(shí)世界里,有很多例子:安裝一個(gè)電話系統(tǒng),使用定時(shí)郵件發(fā)送一封信,用電話聯(lián)絡(luò)用戶,等等。<manualTaskid="myManualTask"name="Callcustomer"/>手工任務(wù)目標(biāo)更像文檔/建模提醒,因?yàn)樗鼘?duì)步驟引擎運(yùn)行沒有任何意義,所以,當(dāng)步驟引擎碰到一個(gè)手工任務(wù)時(shí)會(huì)簡單略過。3.14任務(wù):java接收任務(wù)receivetask是一個(gè)任務(wù)會(huì)等到外部消息到來。除了廣泛使用webservice用例,規(guī)范在其它環(huán)境中使用也是一樣。webservice用例還沒有實(shí)現(xiàn),不過receivetask已經(jīng)能夠在java環(huán)境中使用了。receivetask顯示為一個(gè)圓角矩形(和task圖形一樣)在左上角有一個(gè)小信封圖標(biāo)。在java環(huán)境中,receivetask沒有其它屬性,除了id和name(可選),行為就像是一個(gè)等候狀態(tài)。為了在你業(yè)務(wù)步驟中使用等候狀態(tài),只需要加入以下幾行:<receiveTaskid="receiveTask"name="wait"/>步驟實(shí)施會(huì)在這么一個(gè)receivetask中等候。步驟會(huì)使用熟悉jBPMsignalmethods來繼續(xù)實(shí)施。注意,這些可能在未來改變,因?yàn)?signal'在BPMN2.0中擁有完全不一樣含義。Executionexecution=processInstance.findActiveExecutionIn("receiveTask");executionService.signalExecutionById(execution.getId());四BPEL4.1介紹業(yè)務(wù)步驟實(shí)施語言(BusinessProcessExecutionLanguage,BPEL,發(fā)音為'bipple'或'bee-pell'),也叫業(yè)務(wù)過程實(shí)施語言,是一個(gè)基于XML,用來描寫業(yè)務(wù)步驟編程語言,被描寫業(yè)務(wù)步驟每個(gè)單一步驟則由Web服務(wù)來實(shí)現(xiàn)。BPEL目標(biāo)是要實(shí)現(xiàn)業(yè)務(wù)步驟定義格式標(biāo)準(zhǔn)化,使得企業(yè)之間能夠經(jīng)過Web服務(wù)無縫進(jìn)行交互。BPEL是基于Web服務(wù),而且依靠于WSDL。一個(gè)BPEL步驟能夠公布為一個(gè)WSDL定義服務(wù),并像其它Web服務(wù)一樣被調(diào)用。而且,BPEL期望一個(gè)Web服務(wù)合成所包含全部外部Web服務(wù),全部是用WSDL服務(wù)契約定義,這令BPEL步驟能夠調(diào)用其它BPEL步驟,甚至能夠遞歸調(diào)用自己。值得注意是BPEL不直接支持人機(jī)對(duì)話,BPEL所描寫過程僅和Web服務(wù)通信,而這些Web服務(wù)卻能夠提供和用戶信息交換,但它們不是用戶本身。用BPEL編寫步驟能夠在任何支持BEPL規(guī)范平臺(tái)或產(chǎn)品上運(yùn)行。4.2BPEL支持兩類不一樣類型業(yè)務(wù)步驟可實(shí)施步驟:定義了要實(shí)施各項(xiàng)具體任務(wù),和完成業(yè)務(wù)步驟所需要調(diào)用各個(gè)服務(wù),它們遵照編排規(guī)范,能夠被一個(gè)編排引擎所實(shí)施。(orchestration)

抽象步驟:具體說明了雙方或多方公共消息交換,但沒有定義步驟流內(nèi)部行為細(xì)節(jié),不可實(shí)施。(choreography)

BPEL現(xiàn)已成為被業(yè)界廣泛認(rèn)可和接收進(jìn)行Web服務(wù)編排事實(shí)標(biāo)準(zhǔn)。4.3BPEL和其它Web服務(wù)技術(shù)關(guān)系BPEL是建立在Webservices技術(shù)之上,所以和WSDL、XML、SOAP和UDDI等標(biāo)準(zhǔn)親密相關(guān)。BPEL步驟模型是在WSDL定義服務(wù)模型之上一層。一個(gè)業(yè)務(wù)步驟定義了一個(gè)步驟實(shí)例和它伙伴之間交互。為了定義一個(gè)業(yè)務(wù)步驟,BPEL引入了部分新XML元素,比如Partners:業(yè)務(wù)事務(wù)中參與者(actors)Containers:組成業(yè)務(wù)步驟中某一狀態(tài)一組消息Operations:所需Web服務(wù)類型Porttypes:operations所要求相關(guān)Web服務(wù)關(guān)系4.4BPEL包含范圍處理活動(dòng)次序,尤其是網(wǎng)絡(luò)服務(wù)互操作。消息和處理實(shí)例之間關(guān)系。在發(fā)生錯(cuò)誤和例外情況下恢復(fù)行為處理角色之間基于網(wǎng)絡(luò)服務(wù)關(guān)系雙面性。4.5BPEL語言支持兩類任務(wù)BPEL支持兩類任務(wù)或說是行為:基礎(chǔ)任務(wù)(basictasks)和結(jié)構(gòu)化任務(wù)(structuredtasks)。基礎(chǔ)任務(wù)是指由業(yè)務(wù)步驟一個(gè)基礎(chǔ)步驟,任務(wù)內(nèi)不會(huì)嵌套其它任務(wù);而結(jié)構(gòu)化任務(wù)從外部看是一個(gè)步驟而從內(nèi)部看卻有若干個(gè)步驟。基礎(chǔ)任務(wù)包含:Invoke任務(wù)——許可業(yè)務(wù)步驟在某一個(gè)Web服務(wù)提供portType上調(diào)用單向(one-way)或請(qǐng)求/響應(yīng)(request/respose)操作。Receive任務(wù)——許可業(yè)務(wù)步驟停下來等候消息到來。Reply任務(wù)——許可業(yè)務(wù)步驟對(duì)收到消息發(fā)送一個(gè)回復(fù)消息。Wait任務(wù)——通知步驟等候一段時(shí)間。Assign任務(wù)——把數(shù)據(jù)從一處復(fù)制到另一處。Throw任務(wù)——表明發(fā)生了某個(gè)錯(cuò)誤。Terminate任務(wù)——終止整個(gè)編排實(shí)例。結(jié)構(gòu)化任務(wù)包含:Sequence任務(wù)——定義一個(gè)有序任務(wù)序列Switch任務(wù)——依據(jù)條件選擇某一分支Pick任務(wù)——停下并等候某一合適消息到來,或等到超時(shí)繼續(xù)前進(jìn)。只

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論