




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
一JPDL步驟定義process-definition(步驟定義)步驟定義根節點,是全部節點父節點名稱類型數量描述name屬性可選步驟名稱。swimlane元素[0..*]步驟中使用泳道。泳道表示步驟角色,它們被用于任務分配。start-state元素[0..1]步驟起始狀態。注意,沒有起始狀態步驟是正當,不過不能被實施。end-state|state|node|task-node|process-state|super-state|fork|join|decision元素[0..*]步驟定義節點。注意,沒有節點步驟是正當,不過不能被實施。event元素[0..*]作為一個容器服務于動作步驟事件。action|script|create-timer|cancel-timer元素[0..*]全局定義動作,能夠在事件和轉換中引用。注意,為了被引用,這些動作必需指定名稱。task元素[0..*]全局定義任務,能夠在動作中使用。exception-handler元素[0..*]一個異常處理器列表,用于這個步驟定義中委托類所拋出全部異常。node(自動節點)這種節點和State相反,也稱自動節點。當業務程序實例實施到這個節點,不會停止實施。而是會繼續往下實施。假如該節點存在多個離開轉向。那么,就會實施其中第一個離開轉向,在Node狀態中,不需要外部參與者參與,業務步驟這個部分是自動、即時完成。名稱類型數量描述action|script|create-timer|cancel-timer事件1用于表示這個節點行為定制動作。一般節點元素
請參考一般節點元素。
start-state(開始狀態)start-state是我們整個步驟開始節點,全部步驟實例從這里開始。名稱類型數量描述Name屬性可選節點名稱。Task元素[0..1]起始一個步驟實例任務,或用來捕捉步驟提議者Event元素[0..*]支持事件類型:{node-leave}。transition元素[0..*]離開轉換,每個離開節點轉換必需有一個不一樣名稱。exception-handler元素[0..*]一個異常處理器列表,用于這個步驟節點中委托類所拋出全部異常。
end-state(結束節點)對于每一個步驟定義全部會有一個結束節點,和開始節點對應名稱類型數量描述Name屬性必需結束狀態名稱。event元素[0..*]支持事件類型:{node-enter}。exception-handler元素[0..*]一個異常處理器列表,用于這個步驟節點中委托類所拋出全部異常。
state(狀態) State節點也叫手工節點,進入到這種節點,整個步驟實施就會中止。直到系統外參與者提議繼續實施命令,即調用signal或end方法,業務程序實例實施才能夠繼續下去。名稱類型數量描述name屬性必需節點名稱。async屬性{true|false},默認是false假如設置為true,這個節點將會異步實施。請參考”異步實施”章節。transition元素[0..*]離開轉換。每個離開節點轉換必需有一個不一樣名稱,最多只許可全部離開轉換中一個沒有名稱。第一個轉換被指定為默認轉換,當離開節點而沒有指定轉換時,默認轉換發生。event元素[0..*]支持事件類型:{node-enter|node-leave}。exception-handler元素[0..*]一個異常處理器列表,用于這個步驟節點中委托類所拋出全部異常。timer元素[0..*]指定一個定時器,用來監視節點中一個實施所連續時間。
task-node(任務節點)其性質和node節點一樣,在沒有task時候,也全部是自動實施,不等候。task-node被歸類為一個等候節點,是指在task-node中task列表中task沒有全部實施完之前,它會一直等候。Task能夠在task-node節點下定義,也能夠掛在process-definition節點下。最普遍方法是在task-node節點下定義一個或多個任務。默認情況下,步驟在task-node節點會處于等候狀態,直到全部任務被實施完成。Task實施是按次序實施,任務全部完成后,token仍然不會指向后面節點;需要自己手動調用processInstance.signal()才會驅動步驟到下面節點。名稱類型數量描述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,在離開節點時,全部打開任務將被結束。task元素[0..*]當實施抵達本節點時所應被創建任務。一般節點元素
請參考一般節點元素。
為了幫助讀者了解task-node節點signal屬性,這里舉例以下:對于這么步驟定義:<task-nodename='a'><taskname='laundry'/><taskname='dishes'/><taskname='changenappy'/><transitionto='b'/></task-node>這里沒有定義signal屬性值,這就表明當節點中三個任務全部完成后,步驟才進入后面節點當<task-nodename='a'signal='unsynchronized'>表明token不會在本節點停留,而是直接到后面節點當<task-nodename='a'signal='never'>表明三個任務全部完成后,token仍然不會指向后面節點;需要自己手動調用processInstance.signal()才會驅動步驟到下面節點當<task-nodename='a'signal='first'>表明只要有一個任務完成后,token就指向后面節點當<task-nodename='a'signal='first-wait'>表明當第一個任務實例完成時繼續實施;當在a節點入口處沒有任務創建時,token在a任務節點處等候,直到任務被創建或完成。當<task-nodename='a'signal='last'>時,這是默認值,和不設置signal屬性情況相同。當<task-nodename='a'signal='last-wait'>時,當最終一個任務實例完成時候繼續實施下去。當a這個任務節點沒有任務被建立時,任務節點等候直到任務被建立。fork(分支)一個fork把一個實施路線分割成多個實施路線.默認分支行為是為每個離開分支轉換建立一個子令牌,在令牌要抵達分支之間建立一個父母-兒女關系名稱類型數量描述name屬性必需節點名稱。async屬性{true|false},默認是false假如設置為true,這個節點將會異步實施。請參考”異步實施”章節。transition元素[0..*]離開轉換。每個離開節點轉換必需有一個不一樣名稱,最多只許可全部離開轉換中一個沒有名稱。第一個轉換被指定為默認轉換,當離開節點而沒有指定轉換時,默認轉換發生。event元素[0..*]支持事件類型:{node-enter|node-leave}。exception-handler元素[0..*]一個異常處理器列表,用于這個步驟節點中委托類所拋出全部異常。timer元素[0..*]指定一個定時器,用來監視節點中一個實施所連續時間。join(聯合)默認聯合(join)假設全部來自同一個父母子令牌聯合,當在上使用fork(分支)這個情形就出現了而且全部令牌分支建立,而且抵達同一個聯合(join)。當全部令牌全部進入聯合時候聯合就結束了,然后聯合將檢驗父母-兒女,當全部弟兄令牌抵達聯合(join),父母令牌將傳輸(唯一)離開轉換,當還有弟兄令牌活動時,聯合行為將作為等候狀態。名稱類型數量描述name屬性必需節點名稱。async屬性{true|false},默認是false假如設置為true,這個節點將會異步實施。transition元素[0..*]離開轉換。每個離開節點轉換必需有一個不一樣名稱,最多只許可全部離開轉換中一個沒有名稱。第一個轉換被指定為默認轉換,當離開節點而沒有指定轉換時,默認轉換發生。event元素[0..*]支持事件類型:{node-enter|node-leave}。exception-handler元素[0..*]一個異常處理器列表,用于這個步驟節點中委托類所拋出全部異常。timer元素[0..*]指定一個定時器,用來監視節點中一個實施所連續時間。對于Join節點,我們知道默認是要等到全部分支全部到了步驟才能往下繼續走,要改變這一情況,我們能夠經過給該節點加Action方法改變該Join節點Discriminator,就能夠使只要有一個分支抵達步驟就能夠繼續實施效果了decision(決議)一個decision用以決定在多個實施路徑中哪個才能夠被實施。假如你是一個程序員,把它能夠了解成switchcase結構即可,一個decision能夠含有很多離開transition。名稱類型數量描述handler元素要么指定“handler”元素,或在轉換上指定條件。一個org.jbpm.jpdl.Def.DecisionHandler實現名稱。transition元素[0..*]離開轉換。決議離開轉換能夠被擴展為擁有一個條件,決議會查找條件計算為true第一個轉換,沒有條件轉換被認為計算為true(為了建模“otherwise”分支)。請參考condition元素。一般節點元素
請參考一般節點元素。
Handler所指定DecisionHandler實現類里decide方法返回一個字符串,表示要實施哪個transitiontransition(轉換)轉換用來指定節點之間連接。transition元素放在node里面,那么這個transition就會從這個節點出離開。名稱類型數量描述name屬性可選轉換名稱。注意,每個節點離開轉換必需有一個不一樣名稱。to屬性必需目標節點分級名稱,表示將要達成那個節點名稱.action|script|create-timer|cancel-timer元素[0..*]發生轉換時將要實施動作。注意,轉換動作無需放入事件(因為只有一個事件)。exception-handler元素[0..*]一個異常處理器列表,用于這個步驟節點中委托類所拋出全部異常。event(事件)JBPM定義了一系列和工作流節點元素相關聯事件,比如,步驟實例運行過程中,能夠觸發節點進入(node-enter)、節點離開(node-leave)、步驟開啟(process-start)、步驟結束(process-end)、任務創建(task-create)、任務分配(task-assign)、任務開啟(task-start)等事件。在步驟定義時,JBPM事件均和action綁定。事件觸發將造成對應actions實施。名稱類型數量描述type屬性必需表示相對于事件要放置元素事件類型。action|script|create-timer|cancel-timer元素[0..*]在這個事件上將要實施動作列表。
action(動作)一個action是一段java代碼。在步驟實施期間在部分事件之上定義,這么會在相關事件觸發時自動在工作流引擎上實施。名稱類型數量描述name屬性必需動作名稱。當動作被指定名稱后,它們能夠在步驟定義中被查出,這對于運行時動作和僅一次申明動作是有用。class屬性或用ref-name,或用expression。實現org.jbpm.graph.def.ActionHandler接口類全名。ref-name屬性或用class。所引用動作名稱。假如指定一個引用動作,則本動作不需要再做處理。expression屬性或指定一個class,或ref-name。一個處理一個方法jPDL表示式。accept-propagated-events屬性可選{yes|no|true|false},默認是yes|true。假如設置為false,則動作僅在本動作元素觸發事件上被實施。更多信息,請參考“第9.5.4事件傳輸”。config-type屬性可選{field|bean|constructor|configuration-property}。指定動作對象將被怎樣創建和本元素內容怎樣象配置信息那樣被動作對象所使用。async屬性{true|false}默認false,這意味著動作將在目前實施線程中被實施。假如設置為true,一個消息將被發送到命令實施器,而且實施器組件將在一個獨立事務中同時實施動作。請參考”異步實施”章節。
{內容}可選action內容能夠被作為你定制動作實現配置信息,這是考慮到可重用委托類創建。相關委托配置更多信息,請參考“第16.2.3節委托配置”。
script(腳本)Script里是動作實施beanshell腳本.名稱類型數量描述name屬性可選腳本動作名稱。當動作被指定名稱后,它們能夠在步驟定義中被查出,這對于運行時動作和僅一次申明動作是有用。Accept-propagated-events屬性可選[0..*]{yes|no|true|false},默認是yes|true。假如設置為false,則動作僅在本動作元素觸發事件上被實施.expression元素[0..1]beanshell腳本。假如你沒有指定variable元素,能夠寫表示式作為腳本元素內容(忽略expression元素標簽)。variable元素[0..*]腳本所需變量。假如沒有指定變量,則目前令牌全部變量將被裝載到腳本,當你想要限制裝載到腳本中變量數量時使用variable。expression(表示式)Expression里可書寫Beanshell腳本名稱類型數量描述
{內容}
一個beanshell腳本。variable(變量)一個是變量是一個key-value對。它和過程實例(一次過程實施)相關聯。Key是java.lang.string,value是任何java類型任何pojo。所以任何是java類型,即使不給jbpm知道也能被應用到變量中。JBPM步驟變量在盡可能模擬java.util.map語義。這一點能夠經過JBPMAPI來了解。也就是說一個變量只能當它被插入時被賦值,任何java類型全部能夠作為變量中value。名稱類型數量描述name屬性必需步驟變量名稱。access屬性可選默認是read,write,用逗號分割一個訪問列表。迄今為止,使用訪問僅為read,write和required。mapped-name屬性可選默認是變量名稱。用來指定變量名稱被映射名稱,mapped-name含義依靠于這個元素所被使用上下文。對于一個腳本,將是一個腳本變量名稱;對于一個任務控制器,將是任務表單參數標簽;對于一個process-state,將是在子步驟中使用變量名稱。handler(句柄)Handler是在定義一個decision時需要為其定義一個DecisionHandler時采取。名稱類型數量描述expression屬性或用class一個jPDL表示式,返回結果被用toString()方法轉換為字符串,結果字符串應該和某個離開轉換匹配。class屬性或用ref-name實現了org.jbpm.graph.node.DecisionHandler接口類全名。Config-type屬性可選{field|bean|constructor|configuration-property}。指定動作對象將被怎樣創建和本元素內容怎樣象配置信息那樣被動作對象所使用。
{內容}可選Action里內容能夠用來幫助結合我們業務來處理我們步驟,同時我們能夠在Action里加上業務處理邏輯,以愈加好利用步驟.
timer(定時器)定時器timer能夠被用于decisionforkjoinnodeprocess-statestatesuper-statetask-node,能夠設置開始時間duedate和頻率repeat,定時器動作能夠是所支持任何動作元素,如action或script。timer還有一個很關鍵屬性cancel-event,這個是timer和task結合時使用,任務定時器cancel-event能夠被定制。默認情況下,當任務被結束時(=完成)任務上定時器將被取消,這是經過在定時器上使用cancel-event屬性,步驟開發者能夠定制諸如task-assign或task-start。cancel-event支持多個事件,經過在屬性中指定一個用逗號分割列表,能夠組合cancel-event類型。名稱類型數量描述name屬性可選定時器名稱。假如沒有指定名稱,則采取外部節點名稱。注意,每個定時器應該有一個唯一名稱。duedate屬性必需所指定定時器創建到定時器實施之間期限(能夠用業務時間來表示)。repeat屬性可選{duration|yes|true}當一個定時器在預期時間實施后,“repeat”可選項指定了在離開節點之前反復實施定時器之間期限。假如指定為true或false,則和duedate相同期限被使用。transition屬性可選當定時器實施、定時器事件觸發后和實施動作時時所使用轉換名稱。cancel-event屬性可選這個屬性只用在任務定時器中,它指定了定時器將被取消事件。默認是task-end事件,不過也能夠被設置為如task-assign或task-start。cancel-event類型也能夠經過指定一個用逗號分割列表被組合。action|script|create-timer|cancel-timer元素[0..*]當定時器被觸發時所應被實施動作。create-timer(創建定時器)Create-timer是定時器創建名稱類型數量描述name屬性可選定時器名稱。這個名稱可被用于用一個cancel-timer動作取消定時器。duedate屬性必需所指定定時器創建到定時器實施之間期限(能夠用業務時間來表示)。請參考“第14.1節期限”中語法。repeat屬性可選{duration|’yes’|’true’}當一個定時器在預期時間實施后,“repeat”可選項指定了在離開節點之前反復實施定時器之間期限。假如指定為true或yese,則和duedate相同期限被使用。請參考“第14.1節期限”語法。transition屬性可選當定時器實施、定時器事件觸發后和實施動作時時(假如要)所獲取轉換名稱。
cancel-timer(取消定時器)Cancel-timer是定時器取消名稱類型數量描述name屬性可選要被取消定時器名稱。task(任務)Task是是步驟定義里一部分,它決定了taskinstance創建和分配名稱類型數量描述name屬性可選任務名稱。命名任能夠被引用而且能夠經過TaskMgmtDefinition被查出。blocking屬性可選{yes|no|true|false}假如blocking設置為true,當任務沒有結束時節點不能被離開(必需要經過taskInstance.end()方法離開節點);假如設置為false(默認),許可用戶經過signal繼續實施和離開節點。默認設置為false,因為通常是由用戶接口來強制阻塞。signalling屬性可選{yes|no|true|false},默認是true。假如設置signalling為false,則任務沒有觸發令牌繼續能力。duedate屬性可選延遲時間(任務實施延遲時間)。請見業務日歷中解釋。swimlane屬性可選引用一個swimlane,假如在任務上指定了一個swimlane,則assignment將被忽略。priority屬性可選{highest,high,normal,low,lowest}之一。作為選擇,能夠為priority指定任何整數,供參考:(highest=1,lowest=5)。assignment元素可選描寫一個委托,該委托將在任務被創建時把任務分配給一個參與者。event元素[0..*]支持事件類型:{task-create|task-start|task-assign|task-end}。為了任務分配,我們尤其為TaskInstance添加了一個非持久化屬性previousActorId。exception
-handler元素[0..*]一個異常處理器列表,用于這個步驟節點中委托類所拋出全部異常。timer元素[0..*]指定一個監視本任務實施期限一個定時器。對于任務定時器特殊是能夠指定cancel-event,cancel-event默認是task-end,不過它能夠被自定義如task-assign或task-start。controller元素[0..1]指定步驟變量怎樣被轉換為任務表單參數。任務表單參數有用戶界面使用,用力向用戶表現一個任務表單。swimlane(泳道)實際應用中,一個人是一個步驟中多個Task參與者(actor)情況是很常見。在jbpm中經過創建一個swimlane而且把swimlane賦給一個task方法來設置目前task參與者(actor)。一個業務步驟中swimlane能夠被看做為一個參與者參與者對象名稱,當然它不一定是固定某個人,它能夠是一個用戶組,一個特定用戶角色等。首次實施抵達一個Task,賦給該Task一個swimlane就會算出參與者(actor)。名稱類型數量描述name屬性必需泳道名稱。泳道能夠被引用而且能夠經過TaskMgmtDefinition被查出。assignment元素[1..1]指定泳道分配。這個分配在本泳道中第一個任務實例被創建時完成。assignment(委派)當步驟實施到某個Task時候,引時步驟引摯要調用對應swimlane或assignment將目前task分配(委派)給某個參與者,外部參與者能夠是一個人也能夠是某個系統等。名稱類型數量描述expression屬性可選因為歷史原因,這個屬性表示式不是jPDL表示式,而是對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)對象將被怎樣創建和本元素內容怎樣象配置信息那樣被分配處理器對象所使用。
{內容}可選assignment元素內容能夠被作為分配處理器(AssignmentHandler)實現配置信息,這是考慮到可重用委托類創建。
controller(控制器)在任務實施時,可能需要讀、寫步驟變量;在任務完成并提交時,可能需要寫步驟變量。為此,jBPM提供了"任務變量"概念。在一些情況下,任務變量和流程變量并非簡單一一對應關系,比如,三個步驟變量代表三個月銷售額,任務變量只需要它們平均值。為實現任務和步驟實例之間信息交流,jBPM設置了任務控制器機制。該機制也采取遞進模式:首先,jBPM提供基礎(默認)任務控制器;假如不敷使用,二次開發人員能夠使用自定義任務控制器。jBPM任務控制器機制在步驟變量和任務變量之間架起了一座橋梁。名稱類型數量描述class屬性可選一個實現org.jbpm.taskmgmt.def.TaskControllerHandler接口類全名稱。Config-type屬性可選{field|bean|constructor|configuration-property}。指定分配處理器對象(assignment-handler-object)對象將被怎樣創建和本元素內容怎樣象配置信息那樣被分配處理器對象所使用。
{內容}
controller元素內容要么是指定任務控制處理器配置信息(假如指定了class屬性),要么必需是一個variable元素列表(假如沒有指定任務控制器)。variable元素[0..*]假如沒有經過class屬性指定任務控制處理器,則controller元素內容必需是變量列表。
process-state子步驟process-state是JBPM提供用來處理子步驟節點,一個process-state只能對應一個子步驟,到底指到哪個子步驟能夠在process-stateaction里指定,當token實施到指定子步驟時,子步驟就已經開啟,不用像開啟主步驟一樣手工開啟子步驟。其它部分處理就和一般步驟沒有區分了。名稱類型數量描述name屬性必需名稱。Sub-process元素只能定義一個子步驟variable變量[0…*]Variable是用來指定怎樣把數據從父步驟copy到子步驟
sub-process子步驟名稱類型數量描述
name屬性必需
子步驟名稱version屬性可選子步驟版本。假如沒有指定該屬性,默認將會采且該子步驟最終一個版本condition條件名稱類型數量描述
{內容}或屬性表示式必需
condition元素內容是一個計算結果為布爾值jPDL表示式。決議采取第一個表示式處理結果為true轉換(按在processdefinition.xml中次序),假如沒有條件處理結果為true,則采取默認離開轉換(也就是第一個)。
exception-handler異常處理Jbpm異常處理機制僅僅集中于java異常,步驟定義本身實施不會造成什么異常,只有在實施委托類時才會造成異常。
在步驟定義(process-definitions)添加exception-handler對整個步驟起作用、節點(nodes)上添加異常只對目前節點起作用(同時假如在process-definitions里也設置了exception-handler那么將不會再實施process-definitions里exception-handler),和轉換(transitions)添加exception-handler只對目前transitions起作用(同時假如在process-definitions里也設置了exception-handler那么將不會再實施process-definitions里exception-handler),能夠指定一個異常處理(exception-handlers)清單,每個異常處理(exception-handler)有一個動作列表,當在委托類中發生異常時,會在步驟元素父層次搜索一個合適異常處理(exception-handler),當它被搜索到,則異常處理(exception-handler)動作將被實施。
注意,Jbpm異常處理機制和java異常處理不完全相同。在java中,一個捕捉異常能夠影響控制流,而在Jbpm中,步驟不會被Jbpm異常處理機制所改變。異常要么被捕捉,要么不捕捉,沒有被捕捉異常被拋向用戶端(比如用戶端調用token.signal()),而被捕捉異常則是經過Jbpmexception-handler,對于被捕捉異常,圖實施仍會繼續,就像沒有異常發生一樣。
在處理異常動作中,能夠使用Token.setNode(Nodenode)把令牌放入圖中任何節點。名稱類型數量描述exception-class屬性可選指定和本異常處理器所匹配javathrowable類,假如這個沒有指定這個屬性,則它匹配全部異常(java.lang.Throwable)。action元素[1..*]當異常被異常處理器捕捉時將要實施動作列表。二XPDL之步驟定義元模型XPDL元模型定義了步驟定義里所包含實體、它們關系和屬性,其中屬性不僅僅為了實施需要,很多屬性是為了統計和監控需要。2.1包(Package)步驟模型包含很多作用域大于步驟定義實體,比如參與者申明、應用程序申明和相關數據元素,它們可能被多個步驟定義所引用。為了避免每個步驟定義全部反復定義這些實體,XPDL引入包概念,包作為步驟定義容器,對步驟定義根據關聯性進行分組。在包上定義實體被其包含步驟定義繼承,同時,包能夠為所屬步驟定義申明一系列通用屬性,比如作者、版本號、狀態等。XPDL里包等價于BPMN里業務步驟圖(BusinessProcessDiagram)。2.2泳道(Swimlanes)泳道被用來對步驟定義和活動進行布局。我們使用泳道在步驟等級上定義參與者信息(部門、企業),在活動等級上定義實施者信息(角色、人員)。我們使用一系列非重合長方形來描述泳道,這些長方形稱為池(Pool),同時,池又被細分為一系列子泳道(Lane)。以下圖2-6所表示:圖2-6泳道一樣在下圖中描述了一個包含貸款應用步驟池。池中沒有道。步驟能夠是可重用子步驟或內嵌子步驟。要注意遷移(次序流)能夠穿越同一個池中道。遷移可能不會穿越池。2.3步驟定義(ProcessDefinition)步驟定義是對步驟建模和描述,為步驟中其它實體提供上下文信息。其屬性包含創建時間、作者、初始化參數、實施優先級、時間約束、仿真信息等。Xpdl2.1文檔包含對步驟集(包)步驟定義。Xml文檔不僅被模型工具、模擬工具和實施工具使用,它一樣為bam報表工具提供了基礎信息,尤其是為OLAP立體報表技術提供了維度和變量信息。在這里我們描述了使用管理工具發送xpdl步驟定義到分析工具并傳達能捕捉實施具體情況日志事件流企業步驟管理系統。分析工具依據步驟定義、參與者和隊列信息來結構數據庫和OLAP立方。分析工具處理事件來更新數據庫中實際和維度上表,而且利用excel和(或)其它擁有步驟和企業智能工具立體處理事件來完成對切片和切塊查看數據交互準備。一個可供選擇數據展示方法顯示了步驟定義視覺環境中選擇數據。這個能夠由歷史展示或動畫實施系統或模擬運行來實現。2.4活動(Activity)活動是步驟中一個步驟,一個基礎活動含有屬性。這些屬性提供了在這一步驟中誰能夠實施這個活動、什么應用或Web服務會被調用、正在工作對象哪些內容被使用了和(或)被改變了等信息。參與者(資源)和應用可能會定義在一個步驟中,或被定義在企業步驟模型整個步驟集中。工作對象內容一樣能夠定義在一個步驟中或整個模型中。活動有部分其它屬性更深入定義了它們特殊角色或它們是怎樣實現一個步驟包含一個或多個活動,活動對應著步驟里一個工作單元。一個經典活動能被人力資源或計算機所實施。XPDL活動粒度比較粗,分為四類,分別對應BPMN里任務、子步驟、網關和事件。以下圖2-7所表示:圖2-7XPDL活動和BPMN映射2.5轉移線(Transition)活動之間經過轉移線連接。轉移線包含3個屬性:源活動、目標活動和條件。轉移線能夠是有條件(設置表示式),也能夠是無條件。XPDL轉移線對應于BPMN里次序流,以下圖2-8所表示:圖2-8XPDL轉移線對應BPMN里次序流2.6參與者申明(ParticipantDeclaration)描述實施步驟和活動資源。資源能夠是單個人、也能夠是角色、部門、還能夠是自動實施機器資源(比如打印機)。2.7應用程序申明(ApplicationDeclaration)活動能夠調用IT系統、接口、Web服務。BPMN使用內置服務任務(ServiceTask)直接代表對應用程序調用。2.8人工產出物(Artifact)為步驟附加額外建模信息,這些信息不屬于基礎步驟實體(活動、轉移線、消息流),它們經過關聯和步驟實體聯絡在一起。在BPMN里,人工交付物包含3種類型,以下圖2-9所表示:圖2-9人工產出物2.9消息流(MessageFlow)消息流用來展示兩個參與者/步驟之間消息流向。在BPMN中,用泳道中池代表兩個參與者/步驟。消息流不能連接同一個池中活動。圖2-10消息流消息流通常由Web服務或消息隊列實現。在例子中我們敘述了不一樣池中活動之間消息流是怎樣流動。這使得我們能夠圖形化展示步驟之間各方面安排。應該注意是消息流不會出現在同一個池中活動之間。換句話說,次序流用來連接同一個池中活動,而消息流用來展示不一樣池中活動之間通信。這個例子中池被畫成水平方向而且擴展到整個頁面。不過,規范中也支持垂直池,并許可限制寬度和高度。這支持了規范中抽象步驟和安排對池使用。2.10關聯(Association)我們使用關聯將信息、人工產出物和步驟實體連接起來,為步驟模型提供更多信息,它不影響步驟實施。以下圖2-11所表示:圖2-11關聯2.11相關數據元素(Relevantdatafield)為步驟定義實施過程中創建或使用到數據,這些數據被活動、應用程序和步驟中定義多種表示式(轉移線條件計算、網關條件計算)所使用。2.12數據類型和表示式(DataTypesandExpressions)定義相關數據元素、系統和環境數據、參與者數據數據類型,這包含了部分標準類型,比如String、int、date等等,也包含了自定義擴展。表示式被用于多種條件計算(轉移線、網關)和給數據元素賦值。2.13系統和環境數據(SystemandEnvironmentalData)由工作流系統和外部環境所維護數據,這些數據被步驟在實施過程中使用。2.14資源倉庫(ResourceRepository)實施活動資源能夠是人、也能夠是角色、部門、程序、還能夠是自動實施機器資源,所以我們使用資源倉庫將步驟所包含到資源管理起來。資源倉庫包含了對組織機構建模支持。2.15廠商/用戶自定義擴展(VendororUserspecificExtensions)工作流系統廠商/用戶能夠針對自己業務需求對步驟元素和屬性進行擴展。2.16步驟交換通常元模型許可工具交換模型。這些工含有:模擬工具監控工具實施工具模型工具庫工具下圖展示了再BPM套件中步驟交換使用。三BPMN2.0一個BPMN2.0XML步驟根是definitions元素。在命名狀態,子元素會包含真正業務步驟定義。每個process子元素能夠擁有一個id和name。BPMN2.0基礎結構:3.1事件和活動和網關一起,事件用來在實際每個業務步驟中。事件讓業務建模工具用很自然方法描述業務步驟,比如“當我接收到用戶訂單,這個步驟就開啟”,“假如兩天內任務沒結束,就終止步驟”或當我收到一封取消郵件,當步驟在運行時,使用子步驟處理郵件。注意經典業務通常使用這種事件驅動方法。大家不會硬編碼次序創建,不過她們傾向于使用在她們環境中發生事情(比如,事件)。在BPMN規范中,描述了很多事件類型,為了覆蓋可能事情,在業務環境中可能出現情況。3.2事件:空開啟事件一個開啟事件說明了步驟開始(或子步驟)。圖形形式,它看起來是一個圓(可能)內部有一個小圖標。圖標指定了事件實際類型會在步驟實例創建時被觸發。空開啟事件畫出來是一個圓,內部沒有圖標,意思是這個觸發器是未知或未指定。jPDL開始活動基礎是一樣語法。步驟實例步驟定義包含一個空開啟事件,能夠使用executionServiceAPI調用創建。一個空開始事件像下面這么定義。id是必填,name是可選。<startEventid="start"name="myStart"/>3.3事件:空結束事件結束事件指定了步驟實例中一個步驟路徑結束。圖形上,它看起來就是一個圓擁有厚邊框(可能)內部有小圖標。圖標指定了結束時候會實施哪種操作。空結束事件畫出來是一個圓,擁有厚邊框,內部沒有圖標,這意味著當步驟抵達事件時,不會拋出任何信號。jPDL中結束事件和空結束事件語義相同。空結束事件能夠像下面一樣定義,id是必填,name是可選。<endEventid="end"name="myEnd"/>下面例子顯示了只使用空開始和結束事件步驟:這個步驟對應可實施XML像這么(忽略申明用definitions根元素)<processid="noneStartEndEvent"name="BPMN2Examplenonestartandendevent"><startEventid="start"/><sequenceFlowid="flow1"name="fromStartToEnd"sourceRef="start"targetRef="end"/><endEventid="end"name="End"/></process>3.4事件:終止結束事件終止和\o"3.8.3.
事件:空結束事件"空結束事件區分是實際中步驟路徑是怎樣處理(或使用BPMN2.0術語叫做token)。終止結束事件會結束整個步驟實例,而空結束事件只會結束目前步驟路徑。她們全部不會拋出任何事情當抵達結束事件時候。一個終止結束事件能夠像下面定義。id是必填,name是可選。<endEventid="terminateEnd"name="myTerminateEnd"><terminateEventDefinition/></endEvent>終止結束事件被描繪成結束事件一樣(圓,厚邊框),內部圖標時一個完整圓。在下面例子中,完成task1會結束步驟實例,當完成task2時只會結束抵達結束事件步驟路徑,只剩下task1打開。3.5次序流次序流是事件,活動和網關之間連線,顯示為一條實線帶有箭頭,在BPMN圖形中(jPDL中等效是transition)。每個次序流全部有一個源頭和一個目標引用,包含了活動,事件或網關id。<sequenceFlowid="myFlow"name="MyFlow"sourceRef="sourceId"targetRef="targetId"/>和jPDL一個關鍵區分是多外向次序流行為。在jPDL中,只有一個轉移會成為外向轉移,除非活動是fork(或自定義活動擁有fork行為)。然而,在BPMN中,多外向次序流默認行為是切分進入token(jBPM中術語叫做execution)分成token集合,每個次序流一個。在下面情況中,在完成第一個任務,就會激活三個任務。為了避免使用一個次序流,必需添加condition條件到次序流中。在運行時,只有當condition條件結果為true,次序流才會被實施。活動(比如用戶任務)和網關(比如唯一網關)能夠用戶默認次序流。默認次序流只會在活動或網關全部其它外向次序流condition條件為false時才會使用。默認次序流圖形像是次序流多了一個斜線標識。默認次序流經過指定活動或網關'default'屬性來使用。也要注意,默認次序流上表示式會被忽略。3.6網關BPMN中網關是用來控制步驟中流向。更確切是,當一個token(BPMN2.0中execution概念注解)抵達一個網關,它會依據網關類型進行合并或切分。網關描繪成一個菱形,使用一個內部圖標來指定類型唯一,廣泛,其它)。全部網關類型,全部能夠設置gatewayDirection。下面值能夠使用:unspecificed(默認):網關可能擁有多個進入和外出次序流。mixed:網關必需擁有多個進入和外出次序流。converging:網關必需擁有多個進入次序流,不過只能有一個外出次序流。diverging:網關必需擁有一個進入次序流,和多個外出次序流。3.7網關:唯一網關唯一網關表示了一個步驟中唯一決議。會有一個外向次序流被使用,依據定義在次序流中條件。對應jPDL結構,相同語法是decision活動。唯一網關完全技術名稱是'基于數據唯一網關',不過也常常稱為XOR網關。XOR網關被描繪為一個菱形,內部有一個'X',一個空菱形,沒有網關也象征著唯一網關。下面圖形顯示了唯一網關使用方法:依據amount變量值,會選擇唯一網關外向三個外向次序流中一個。3.8網關:并行網關并行網關用來切分或同時相關進入或外出次序流。并行網關擁有一個進入次序流和多于一個外出次序流叫做'并行切分或'AND-split'。全部外出次序流全部會被并行使用。注意:像規范中定義那樣,外出次序流中條件全部會被忽略。并行網關擁有多個進入次序流和一個外出次序流叫做'并行歸并'或AND-join。全部進入次序流需要抵達這個并行歸并,在外向次序流使用之前。下面圖形顯示了一個并行網關能夠怎樣使用。在步驟開啟后,“prepareshipment”和“billcustomer”用戶任務全部會被激活。并行網關被描繪為一個菱形,內部圖標是一個十字,對切分和歸并行為全部是一樣。3.9任務一個任務表示工作需要被外部實體完成,比如人工或自動服務。關鍵是注意BPMN語法'task'和jPDL語法區分。在jPDL中,'task'概念總是用在人工做部分事情環境。步驟引擎碰到jPDL中task,它會創建一個task,交給部分人任務列表,然后它會進入等候狀態。然而在BPMN2.0中,這里有很多任務類型,部分表示等候狀態(比如,UserTask部分表示自動活動(比如,ServiceTask。所以小心不要混淆了任務概念,在切換語言時候。任務被描繪成一個圓角矩形,通常內部包含文字。任務類型(用戶任務,服務任務,腳本任務,等等)顯示在矩形左上角,用小圖標區分。依據任務類型,引擎會實施不一樣功效。3.10任務:人工任務usertask是經典'人工任務',實際中每個workflow或BPMN軟件中全部能夠找到。當步驟實施抵達這么一個usertask時,一個新人工任務就會被創建,交給用戶任務列表和\o"3.8.13.
任務:手工任務"manualtask關鍵區分是(也和人工工作對應)是步驟引擎了解任務。引擎能夠跟蹤競爭,分配,時間,其它,這些不是manualtask情況。usertask描繪為一個圓角矩形,在左上角是一個小用戶圖標。usertask被定義為下面BPMN2.0XML:<userTaskid="myTask"name="Mytask"/>依據規范,能夠使用多個實現(WebService,WS-humantask,等等)。經過使用implementation屬性。目前,只有標準jBPM任務機制才能夠用,所以這里(還)沒有定義'implementation'屬性功效。BPMN2.0規范包含了部分方法把任務分配給用戶、組、角色等等。目前BPMN2.0jBPM實現許可使用一個resourceAssignmentExpression來分配任務,結合humanPerformerorPotentialOwner結構。這部分期望在未來版本里能夠深入演化。potentialOwner用來在你期望確定用戶、組、角色時候。這是一個task候選人。也要注意,需要在步驟外部定義一個資源,這么任務分配器能夠引用到這個資源。實際上,任何活動全部能夠引用一個或多個資源元素。現在,只需要定義這個資源就能夠了(因為它是規范中一個必需元素),不過在以后公布中會進行加強(比如,資源能夠擁有運行時參數)。3.11任務:Java服務任務ServiceTask是一個自動活動,它會調用部分服務,比如webservice,javaservice等等。目前jBPM引擎只支持調用javaservice,不過webservice調用已經在未來版本中做了計劃。定義一個服務任務需要好幾行XML(這里就能夠看到BPEL影響力)。當然,在很快未來,我們期望有工具能夠把這部分大量簡化。一個服務任務需要以下定義:<serviceTaskid="MyServiceTask"name="Myservicetask"implementation="Other"operationRef="myOperation"/>服務任務需要一個必填id和一個可選name。implementation元素是用來表示調用服務類型。可選值是WebService,Other或Unspecified。因為我們只實現了Java調用,現在只能選擇Other。服務任務將調用一個操作,operationid會在operationRef屬性中引用。這么一個操作就是下面實例interface一部分。每個操作全部最少有一個輸入信息,而且最多有一個輸出信息。<interfaceid="myInterface"name="org.jbpm.MyJavaServicek"><operationid="myOperation2"name="myMethod"><inMessageRef>inputMessage</inMessageRef><outMessageRef>outputMessage</outMessageRef></bpmn:operation></interface>對于java服務,接口名稱用來指定java類全類名。操作名稱用來指定將要調用方法名。輸入/輸出信息表示著java方法參數/返回值,定義以下所表示:<messageid="inputMessage"name="inputmessage"structureRef="myItemDefinition1"/>BPMN中很多元素叫做'item感知',包含這個消息結構。這意味著它們會在步驟實施過程中保留或讀取item。負責這些元素數據結構需要使用ItemDefinition。在這個環境下,消息指定了它數據結構,經過引用structureRef屬性中定義ItemDefinition。3.12任務:腳本服務任務本任務時一個自動活動,當抵達這個任務時候步驟引擎會實施一個腳本。腳本任務使用方法以下:<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>腳本任務,除了必填id和可選name之外,還許可指定scriptLanguage和script。因為我們使用了JSR-223(java平臺腳本語言),修改腳本語言就需要:把scriptLanguage屬性修改為JSR-223兼容名稱在classpath下添加JSR規范ScriptEngine實現上面XML對應圖形以下所表示(添加了空開始和結束事件)。3.13任務:手工任務手工任務時一個由外部人員實施任務,不過沒有指定是一個BPM系統或是一個服務會被調用。在真實世界里,有很多例子:安裝一個電話系統,使用定時郵件發送一封信,用電話聯絡用戶,等等。<manualTaskid="myManualTask"name="Callcustomer"/>手工任務目標更像文檔/建模提醒,因為它對步驟引擎運行沒有任何意義,所以,當步驟引擎碰到一個手工任務時會簡單略過。3.14任務:java接收任務receivetask是一個任務會等到外部消息到來。除了廣泛使用webservice用例,規范在其它環境中使用也是一樣。webservice用例還沒有實現,不過receivetask已經能夠在java環境中使用了。receivetask顯示為一個圓角矩形(和task圖形一樣)在左上角有一個小信封圖標。在java環境中,receivetask沒有其它屬性,除了id和name(可選),行為就像是一個等候狀態。為了在你業務步驟中使用等候狀態,只需要加入以下幾行:<receiveTaskid="receiveTask"name="wait"/>步驟實施會在這么一個receivetask中等候。步驟會使用熟悉jBPMsignalmethods來繼續實施。注意,這些可能在未來改變,因為'signal'在BPMN2.0中擁有完全不一樣含義。Executionexecution=processInstance.findActiveExecutionIn("receiveTask");executionService.signalExecutionById(execution.getId());四BPEL4.1介紹業務步驟實施語言(BusinessProcessExecutionLanguage,BPEL,發音為'bipple'或'bee-pell'),也叫業務過程實施語言,是一個基于XML,用來描寫業務步驟編程語言,被描寫業務步驟每個單一步驟則由Web服務來實現。BPEL目標是要實現業務步驟定義格式標準化,使得企業之間能夠經過Web服務無縫進行交互。BPEL是基于Web服務,而且依靠于WSDL。一個BPEL步驟能夠公布為一個WSDL定義服務,并像其它Web服務一樣被調用。而且,BPEL期望一個Web服務合成所包含全部外部Web服務,全部是用WSDL服務契約定義,這令BPEL步驟能夠調用其它BPEL步驟,甚至能夠遞歸調用自己。值得注意是BPEL不直接支持人機對話,BPEL所描寫過程僅和Web服務通信,而這些Web服務卻能夠提供和用戶信息交換,但它們不是用戶本身。用BPEL編寫步驟能夠在任何支持BEPL規范平臺或產品上運行。4.2BPEL支持兩類不一樣類型業務步驟可實施步驟:定義了要實施各項具體任務,和完成業務步驟所需要調用各個服務,它們遵照編排規范,能夠被一個編排引擎所實施。(orchestration)
抽象步驟:具體說明了雙方或多方公共消息交換,但沒有定義步驟流內部行為細節,不可實施。(choreography)
BPEL現已成為被業界廣泛認可和接收進行Web服務編排事實標準。4.3BPEL和其它Web服務技術關系BPEL是建立在Webservices技術之上,所以和WSDL、XML、SOAP和UDDI等標準親密相關。BPEL步驟模型是在WSDL定義服務模型之上一層。一個業務步驟定義了一個步驟實例和它伙伴之間交互。為了定義一個業務步驟,BPEL引入了部分新XML元素,比如Partners:業務事務中參與者(actors)Containers:組成業務步驟中某一狀態一組消息Operations:所需Web服務類型Porttypes:operations所要求相關Web服務關系4.4BPEL包含范圍處理活動次序,尤其是網絡服務互操作。消息和處理實例之間關系。在發生錯誤和例外情況下恢復行為處理角色之間基于網絡服務關系雙面性。4.5BPEL語言支持兩類任務BPEL支持兩類任務或說是行為:基礎任務(basictasks)和結構化任務(structuredtasks)。基礎任務是指由業務步驟一個基礎步驟,任務內不會嵌套其它任務;而結構化任務從外部看是一個步驟而從內部看卻有若干個步驟。基礎任務包含:Invoke任務——許可業務步驟在某一個Web服務提供portType上調用單向(one-way)或請求/響應(request/respose)操作。Receive任務——許可業務步驟停下來等候消息到來。Reply任務——許可業務步驟對收到消息發送一個回復消息。Wait任務——通知步驟等候一段時間。Assign任務——把數據從一處復制到另一處。Throw任務——表明發生了某個錯誤。Terminate任務——終止整個編排實例。結構化任務包含:Sequence任務——定義一個有序任務序列Switch任務——依據條件選擇某一分支Pick任務——停下并等候某一合適消息到來,或等到超時繼續前進。只
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 應完善日常管理制度
- 應急庫防火管理制度
- 彩鋼板廠房管理制度
- 微信群規定管理制度
- 心理沙盤室管理制度
- 快遞件投送管理制度
- 總工辦工作管理制度
- 總部精細化管理制度
- 慕凱莎公司管理制度
- 成品車庫存管理制度
- 2025年中考英語考前沖刺卷(北京卷)(解析版)
- 2025年物業安全管理專家考試試題及答案
- 2025年醫保知識考試題庫及答案(醫保政策宣傳與解讀)綜合測試
- “臨床營養科建設與管理指南”實施細則-I級標準化臨床營養科建設示范基地
- 結直腸癌分子病理檢測臨床實踐指南(2025版)解讀
- 安全生產管理的技術規范與操作要求試題及答案
- GB/T 34110-2025信息與文獻文件(檔案)管理核心概念與術語
- 年地理中考熱點6銀發經濟課件
- 中考生物復習專題訓練:傳染病及其預防(含真題及答案)
- 云南省昆明市盤龍區2023-2024學年四年級下學期語文期末質量檢測卷(含答案)
- Unit 7 Outdoor fun 單元教案 2024-2025學年譯林版(2024)七年級英語下冊
評論
0/150
提交評論