業(yè)務流程語言BPEL編程思想及架構_第1頁
業(yè)務流程語言BPEL編程思想及架構_第2頁
業(yè)務流程語言BPEL編程思想及架構_第3頁
業(yè)務流程語言BPEL編程思想及架構_第4頁
業(yè)務流程語言BPEL編程思想及架構_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

國信朗訊科技網(wǎng)絡技術有限公司國信朗訊科技網(wǎng)絡技術有限公司 業(yè)務流程語言業(yè)務流程語言 BPEL 編程思想及架構編程思想及架構 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 2 頁 修訂歷史記錄修訂歷史記錄 1 概述概述 4 2 業(yè)務流程的慨念及業(yè)務流程的慨念及 BPEL 簡史簡史 4 2 1什么是業(yè)務流程 4 2 2BPEL 簡史 5 3 BPEL 的基本特性的基本特性 6 4 BPEL 的基本思想的基本思想 6 4 1用 JAVA實例模擬 BPEL 的創(chuàng)建過程 7 4 2用實例概述 BPEL 的創(chuàng)建過程 11 5 BPEL 模型基礎模型基礎 16 6 BPEL 的基本活動介紹的基本活動介紹 20 6 1RECEIVE 接收 REPLY 回答 20 6 2INVOKE請求 20 6 3ASSIGN賦值 21 6 4WAIT等待 21 6 5SEQUENCE順序 22 6 6FLOW流程 22 6 7SWITCH分支 22 6 8WHILE WHILE循環(huán) 23 6 9PICK 選取 在 WPS 中被稱為 RECEIVE CHOICE 23 7 BPEL 的異常管理的異常管理 24 7 1FAULTHANDLERS CATCH及CATCHALL元素 24 8 BPEL 事務與補償機制事務與補償機制 25 9 BPEL 抽象流程和開發(fā)簡介抽象流程和開發(fā)簡介 27 9 1抽象流程 27 9 2BPEL 開發(fā) 28 10 房屋貸款房屋貸款 BPEL 實例詳解實例詳解 28 10 1房屋貸款案例介紹 29 10 1 1案例的由來 29 10 1 2業(yè)務現(xiàn)狀 29 10 1 3業(yè)務需求 30 10 1 4實現(xiàn)流程 30 10 2定義 BPEL 流程的接口 WSDL 31 10 3外部服務合作伙伴的 WSDL 34 10 4定義合作伙伴的鏈接 40 10 5聲明變量 42 10 6聲明異常處理 43 10 7開發(fā) BPEL 流程 44 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 3 頁 11 BPEL 過程組件過程組件 50 11 1合作伙伴連接 PARTNER LINKS 51 11 2變量 VARIABLES 52 11 3相關集 CORRELATION SETS 53 11 4錯誤處理 FAULT HANDLERS 57 11 5補償處理 COMPENSATION HANDLERS 58 12 BPEL 活動淺析活動淺析 60 12 1 RECEIVE REPLY 接收 恢復 61 12 2 ASSIGN INVOKE 賦值 調(diào)用 62 12 3 CONDITION OTHERWISE 條件 否則 64 12 4 SEQUENCE FLOW 順序 并行 65 12 5 LINK SOURCE TARGET 鏈接 源 目標 66 12 6 PICK ONMESSAGE ONALARM 選擇 監(jiān)聽 鬧鐘 68 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 4 頁 1 概述概述 BPEL 是一門用于自動化業(yè)務流程的形式規(guī)約語言 用 XML 文檔寫入 BPEL 中的流程能在 Web 服務之間以標準化的交互方式得到精心組織 這些流程能夠在任何一個符合 BPEL 規(guī) 范的平臺或產(chǎn)品上執(zhí)行 所以 通過允許顧客們在各種各樣的創(chuàng)作工具和執(zhí)行 平臺之間 移動這些流程 BPEL 使得他們保護了他們在流程自動化上的投資 盡管以前想使業(yè)務流 程定義標準化 但 BPEL 已經(jīng)引起了史無前例的興趣 而且它 最早在軟件供應商中獲得大 量認可 BPEL 實現(xiàn)了抽象的 WSDL 接口的集成 所以它也屬于 SOA 的解決方案之一 2 業(yè)務流程的慨念及業(yè)務流程的慨念及 BPEL 簡史簡史 2 1 什么是業(yè)務流程什么是業(yè)務流程 業(yè)務流程業(yè)務流程可 以被定義為一個由各種不同功能的活動相連的一組有相互關系的任務 它們依照一定的業(yè)務邏輯和順序依次執(zhí)行 業(yè)務流程有起點和終點 而且它們都是可重復 的 業(yè)務流程是企業(yè)實現(xiàn)商務目標的方法 對于企業(yè)而言 業(yè)務流程是企業(yè)重要的知識 資產(chǎn) 是企業(yè)的核心競爭力的體現(xiàn) 一個精心設計和執(zhí)行的業(yè)務流程能夠為企業(yè)創(chuàng) 造價 值并節(jié)約成本 在著名作家佛里德曼的獲獎作品 世界是扁平的 21 世紀簡史 THE WORLD IS FLAT A Brief History of the Twenty first Century 一書中 對經(jīng)濟全球化有著精彩 的論述 它描繪了一個由互聯(lián)網(wǎng) 通信基礎設施和新型軟件搭建的全球舞臺 在這個舞臺 上 人們能夠以多種方式 分享知識 勞動 娛樂和發(fā)現(xiàn) 并且創(chuàng)造新的商業(yè)機會 佛里 德曼舉例說 如今沃爾瑪是美國最大的公司 然而它什么也不生產(chǎn) 只是建立了這個非 凡的供應環(huán) 節(jié) 從世界各地進口非常便宜的商品 并把世界各地的產(chǎn)品送到消費者手 里 它是一個全球組裝線 在經(jīng)濟全球化的過程中 企業(yè)的邊界變得模糊 企業(yè)會將任務分解為一系列的子任務 企業(yè)只關注于自己的核心競爭力所在 并將其他工作分包給最合適的人來完成 企業(yè)需要 通過業(yè)務流程將這些片斷有機地組織在一起 在這里我們可以深刻地認識到業(yè)務流程對企 業(yè)的重要性 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 5 頁 定義業(yè)務流程并對其做出文檔所花費的時間和努力是完全值得的 在一個反映中國傳 統(tǒng)醫(yī)學的電視劇中 當配置藥劑的時候 掌柜把自己反鎖在藥房里 只有他會根據(jù) 秘 方 將不同的藥材調(diào)配成救死扶傷的靈藥 然而只有他一人掌握這個過程是非常危險的 對于現(xiàn)代企業(yè)來說這更是不可能的 我們不可能只讓配件 制造主任了解企業(yè)的配件制造 知識 然后讓他每晚獨自裝配所有的零件 只要定義了配件制造業(yè)務流程 配件制造工人 可以隨時來去 而且任何配件制造工人都可以 隨時取代另一個人的工作 這是因為工廠 里的所有配件制造工人都理解并遵循業(yè)務流程 我們可以學習 改變 評估 然后再次改 變配件制造業(yè)務流程 因為該流程 對于每個人都是可見的 而非局限于配件制造主任 現(xiàn)代業(yè)務流程管理系統(tǒng)的歷史可以追溯到工作流系統(tǒng) 簡單地來講 工作流定義了業(yè) 務流程中的參與者 Who 所執(zhí)行的工作 What 及何時執(zhí) 行 When 在企業(yè) IT 環(huán)境中 工作流軟件通常與企業(yè)應用集成 Enterprise Application Integration EAI 系統(tǒng)結合 在一起 成為企業(yè)應用的 黏合劑 實現(xiàn)業(yè)務流程的自動化和流水線化 傳統(tǒng)工作流系統(tǒng)的最大缺陷就是 它們大多采用了專有技術 這使得業(yè)務流程與企業(yè) 應用的結合變得非常復雜 通常需要很長時間進行部署和實施 而與 企業(yè)外部系統(tǒng)進行 集成則更加困難 無法適應全球化浪潮和互聯(lián)網(wǎng)時代對企業(yè)靈活 無縫集成的需求 人們 開始考慮利用 Web 服務的開放性和標準化 來解決業(yè)務 流程與企業(yè)應用之間的互操作性 問題 2 2 BPEL 簡史簡史 2002 年 7 月 IBM 微軟 BEA 提交了 Business Process Execution Language for Web Services BPEL4WS 1 0 的規(guī)范 業(yè)務流程執(zhí)行語言基于 XML 和 Web 服務技術 它融 合了早期的 IBM 的 Web Services Flow Language WSFL 及微軟的 XLANG 規(guī)范的很多特點 隨后許多主要供貨商如 SAP 和 Siebel 已被 Oracle 并購 等公司陸續(xù)加入規(guī)范的制定 并催生了多項修改和改進 并于 2003 年 3 月發(fā) 布了 1 1 版 2003 年 4 月 BPEL 被提交 結構化信息標準促進組織 OASIS 以實現(xiàn)標準化 并組建了 Web 服務業(yè)務流程執(zhí)行語言技 術委員會 WSBPEL TC 該努力使 BPEL 在業(yè)界獲得更為廣泛的認可 目前該技術委員會 正在致力于下一代規(guī)范的制定工作 并將該規(guī)范重命名為 WS BPEL 2 0 雖然除 BPEL 之外還有一些業(yè)務流程規(guī)范 但是到目前為止 BPEL 是最為成熟和被廣 泛支持的技術 WebSphere Process Server 6 0 提供了 BPEL4WS1 1 規(guī)范兼容實現(xiàn) 并支 持制定中的 WS BPEL 2 0 草案 除此之外還增加了對人員任務 WS BPEL Extension for People 和 Java 語言 BPELJ 等擴展的支持 在下文中 我們將利用 WebSphere Integration Developer 6 0 和 WebSphere Process Server 6 0 來演示如何創(chuàng)建和運行 BPEL 流程 關于本文涉及的 BPEL 規(guī)范 可以從下面網(wǎng)址獲得 http www 128 ibm com developerworks library ws bpel 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 6 頁 3 BPEL 的基本特性的基本特性 相對于對象組裝技術 服務組裝更為復雜 人們必須面對 SOASOA 環(huán)境中異構的 松耦合的 自主的服務 它們間的交互關系是動態(tài)的 按需發(fā)生的 而且缺少中央控制 因此 BPEL 提供的服務組裝模型提供了下列特性 1 靈活性 服務組裝模型應該具有豐富的表現(xiàn)能力 能夠描述復雜的交互場景 而 且能夠快速地適應變化 2 嵌套組裝 一個業(yè)務流程可以表現(xiàn)為一個標準的 Web 服務 并被組裝到其他流程 或服務中 構成更粗粒度的服務 提高了服務的可伸縮性和重用性 3 關注點分離 BPEL 只關注與服務組裝的業(yè)務邏輯 其他關注點 比如服務質(zhì)量 QoS Quality of Service 事務處理等 可被作為附加擴展 由具體實現(xiàn)平臺進行處 理 4 會話狀態(tài)和生命周期管理 與無狀態(tài)的 Web 服務不同 一個業(yè)務流程通常具有明 確的生命周期模型 BPEL 提供了對長時間運行的 有狀態(tài)交互的支持 5 可恢復性 這對于業(yè)務流程 尤其對長時間運行的流程 是非常重要的 BPEL 提供 了內(nèi)置的失敗處理和補償機制 對于可預測的錯誤進行必要的處理 4 BPEL 的基本思想的基本思想 許多開發(fā)人員覺得 BPEL 很神秘 不知道到底是什么意思 主要是因為它是根據(jù)很抽象的 基于 WSDL 的 Web Service 再定義一些抽象執(zhí)行的流程 其實 BPEL 一點都不神秘 是一個很簡單的東西 首先談一下 BPEL 和 WSDL 的區(qū)別 WSDL 只是定義接口參數(shù) 不會定義如何實現(xiàn)接口 而 BPEL 不僅有自己的接口定義 也是一個 WSDL 文件 包括 輸入?yún)?shù) 方法操作名 返 回參數(shù) BPEL 會定義如何調(diào)用其他服務的接口來實現(xiàn)自己的接口 簡單地說 BPEL 通 過流程編程將各種接口組合在一起 其目 的在于提供一個 集成了各種接口 的接口 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 7 頁 首先 BPEL 會有一個起點和終點 1 它的起點就是 receive 也就是接收它自己接口的輸入?yún)?shù) 2 它的終點就是 reply 也就是得到它自己接口的返回參數(shù) 整個 BPEL 就是定義如何通過它的接口輸入?yún)?shù) 調(diào)用其他外部服務的接口 得到其 接口的返回參數(shù) 它最重要的是兩個定義 1 一個是賦值命令 Assign Copy 通過賦值命令將某一變量值賦給所要調(diào)用的接 口的輸入?yún)?shù) 2 另一個是調(diào)用命令 Invoke 通過 Invoke 命令來調(diào)用外部服務 另外一個比較重要的就是條件命令 Case Condition 根據(jù)變量的不同來定義各種 條件 然后根據(jù)各種條件來調(diào)用不同的服務 這些變量可以來自于輸入?yún)?shù) 也可以來自 于調(diào)用外部服務的結果 作為 BPEL 運行環(huán)境的一個重要功能就是能夠保存并查詢到這些 變量 4 1 用用 Java 實例模擬實例模擬 BPEL 的創(chuàng)建過程的創(chuàng)建過程 這里用一個簡單的實例來進一步說明 BPEL 的基本思想和核心本質(zhì) 并用 Java 實例來 模擬 BPEL 的創(chuàng)建過程 首先假定已經(jīng)有了兩個 Web Service 一個為 加法服務 專門處理兩個數(shù)相加 名為 AddService 另外一個為 減法服務 專門處理兩個數(shù)相減 名為 SubtractService 現(xiàn)在有一個新的需求 需要將上面兩個 Web Service 集成起來 也就是需要創(chuàng)建一個 新的服務 稱為 運算服務 名為 CaculatorService 它有一個運算類型的參數(shù) 當 運算類型為 加法 時 調(diào)用加法服務 當運算類型為 減法 時 調(diào)用減法服務 看到這里 讀者可能會想 直接寫一個 Java 程序 調(diào)用者兩個 Web Service 不就可 以了嗎 筆者的回答是 直接用 Java 編程當然可以 事實上現(xiàn)在大家就是這么做的 但 是 Java 本質(zhì)上是一種具體的程序語言 只能運 行于 JVM 的 Java 運行環(huán)境 不是一種抽 象性的通用的標準語言 而 BPEL 是一種標準化的執(zhí)行語言 如何能夠真正運行 BPEL 不是 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 8 頁 它所關心的事情 它還 需要各個廠商去開發(fā)自己的 BPEL 運行環(huán)境 盡管各個廠商所開發(fā) 的 BPEL 的運行環(huán)境可能會不一樣 但是同一個 BPEL 所開發(fā)的程序 應該可以運行于這些 不同的 BPEL 運行環(huán)境 得到的結果應該是一樣的 就像 Web Service 的 WSDL 文件一樣 它只管如何定義服務 服務接口 服務操作 服務參數(shù)等 如何具體實現(xiàn) Web Service 不 是 WSDL 所要關心的事情 下面繼續(xù)前面的實例 兩個 Service 都會有自己的 WSDL 定義 下面用實際的 Java 語 言來類似地描述一下 以便于理解 下面的 AddService java 相當于 AddService wsdl 用 Java 的 Interface 可能更貼 切一點 用 Java 的 class 可以說明得更詳細一點 Public class AddService Public double add double addParameter1 double addParameter2 Double addResposne addResposne addParameter1 addParameter2 WSDL 不會定義具體如何實現(xiàn) 此處只是說明如何實現(xiàn)操作 Return addResponse 下面的 SubstractService java 相當 SubstractService wsdl Public class SubstractService Public double substract double substractParameter1 double substractParameter2 Double substractResposne substractParameter1 substractParameter2 Return substractResposne 下面用 Java 模擬 BPEL 的創(chuàng)建過程 首先需要創(chuàng)建 BPEL 的接口 下面用 CaculatorBPELInterface java 來說明 它將有 3 個參數(shù) 其中 paramter1 和 paramter2 是需要運算的兩個數(shù) 第 3 個參數(shù) processType 表示運算的類型 Public Interface CaculatorBPELInterface Public double caculatorProcess double parameter1 double parameter2 String processType 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 9 頁 下面將創(chuàng)建一個 Java 實現(xiàn)類 說明如何對應于 BPEL 的創(chuàng)建過程 許多語句 如一些 變量定義和賦值定義 對 Java 來說是不必要的 為了模擬 BPEL 的創(chuàng)建過程 讓 Java 開 發(fā)人員更好地把握 BPEL 的創(chuàng)建過程 相應地加入了這些程序語句 Public class CaculatorBPELImple implements CaculatorBPELInterface Public double caculatorProcess double parameter1 double parameter2 String processType 步驟 1 定義所要調(diào)用的外部類 相當于定義 BPEL 里面 partnerLink AddService addServer new AddService SubstractService substractSevice new SubstractService 步驟 2 定義輸入和輸出變量 相當于定義 BPEL 里面變量 variable 定義的變量如下 BPEL 接口的輸入和輸出變量 所要調(diào)用的外部類的接口方法的輸入和輸出變量 定義 BPEL 接口的輸入變量 Double caculatorProcessParameter1Request Double caculatorProcessParameter2Request Double caculatorProcessTypeRequest 定義 BPEL 接口的輸出變量 Double caculatorProcessResponse 定義加法服務的輸入變量 Double addParameter1Request Double addParameter2Request 定義加法服務的輸出變量 Double addResponse 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 10 頁 定義減法服務的輸入變量 Double substractParameter1Request Double substractParameter2Request 定義減法服務的輸出變量 Double substractParameter1Response 將請求參數(shù)賦值給 BPEL 接口的輸入變量 相當于 BPEL 的 receive caculatorProcessParameter1Request parameter1 caculatorProcessParameter2Request parameter2 Double caculatorProcessTypeRequest processType 步驟 3 定義條件 并調(diào)用外部接口 If caculatorProcessTypeRequest equals add 相當于 BPEL 的 switch condition case 下面將調(diào)用加法服務 將接口請求變量傳給加法服務的請求變量 相當于 BPEL 的 assign copy addParameter1Request caculatorProcessParameter1Request addParameter2Request caculatorProcessParameter2Request 調(diào)用 addService 的接口 相當于 BPEL 的 Invoke addResponse addServer add addParameter1Request addParameter2Request 將 addResponse 賦值給 BPEL 接口的輸出變量 相當于 BPEL 的 assign copy caculatorProcessResponse addResponse else 相當于 BPEL 的 condition otherwise 將接口請求變量傳給減法服務的請求變量 相當于 BPEL 的 assign copy substractParameter1Request caculatorProcessParameter1Request 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 11 頁 substractParameter2Request caculatorProcessParameter2Request 調(diào)用 substractService 的接口 相當于 BPEL 的 invoke substractResponse substractServer substract substractParameter1Request substractParameter2Request 將 substractResponse 賦值給 BPEL 接口的輸出變量 相當于 BPEL 的 assign copy caculatorProcessResponse substractResponse Return caculatorProcessResponse 相當于 BPEL 的 reply 4 2 用實例概述用實例概述 BPEL 的創(chuàng)建過程的創(chuàng)建過程 上面已經(jīng)用 Java 模擬了 BPEL 的創(chuàng)建過程 下面將基于同樣的實例 用描述性的 WSDL 和 BPEL 來實現(xiàn)其創(chuàng)建過程 使讀者對 BPEL 能有一個整體性的掌握 假設已經(jīng)有了前面的加法服務和減法服務的 WSDL 文件 加法服務為 AddService wsdl 減法服務為 Substract wsdl 它們的主要內(nèi)容如下所示 AddService wsdl getRequest 請求消息 addParameter1 double addParameter2 double getResponse 返回消息 addResponse double 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 12 頁 addServcie portType 接口 add operation 接口操作 AddService service 服務名稱 substractService wsdl getRequest 請求消息 subtractParameter1 double subtractParameter2 double getResponse 返回消息 substractResponse double substractService portType 接口 substract operation 接口操作 SubstractService 服務名稱 下面需要為 BPEL 創(chuàng)建一個服務接口 caculator wsdl 如下 caculatorService wsdl getRequest 請求消息 parameter1 double parameter2 double processType String getResponse 返回消息 caculatorProcessResponse double 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 13 頁 caculatorService portType 接口 caculatorPorcess operation 接口操作 CaculatorService service 服務名稱 下面介紹創(chuàng)建 BPEL 的基本過程 即 caculatorServiceProcess bpel 下面只是說明 BPEL 的創(chuàng)建過程 沒有完全按照 BPEL 的語法 具體的 BPEL 語法和 BPEL 編程實例后面會 詳細介紹 1 創(chuàng)建變量 bpel variables 所定義的變量包括 1 BPEL 接口的輸入和輸出變量 2 所要調(diào)用的外部服務 partnerLink 的接口操作的輸入和輸出變量 bpel variables BPEL 流程的請求變量和返回變量 variable name request bpel messageType 采用 caculatorService getRequest variable name response bpel messageType 采用 caculatorService getResponse 加法服務的請求變量和返回變量 variable name request add messageType 采用 addService getRequest variable name response add messageType 采用 addService getResponse 減法服務請求變量和返回變量 variable name request substract messageType 采用 substractService getRequest variable name response substract messageType 采用 substractService getResponse bpel variables BPEL 定義變量的方式與 Java 是不一樣的 主要因為 BPEL 所調(diào)用的 WSDL 是 XML 語言 上面的所定義的變量并不是對應一個具體的值 它實際上對應的是一個數(shù)據(jù)結構 如 caculatorService getRequest 對應的是 caculatorService wsdl 下面的 getRequest 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 14 頁 parameter1 double parameter2 double processType String 也就是說 getRequest 下面的所有參數(shù)都包含進去了 2 創(chuàng)建接收 bpel receive bpel receive name request partnerLink CaculatorService portType caculatorService operation caculatorPorcess variable request bpel Receive 是整個 BPEL 的起點 所定義的變量 request bpel 從服務請求中得到賦值 整個后面的業(yè)務過程將以這個請求變量作為觸發(fā)點 3 創(chuàng)建條件 bpel switch case 程序?qū)⒏鶕?jù)不同的條件調(diào)用不同的服務 所以先要設立各種條件 bpel switch bpel case condition getVariableData request bpel payload getRequest processType add 調(diào)用加法服務 bpel case 上面的程序表示在 request bpel 的變量中取出路徑為 getRequest processType 所 對應的變量值 如果滿足這個值為 add 的條件時 可以在里面加入程序 完成相應的 任務 bpel otherwise 調(diào)用減法服務 bpel otherwise 如果上面的所有條件都不滿足時 可以在里面加入程序 完成默認的任務 4 給所要調(diào)用的服務的請求變量賦值 bpel assign copy 為了調(diào)用外部服務 先要給外部服務賦值 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 15 頁 bpel assign bpel copy bpel from variable request bpel part payload query getRequest parameter1 bpel to variable request add part payload query getRequest addParameter1 bpel copy bpel assign 上面表示將 BPEL 過程所收到的初始變量賦給加法服務的請求變量 5 調(diào)用外部服務 bpel invoke bpel invoke name addService partnerLink AddService portType addService operation add inputVariable request add outputVariable response add 上面將會調(diào)用加法服務 AddSerivce 其中 request add 為輸入變量 6 將服務的結果賦給 BPEL 的返回變量 bpel assign copy 在完成了外部服務的調(diào)用之后 就可以將外部服務的輸出結果賦給 BPEL 流程的返回 變量 文法同步驟 4 7 調(diào)用 bpel reply 調(diào)用 BPEL 的 reply 命令 將 BPEL 流程的返回變量返回給服務請求者 bpel reply name response partnerLink CaculatorService portType caculatorService operation caculatorPorcess variable response bpel 這里比較一下步驟 2 的 bpel receive 和步驟 6 的 bpel reply 可以看到它 們的 partnerLink 的名字 portType 的名字 operation 的名字都是一樣的 它們是調(diào) 用的同一個服務下面的同一個接口操作 只是兩個命令的變量不一樣 bpel receive 是收到請求消息的變量值 bpel reply 是將響應變量的結果返回給服務請 求者 事實上 BPEL 運行環(huán)境執(zhí)行 bpel receive 后 就在等待 bpel reply 的返回 結果 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 16 頁 上面通過實例介紹了 BPEL 的基本創(chuàng)建過程 有了這些基本的 BPEL 整體創(chuàng)建思路后 就可以為更好地理解一些具體的語法打下了基礎 5 BPEL 模型基礎模型基礎 BPEL 模型可以幫助我們更好地理解如何使用 BPEL 描述的業(yè)務流程 如圖 1 所示 流程 Process 由一系列 活動 Activity 組成 流程通過伙伴鏈接 Partner Link 來定義與流 程交互的其他服務 服務中可以定義一些變量 Variable 在 BPEL4WS 中被稱為 Container 流程可以是有狀態(tài)的 長時間運行過程 流程引擎可以通過關聯(lián)集合 Correlation Set 將 一條消息關聯(lián)到特定的流程實例 圖 1 BPEL 模型示意 1 伙伴 Partner 在 BPEL 中 一個流程可以調(diào)用其他服務 也可以響應來自客戶端的請求 也就是說 BEPL 流程實例既可以作為服務的請求者 也可以扮演服務的提 供者 BPEL 把與流程交互 的其他服務稱為伙伴 partner 在異步通信環(huán)境中 流程與伙伴之間的會話可能是雙向 的 這在復雜的商務流程中非常常 見 在流程與伙伴的通信過程中 它們會扮演不同的角色 比如當訂單流程被外部服務調(diào) 用的時候 它作為 PurchaseOrderProcess 角色來提供服務 然而當它請求發(fā)貨服務 的時候 它則扮演 InvoicecClient 角色 如圖 2 所示 由于在流程執(zhí)行過程中 一個 流程可能會調(diào)用多 個伙伴服務 又可能接收多個伙伴的請求 因此為了消除在通信過程 中的多義性 我們需要明確服務和流程所扮演的角色 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 17 頁 圖 2 訂單流程示意 在 BPEL 中 這種流程與伙伴的合作關系是通過元素來定義的 這樣如果在流程的活 動中需要指定與特定伙伴的交互 只 需要引用 partnerLink 的名稱即可 而且通過 partner links 的抽象 在流程建模時 我們不必指定具體的服務端點 而將流程與具體 服務的綁定推遲到組裝或運行時來完成 這種動態(tài)伙伴關系為流程帶來了極大的 靈活性 也增強了流程的可復用性 比如 我們在開發(fā)環(huán)境中使用的偽服務實現(xiàn) 在生產(chǎn)環(huán)境中無 需須修改流程就可以將服務端點替換為主機應用 在 PARTNERLINK 元素中 可以通過 myRole 和 partnerRole 屬性來定義流程 和伙伴的角色 如果流程作為服務的提供者 需要使用 myRole 屬性 而當流程作為服務 的請求者時 則使用 partnerRole 屬性 partnerLink 通過引用 partnerLinkType 來定義流程與伙伴服務之間的通信接口 實 際上是 WSDL 文檔中的 Port Type 伙伴鏈接類型聲明了兩個 也可能是多個 服務之間的 關系 服務鏈接類型定義了一組角色 其中每個角色指明一組 Port Type 即明確了該角 色所提供的服務接口 partnerLinkType 通常被定義在 WSDL 文檔中 被 BPEL 流程所引用 下面的代碼片段顯示了如何利用 partnerLink 和 partnerLinkType 定義流程與伙伴的 合作關系 我們實現(xiàn)了一個股票購買流程 在這個流程中需要通過伙伴 StockQuote 獲取 當前股票信息 bpws partnerLinks bpws partnerLink myRole StockServiceRole name StockService partnerLinkType ns StockServicePLT bpws partnerLink name StockQuote partnerLinkType ns PartnerPLT partnerRole partnerRole 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 18 頁 bpws partnerLinks 我們還需要在流程對應的 WSDL 文檔中定義 partnerLinkType definitions xmlns http schemas xmlsoap org wsdl xmlns plnk http schemas xmlsoap org ws 2004 03 partner link plnk partnerLinkType name StockServicePLT plnk role name StockServiceRole plnk portType name wsdl0 StockService plnk role plnk partnerLinkType plnk partnerLinkType name PartnerPLT plnk role name partnerRole plnk portType name ns net xmethods services stockquote StockQuotePortType plnk role plnk partnerLinkType import location urn xmethods delayed quotes wsdl namespace http www StockQuote definitions 2 變量 variables 在 BPEL 中 我們可以使用變量來保存和傳遞流程的狀態(tài)信息 變量的數(shù)據(jù)類型由 WSDL 定義 既可以是 XML Schema 內(nèi)置的簡單類型 又可以是自定義的復雜數(shù)據(jù)類型 bpws variables bpws variable name symbol type xsd string bpws variable name UserInfo type ns1 UserInfoBO 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 19 頁 bpws variables 上面的代碼 展示了如何在 BPEL 中使用元素來定義變量 值得注意的是 與常見的 編程語言類似 BPEL 中的變量是有作用域的 每個變量只有在定義它的作用域和所包含的 作用域內(nèi)才是可見的 在下面的章節(jié)中 我們將介紹如何使用 BPEL 來操縱和傳遞數(shù)據(jù) 此外 WS BPEL 提供了一些內(nèi)置的函數(shù)來支持變量內(nèi)容的處理 1 getVariableProperty variableName propertyName 為獲取變量屬性函數(shù) 輸入 參數(shù)為變量名稱和屬性名稱 結果為屬性值 2 getVariableData variableName partName locationPath 為獲取變量數(shù)據(jù)函 數(shù) 輸入?yún)?shù)為變量名稱 part 名稱 以及 XPath 表達式 其中 partName 和 locationPath 為可選參數(shù) 輸出結果為指定變量的全部或部分的數(shù)據(jù)內(nèi)容 3 活動 Activity BEPL 流程是由一系列步驟所組成的 它們被稱為活動 WS BPEL 定義了豐富的活動類 型 一般來說可以把它們劃分為兩大類 基本活動和結構 化活動 基本活動描述了流程 內(nèi)的一個具體步驟 比如接收請求 調(diào)用伙伴服務 變量賦值等 而結構化活動則描述了 如何組織和管理流程的控制流 在下面的章節(jié) 中 我們將對活動進行詳細講解 4 關聯(lián)集合 Correlation Set BPEL 提供了聲明性機制 以指定服務實例中相關聯(lián)的操作組 一組相關標記可定義 為相關聯(lián)的組中所有消息共享的一組特性 這樣的一組特性稱為關 聯(lián)集合 每個關聯(lián)集 都在一個作用域中進行聲明并屬于該作用域 屬于全局流程作用域的關聯(lián)集稱為全局關聯(lián) 集 屬于局部作用域的關聯(lián)集稱為局部關聯(lián)集 在流程 開始時 全局關聯(lián)集處于未初始化 的狀態(tài) 在其所屬的作用域的執(zhí)行開始時 局部關聯(lián)集處于未初始化的狀態(tài) 相關集在其語義上類似于延遲綁定的常數(shù) 相關集的綁定由特別標記的消息發(fā)送或接 收操作來觸發(fā) 相關集在其所屬的作用域的生存期中只能初始化一 次 在初始化之后 它的值就可被認為是業(yè)務流程實例的標識別名 在多方業(yè)務協(xié)議中 相關集合非常有用 初始者流程發(fā)送啟動會話的第一個消息 從而定義了標 記該對話的相關集中的特性值 所有其他參與者通過接收提供相關集中的特性值的傳入消息來綁定會話中的相關集 比如 一個旅行社訂票流程 當該流程啟動之后 用戶需要能夠查詢該流程狀態(tài) 并能取消該 流程 這就需要相關集的支持來確保后續(xù)的請求消息綁定到相同的流程實例中 6 BPEL 的基本活動介紹的基本活動介紹 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 20 頁 6 1 Receive 接收接收 Reply 回答回答 receive 活動從流程的外部伙伴那獲取數(shù)據(jù) 并將其保存到流程變量 通常一個 Receive 是一個流程的初始點 它會阻塞執(zhí)行直到匹配的消息的到達 reply 活動發(fā)送消息給伙伴來應答通過 receive 活動所接收到的消息 receive 和 reply 的組合對應著 WSDL portType 上定義的一個請求 響應操作 如果 receive 活動 對應著一個單向 one way 操作 則不能在流程中定義對應的 reply 活動 bpws receive createInstance yes name Receive operation buy partnerLink StockService portType ns0 StockService bpws reply name Reply operation buy partnerLink StockService portType ns0 StockService 上面就是 BPEL 中包含 receive 和 reply 活動的片段 值得注意的是 receive 和 reply 活動中都是通過 partnerLink 來 引用預定義伙伴關系的 而且需要設置 portType 和 operation 屬性來聲明流程實現(xiàn)的 WSDL portType 和操作 此外 如 果將 receive 活動作為流程的起始點 則需要將 receive 活動的 createInstance 屬性設 置為 yes 它指明了當流程接收到匹配的消息時會創(chuàng)建新的流程實例來處理該請求 在 BPEL 流程中我們還可以定義更為復雜的消息響應機制 可以將特定的消 息關聯(lián)到相應 的流程實例中 CorrelationSet 關聯(lián)集合 就是為了解決上述問題而出現(xiàn)的 6 2 Invoke 請求請求 invoke 活動允許業(yè)務流程同步或異步調(diào)用由合作伙伴提供的服務 服務實現(xiàn)可以 是單向或請求 響應操作 Invoke 活動使用 partnerLink 來引用伙伴服務 同過 portType 和 operation 指定相應的 WSDL 接口和操作 bpws invoke name GetStockQuote operation getQuote partnerLink StockQuote portType ns2 net xmethods services stockquote StockQuotePortType bpws invoke 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 21 頁 如果在請求服務的過程中發(fā)生異常 則可以通過錯誤響應和補償機制來加以處理 這 對業(yè)務流程 特別是長時間運行的流程是非常重要的 我們將在后面的章節(jié)進行講解 6 3 Assign 賦值賦值 assign 活動的作用是用新的數(shù)據(jù)來更新變量的值 Assign 活動可以包括任意數(shù) 量的基本復制操作 bpws assign name Assign bpws copy bpws from China bpws from bpws to variable country bpws copy bpws assign assign 活動還可把端點引用復制到合作伙伴鏈接 或把合作伙伴鏈接復制到端點引 用 以實現(xiàn)服務的動態(tài)綁定 6 4 Wait 等待等待 wait 活動會暫停流程執(zhí)行 等待一段給定的時間或等到某一時刻才繼續(xù)運行 在 WebSphere Process Server 6 0 中 開發(fā)者可以非常靈活地指定 wait 中的到期條件 比 如等待多少秒 等到特定的一個日期 或是使用內(nèi)置的日期表現(xiàn)法 也可以使用 Java 代 碼來動 態(tài)指定等待時間 BPEL 也提供了豐富的結構化活動 可以靈活地控制流程執(zhí)行 6 5 Sequence 順序順序 文檔編號 文檔名稱 保密級別 國信朗訊科技網(wǎng)絡技術有限公司 2002 第 22 頁 sequence 活動定義一組按順序先后執(zhí)行的活動 執(zhí)行順序是 sequence 活動中嵌 套活動的先后順序 當 sequence 中的最后一個活動完成后 該 sequence 活動也就完成了 6 6 Flow 流程流程 flow 活動可以描述更為復雜的活動執(zhí)行順序 我們可以利用 flow 指定一個或多 個并行執(zhí)行的活動 為了定義任意的控制結構 可以在并行的活動中使用鏈接 flow 能進一步表達直接或間接嵌套在其中的活動之間的同步相關性 link 鏈接 用 來表達這種同步相關性 flow 活動出現(xiàn)的所有 link 必須在 flow 活動中分開定義 并通過名稱進行標識 flow 活動中嵌套的活動需要通過 source 或 target 屬性來標明該活動為哪個鏈接的源或 目標活動 在 flow 活動中 對于每一個 link 必須有且僅有一個活動作為它的源活動 同 樣有且僅有一個活 動作為它的目標活動 目標活動會在源活動完成之后執(zhí)行 這樣 flow 內(nèi)部的活動就可以通過活動構成一個有向圖 我們還可以在 link 的源上定義 transition 變遷 條

溫馨提示

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

評論

0/150

提交評論