WS BPEL語言基礎(上)

2021-04-12 20:54:50 字數 4345 閱讀 6456

16.1. ws-bpel語言基礎

在我們能夠設計編排層之前,我們需要很好地理解如何正式地表達流程的操作特徵。本書使用ws-bpel語言來演示流程邏輯如何能夠被作為具體定義的一部分來描述(圖16.1),從而能夠通過相適應的編排引擎來實現和執行。

圖16.1. 常見的ws-bpel流程定義結構

雖然你很可能會使用流程建模工具並因此不需要從草稿開始編寫你的流程,ws-bpel元素的知識仍舊是有用的和必需的。ws-bpel建模工具經常會涉及到這些元素和結構,而且你可能深入到它們生成的**中做進一步的精化。

注意如果你已經輕鬆了解了ws-bpel語言,請向前跳到面向服務業務流程設計(循序漸進的流程)章節。

16.1.1. bpel4ws與ws-bpel簡史

在我們進入ws-bpel語言的細節之前,讓我們簡要討論一下這個規範是如何形成的。web服務業務流程執行語言(bpel4ws)最初在2023年7月被構思和發布,伴以bpel4ws 1.0規範,這是ibm、microsoft和bea合作的成果。這個文件提議了從先前的各種語言中得到靈感的編排語言,例如ibm的web服務流程語言(wsfl) 與microsoft的xlang規範。

技術委員會正在下乙個版本bpel4ws的最終發布流程中。它已經宣布了語言本身被重新命名為web服務業務流程執行語言,或者是ws-bpel(並被賦予2.0版本號)。ws-bpel所規劃的變更目前已經對外公布,並可在oasis的web**www.oasis-open.org上獲得。

在本節的元素描述中加入了注釋,以利於指出bpel4ws與ws-bpel之間的語法變動。為了簡單起見,在本書中我們提到的業務流程執行語言就是指ws-bpel。

16.1.2. 先決條件

現在是學習ws-bpel語言的時候了。如果你還沒有準備好,推薦你在繼續本節之前閱讀第6章。第6章中涉及了編排、協調、原子事務和業務活動等相關概念,因而在此就不再重複。本章同時也假設你已經通讀了第13章中提供的wsdl教程。

16.1.3. process元素

讓我們從ws-bpel流程定義的根元素開始。它使用name 屬性來給乙個名稱賦值,並用於建立流程定義相關的命名空間。

示例16.1. process 定義框架

process 結構包含一系列常見的子元素,在下列章節中說明。

16.1.4. partnerlinks與partnerlink元素

partnerlink 元素建立了埠型別的服務(夥伴),將參與業務流程的執行過程。夥伴服務能夠擔當流程的客戶端,負責呼叫流程服務。作為替代,夥伴服務也能夠被流程服務自身所呼叫。

partnerlink 元素的內容代表了兩個合作夥伴之間的通訊交換---流程服務是乙個合作夥伴其他服務是另乙個合作夥伴。依據通訊的種類,流程服務的作用將會變化。例如,被外部服務所呼叫的流程服務可能擔當 「工單提交流程(timesheetsubmissionprocess)」的角色。然而,當這個同樣的流程服務呼叫具有發票校驗的不同服務的時候,它擔當了不同的角色,或許是「發票客戶(invoiceclient)」。partnerlink 元素因而包含myrole 與 partnerrole 屬性,分別設立了流程服務和夥伴服務服務提供者的角色。

為簡單起見,myrole 屬性用於流程服務被夥伴客戶端服務所呼叫時,因為在這個情況下流程服務擔當了服務提供者。partnerrole 屬性識別了流程服務所呼叫的夥伴服務(使夥伴服務成為服務提供者)。

注意當期望的流程服務在相同的夥伴服務中擔當服務請求者和服務提供者的時候,myrole 與 partnerrole 屬性都能夠被相同的partnerlink元素所使用。例如,在流程和夥伴服務的非同步通訊過程中,在夥伴服務**期間 myrole 的設定顯示出流程服務的角色。

示例16.2. partnerlinks 結構包含乙個 partnerlink 元素,在該元素內流程服務被乙個外部客戶端夥伴所呼叫,並且四個partnerlink 元素確定了被流程服務所呼叫的夥伴服務

partnerlinktype=「tns:timesheetsubmissiontype」

myrole=「timesheetsubmissionserviceprovider」/>

partnerlinktype=「inv:invoicetype」

partnerrole=「invoiceserviceprovider」/>

partnerlinktype=「tst:timesheettype」

partnerrole=「timesheetserviceprovider」/>

partnerlinktype=「emp:employeetype」

partnerrole=「employeeserviceprovider」/>

partnerlinktype=「not:notificationtype」

partnerrole=「notificationserviceprovider」/>

你會在示例16.2中注意到,每個partnerlink 元素同樣也包含了partnerlinktype 屬性。這涉及到partnerlinktype 結構,在下面說明。

16.1.5. partnerlinktype元素

對於包含在流程中的每個夥伴服務,partnerlinktype 元素在流程定義中確定了被partnerlink 元素引用的wsdl porttype 元素。因此,這些結構典型地都直接嵌入到每個夥伴服務的wsdl文件中(包括流程服務)。

正如 partnerlink myrole 與 partnerrole 屬性所定義的那樣,partnerlinktype 結構為每個服務可以擔當的角色包含乙個 role 元素。其結果是, partnerlinktype 將具有乙個或兩個 role 子元素。

示例16.3. wsdl 定義 結構包含 partnerlinktype 結構

注意多個 partnerlink 元素可以引用相同的partnerlinktype。這當流程服務與多個夥伴服務具有相同關係的時候十分有用。所有的夥伴服務因而能夠使用相同的流程服務的porttype 元素。

注意在2.0版本的ws-bpel規範中,提議了porttype 元素的變更以便作為role元素的乙個屬性存在。

16.1.6. variables元素

ws-bpel 流程服務通常使用variables 結構來儲存與即時工作流邏輯關聯的狀態資訊。整個訊息和資料集合被格式化為xsd schema 型別,能夠在處理過程中被置入變數並在以後獲取。資料的型別能夠被賦予 variable 元素,它需要用下面三個屬性之一來預定義: messagetype, element,或 type.

messagetype 屬性允許變數包含整個wsdl定義的訊息,而 element 屬性完全引用了xsd元素結構。type 屬性能夠用於僅代表xsd ******type,如 string 或 integer。

示例16.4. variables 結構僅包含一些後續被工單提交流程所使用的 variable 子元素

messagetype=「bpl:receivesubmitmessage」/>

messagetype=「emp:getweeklyhoursrequestmessage」/>

messagetype=「emp:getweeklyhoursresponsemessage」/>

messagetype=「emp:updatehistoryrequestmessage」/>

messagetype=「emp:updatehistoryresponsemessage」/>

典型地來講,具有 messagetype 屬性的變數是為流程定義所處理的每個輸入和輸出訊息定義的。這個屬性的值是來自於夥伴流程定義的訊息名稱。

演算法基礎(上)

演算法 algorithm 是指解題方 而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制,簡單來說就是解決問題的步驟 演算法特徵 有窮性 確切性 輸入項 輸出項 可行性特徵 含義有窮性 演算法在執行有限個步驟之後終止 確切性演算法的每一步必須有確切的定義 輸入...

第3章 語言基礎(上)

目錄嚴格來講,函式也是物件,不代表一種資料型別,但函式也有自己特殊的屬性,所以使用typeof校驗時,函式返回function以作區分 資料型別 轉換為true的值 轉換為false的值 boolean true false string1 非空字串 空字串 number 非零數值 包括無窮值 0 ...

軟體測試基礎 上

1 軟體的生命週期 需求 設計 編碼 測試 維護 公升級 廢棄 2 軟體測試的流程 需求分析 需求評審 測試計畫 測試用例 用例評審 搭建測試環境 測試執行 回歸測試 測試報告 3 軟體測試的經典定義 在規定的條件下對程式進行操作,以發現錯誤,對軟體的質量進行評估 4 軟體測試的範圍 是對軟體形成中...