Tempo如何創建和完成一個任務
1. 創建和完成一個任務的序列圖
圖 1 創建和完成任務序列圖
上圖中的縮寫詞意義:
1) UBP:User Business Process。它就是創建該任務的流程。一般情況下是一個BPEL流程,但是事實上它可以是任何形式的應用程序。它發起一個Web Service調用來創建一個任務,並且提供一個Web Service操作來完成該任務。
2) FDS:Form Dispatcher Service。它就像一個UBP和TMP之間的代理器。
3) TMP:Task Manager Process。BPEL流程負責管理任務的生存週期。它在接受來自FDS的createTaskRequest流程時被初始化。
4) TMS:Task Management Service。這是一個提供工作流動作,持久化任務到數據庫還有處理安全事務的Web服務。
5) UI-FW:UI Framework。顯示任務列表和轉發表單的管理到表單管理器(XFM)。
6) XFM:XForms Manager。這是一個表單管理器的實現,XForms forms。
7) WDS:Workflow Deployment Service。管理表單的存儲和訪問。
注意:創建和完成一個任務是完成分開的。任務的ID被用來將createTaskResponse消息和notifyTaskCompletionRequest消息連接起來。這個ID是由TMP產生的。
2. 創建一個任務
創建任務是由對於FDS的一個Web服務調用啓動的。接着FDS將這個請求轉發給TMP,接下來TMP通過調用TMS來創建任務。
FDS是爲了將“任何流程”都轉化爲“一個TMP”的關係而存在的,這一步是無法在BPEL中完成的。從TMP的角度來看,createTaskRequest的消息只能由一個特別定義的partnerLink發出。每一個不同的UBP就是一個不同的parterLink。爲了解決這個問題,FDS設計爲一個servlet可以處理any-to-one的關係,它通過接收所有發往/fds/workflow的createTaskRequest請求消息,並且動態的將命名空間轉變成TMP所期望的一樣,接下來將這些請求轉發到TMP。
當TMP返回createTaskResponse消息時,它同樣發送到/fds/workflow,當然會被FDS所截獲,接着FDS改變它的命名空間到該請求的最初模樣。命名空間可以在createTaskResponse消息中找到,它是由先前的createTaskRequest中映射過來的。這就是爲什麼在UBP中創建一個任務時必須做命名空間映射的原因。這個命名空間可以通過createTaskResponse消息傳回到FDS中,因此FDS纔可以創建這樣的消息,這個消息是UBP實例所一直等待的。
3. 完成一個任務
當一個用戶登錄系統,或者刷新了任務列表,這時UI-FW將會向TMS發送一個調用來取得最新的任務列表。當用戶點擊一個任務,這個請求被轉發到相應的表單管理器上。目前,UI-FW還只適用於XFM,但是這個可以擴展成爲根據一個任務的屬性動態選擇一個表單管理器。接下來,XFM調用TMS來獲得所有任務細節。它同時還調用WDS來取得實際的表單。基於這些所有信息,XFM生成一個表單,包括有它所需的輸入數據,還有讓用戶完成任務的按鈕或者任何其他的工作流動作XFM所支持的。
當用戶點擊完成按鈕,XFM調用TMP去完成該任務。注意:在這裏FDS不需要被調用,這個調用根據任務ID來進行關聯。
接着,TMP通過調用TMS來改變任務的輸出以及它的狀態。
接下來,TMP通過FDS將任務輸出轉發到UBP。任務ID在這裏做完任務的關聯標識。
最終,TMP在接收到UBP的迴應之後,向XFM發送結果。