• 沒有找到結果。

第五章 實作範例

5.2 貸款流程

以下重新實作 BPEL4WS 貸款的例子[8]。如圖表 18 所示,當貸款的要求進 入流程系統後,同時需要輸入使用者的姓名和貸款金額。當金額大於 10000 時會 交由 Loan Approver 決定是否核可。如果金額小於 10000 則會交由 Loan Assessor 先作風險評估,評估結果風險高則交回 Loan Approver 處理,風險低則直接核可 貸款申請。

圖表 18、BPEL4WS 貸款流程圖[8]

首先輸入貸款的資訊,如表格 5 所示:包括 first name、 name、 amount。

我們使用 pattern binding 和 Task 輸入輸出,來完成資料的儲存與資料的流動。由 於輸入的格式和“比較 amount 大小”的 Task 不相同,所以我們使用

“util/bindTranslator”這個工作定義來幫我們轉換格示。將輸入的變數與實際的值 binding 起來,並再輸出時使用 binding 的值轉換成需要的格式輸出。下一個比較 大小的工作則使用“util/math”這個工作定義,當<compare>裡的“value”大於“to”時 會回傳 value=“1”,反之則回傳“0”。

<processdef name="loan" package="test">

<in><credit firstname="@fn" name="@nmae" amount="@amount"/></in>

<out><approval accept="@accept"/></out>

<body>

<task def="util/bindTranslator">

<in><credit firstname="@fn" name="@nmae"

amount="@amount"/></in>

<out><compare value="@amount" to="10000"></out>

</task>

<task def="util/math">

<in><compare value="@amount" to="10000"></in>

<out><result value="@compareResult"></out>

</task>

表格 5、貸款流程(1)

比較完成後,我們使用 Switch 來比較輸出的結果與決定執行的部分。如果 結果是“0”,則交由 Loan Assessor。我們將風險評估的部份交由內部組織的人員 loan-assessor 群組處理。當風險評估的結果是"low"的時候,則直接接受使用者的 申請。當結果是"high"的時候,則回到一般的申請流程,在這裡使用<next>來指 定下一個執行的部分。在 BioOrch 可以在各個 Activity 中使用<next>來指定下一 個要執行的 Activity 或 Task,讓使用者能更有彈性的定義自己的流程。

<switch>

<case><if><result value="0"></if>

<task def="loan/riskAssessment">

<in><credit firstname="@fn" name="@nmae" amount="@amount"/></in>

<out><result risk="@risk"></out>

<user group="loan-assessor"/>

</task>

<switch>

<case><if><result risk="low"></if>

<task def="loan/riskAssessment">

<in><result risk="low"></in>

<out><approval accept="yes"/></out>

</task>

<next name="end"/>

</case>

<default>

<next name="loanApproval"/>

</default>

</switch>

</case>

<case>

<if><result value="1"></if>

<next name="loanApproval"/>

</case>

</switch>

表格 6、貸款流程(2)

貸款核准的部分則是交由另一個組織的流程處理,有別於原來的例子,在核 准流程中加入"貸款者在該組織存款”的加權,使的貸款的核准與否和其存款有 關。由貸款者的存款金額應該是組織內私有的資訊,所以我們將這個工作交回原 組織執行。在原本的流程中定義了要使用“test/LoanApprover”這個流程,並將

<paramTask>填入,指定由 bankSavingsGroup 來計算加權的部份。當對方流程執 行到存款加權的部份,則會將工作交回執行。BioOrch 使用了<paramTask>定義

流程間互動的機制,而且因為 Task 是可以傳遞的執行單元,使的跨組織的合作 能更緊密。

<activity name="loanApproval">

<task def="loan/apporver">

<in><credit firstname="@fn" name="@nmae"

amount="@amount"/></in>

<out><approval accept="@accept"/></out>

<service type="loan/approver">

<process name="test/LoanApprover">

<paramTask name="bankSavingsWeight"

def="loan/bankSavingsWeight">

<user group="bankSavingsGroup"/>

</paramTask >

<process>

</task>

</activity>

<activity name="end"/>

</body>

</processdef>

表格 7、貸款流程(3)

以下是 test/LoanApprover 流程定義,總共有三個步驟 : (1)初步加權 (2)銀行 存款加權 (3) 核准結果。並在這個流程定義值中指定了需要輸入的<paramTask>

- “bankSavingsWeight”,在這裡只定義了輸出輸入的格式,其他的定義則需要由 要求者輸入。當要求者起始流程並填入<paramTask>時流程會將填入的部分紀錄 下來,直到執行到引用<paramTask>部分,則會將此 Task 實體化並填入上一個工 作的輸出,傳回要求者執行。當要求者完成後會回傳執行完的 Task,流程會將 此 Task 的輸出當成下一個 Task 的輸入,並繼續流程的運行。

<processdef name="LoanApprover" package="test">

<in><credit firstname="@fn" name="@nmae" amount="@amount"/></in>

<out><approval accept="@accept"/></out>

<paramsTask name="bankSavingsWeight">

<in><weight value="@initWeight"><in>

<out><weight value="@newWeight"></out>

</pramsTask>

<body>

<task def="loan/weighter">

<in><credit firstname="@fn" name="@nmae"

amount="@amount"/></in>

<out><weight value="@initWeight"><out>

</task>

<paramsTask name="bankSavingsWeight"/>

<task def="loan/approver">

<in><weight value="@newWeight"></in>

<out><approval accept="@accept"/></out>

</task>

</body>

</processdef>

表格 8、貸款核可流程

以 BioOrch 來重新實作 BPEL4WS 的貸款流程,能更為明確的達到組織之間 資訊隱藏與資源的分享,並且能將工作分配給組織內部的人員,使的內部人員能 直接參於流程的執行與接受流程的管理。最後列出 BPEL4WS 和 BioOrch 的比較:

y 資料的處理。BPEL4WS 可以定義傳輸<message>的格式,<message>會 被放到<container>裡,並使用<assign>來做資料的操作與搬移,而 BioOrch 則是使用輸入輸出的 Xml Pattern 來定義資料傳輸的格式,並用 變數 Binding 來保存重要的資料,一個工作的輸出是下一個工作的輸 入,透過輸入輸出的傳遞讓資料流動。

y 跨組織的合作。BPEL4WS 將不同組織之間的流程都當成一般的 Web Service 處理,所以對流程的合作並沒有特別的定義。而 BioOrch 則是

在流程定義中使用<paramTask>定義要交回執行的工作內容。使的 BioOrch 能像使用 Web Service 一樣使用其他組織的流程,還可以在流 程進行間交互影響與分享資源。

y 組織人員需求。BPEL4WS 並沒有將人員的概念加入流程之中,而 BioOrch 則可以在流程中指定參與者執行工作,包括群組和使用者。使 的參與者也能透過流程管理系統管理

y 可延伸的流程定義。BioOrch 允許使用者發展自己的工作定義,使的系 統能讓使用者依照實際的需求作更改,提供使用者更大的彈性。

第六章 相關研究

本章將介紹一些流程管理的相關系統與標準,包含工作流程管理聯盟的 XPDL、myGrid 的流程系統 Taverna、contract-base 的 CrossFlow project 與 OpenSource 的 jBpm project。

工作流程管理聯盟(WFMC)[20],目的在透過專有名詞的界定,建立與其他 工作流程的溝通橋樑,來推廣與發展工作流程,以因應企業對於流程自動化的需 求且解決工作流程之標準化問題。WPDL[21]是由 WFMC 所提出來的流程定義語 言,其目的在定義流程管理系統間資料的交換,包含許多 Activity,每一個 Activity 由 Transitions 連結起來,Transitions 可以使用 split 和 join,另外還定義了許多資 料的格式在流程進行中使用。雖然他並沒有特別定義組織之間流程互動的機制,

但是許多 WPDL 的概念也同樣適用於跨組織流程系統。

Taverna[11]也是一個生物資訊分析流程系統,是 MyGrid Project 的一個部 分,目的是提供生物科學研究人員一個流程語言和相關工具,以 Workflow 有效 的完成實驗步驟[14]。其自定發展的語言 XScufl,支援的操作元素包含:WSDL 模式的 Web Service、SoapLab、Talisman 和其他 scufl 流程等。透過資料流的概 念,輸入資料會從 source 透過 link 流向不同的 processor,最後流到 sink 停止,

將使用到的操作元素都當成 processor 定義在語言裡,而流程需要的參數在一開 始的時後就必須要填滿。Taverna 還提供了一個工作環境,將 workflow 需要的工 具都整合成一個介面,包括 Advance model explorer、Available Services List、

Workflow diagram。跟 BioOrch 不同的是,他並不支援跨組織的合作,它的目的 是針對生物科學研究人員使用的,主要專注在整合 Web Service 完成一項特定的 目的,而過程中並沒有參與者的概念在流程中。而 BioOrch 可以在流程中指定某 些事情要由相關人員完成

以 Contract-Base 為導向的 CrossFlow[32],目的是要提供動態的跨組織的工 作流程支援。他是以實際需求發展的系統,就如現實生活中的情況一樣,企業之 間的合作是透過合約來規範,所有的需求與資源都明訂在合約裡。

圖表 19、ClossFlow 示意圖[36]

而為了要動態的促使組織之間的合作,所以使用了 Trader 來尋找或提供服務。

依照發布在市場裡的消息,Trader 會去幫彼此配對,如果吻合了便會通知雙方進 行 合 作 。 透 過 內 部 的 溝 通 機 制 如 Cooperation Support Services (CSS) 、 Proxy-Gateways(PG)、Coordinators (Coord),來完成資源分享與監控管理。

圖表 20、CrossFlow 執行架構圖[36]

不同於 CrossFlow 將合作部份與工作流程獨立。BioOrch 本身即支援跨組織的合 作,從資料的互動與資源的共享,透過工作的輸入輸出與 Task Processor 的概念,

使的跨組織的合作能輕易的達成,不需要透過複雜的定義就能保有了公開與私有 的彈性。

Opensource 的 jBpm[33]提供了管理者和開發者之間的共同語言,jBpm Process Definition Language (jPdl),一種以 UML 為延伸的語言。再 jPdl 裡大部分 的關鍵字都是延續 UML 的使用方式,並且在定義語言時能以圖形流程的思考方 式制定。

圖表 21、jBpm 流程語言元素組成圖[33]

另外他還包含了webinterface.xml來定義外觀該如何顯示。它的整個系統是架構在 J2EE上(jBpm2嘗試將整個架構改以J2SE),包含前端網頁jsp的部分、中間的流程 邏輯EJB、和後端的資料庫。jBpm與其他語言最大的不同就是能延伸定義語言,

由使用者自行擴充需要的定義。幾乎所有流程中主要部分都可以延伸擴充。 我 們的系統延續了jBpm的延伸性,允許使用者擴充自己的流程語言,並加到流程 中。與其不同的是我們將工作變成是可延伸的,透過發展各種Type的工作定義,

讓工作的內容能視使用者的需要調整。

相關文件