+、-、X、/
的運算包裝成 Web Service ,假設這些 +、-、X、/
的運算都是不同平台的實作, +
法是用PHP開發, -
法是用JAVA開發, X
法是用Microsoft平台, /
法則是用Perl Solution 。接下來我們有一些數學公式的需求,例如:
(a+b)X(a-b)
或者 (a+b)/(a-b)
,這時候 BPEL 就派上用場了,可以在不重覆開發的情況下,使用即有的 +、-、X、/
Service 透過定義 BPEL Process 來滿足我們各種數學公式的需求。這就是 BPEL 最主要的功能整合異質系統,定義 BPEL Process 是呼叫各個 WebService 使其協同合作,這就回歸到 WebService 的核心 - 抽離平台的差異,使平台的差異與 Service 本身無關,所以 BPEL 的異質整合是架構在 WebService 之上,了解之後企業的各個系統整合是否適合使用 BPEL 就可進一步評估了。
相關設定(如安裝 JBoss RiftSaw )及執行環境的說明,可參考 JBoss RiftSaw Getting Started Guide 及 JBoss SOA Web Service - Math Sample 等相關的文章。
準備執行環境
- Eclipse Java EE IDE 3.6.1(Helios)+
- Eclipse BPEL Visual Designer 0.5.0
- JBoss Tools Plugin 3.2+
- JBoss SOA Server 5.0.2.GA+
- JBoss ESB Server 4.10+
- JBoss RiftSaw 2.3.0+
- JBoss Web Services 3.1.2.SP3_CP01+
- MySQL Server 5.1
Create Sample Project - Math Formulas
接下來的 Sample 就是以數學公式
(a+b)X(a-b)
來定義 BPEL Process ,初步分析如下:可同時處理a、b二個數字的加法跟減法,得到的二個結果後再做乘法運算,在尋找同時處理加法跟減法的流程時,從 RiftSaw Samples 裡找到可參考的 Process,路徑如下 riftsaw-2.3.0.Final\samples\quickstart\simple_flow
,可將其匯入 Eclipse 方便參考。- 在 Eclipse - Select a wizard,
BPEL 2.0 -> BPEL Project -> Next
,如下的畫面會出現二個BPEL Project
一個是可佈署於Apache ODE ,另一個則可佈署於JBoss 不會出現 Target runtime 設定才是接下來要使用的Project設定,在 Create a new BPEL 2.0 project 輸入Project name:MathFormulas -> Next
,在 BPEL Description 照預設值Content Folder:bpelContent -> Finish
, Math Formulas Project 建立完成。 - Create BPEL Process ,在 Eclipse - Select a wizard,
BPEL 2.0 -> New BPEL Process File -> Next
; 於 Create a BPEL Process File 進行設定, BPEL Process Name 輸入MathFormulas
, Namespace 輸入http://mathformulasProcess
, Template 選擇Synchronous BPEL Process
, 點選Next
。 - 於 Create a WSDL File 進行設定,Service Name、Port Name、Binding Protocol、Service Address都照預值不變,點選
Next
;接下來選擇 BPEL Process File 及 WSDL File 的放置路徑,照預設選擇bpelContent
, 點選Finish
完成這部份的設定,也可看到 Project 產出 BPEL Process File 及 WSDL File。 - 將 JBoss SOA Web Service - Math Sample 的
+、-、X、/
wsdl file 匯入 Project ,可於mathWS\wsdl
找到這4個檔案,將其匯入MathFormulas\bpelContent
後,修改每個檔案的soap:address location
,將REPLACE_WITH_ACTUAL_URL
置換為符合各個WebService的address -http://localhost:8080/mathWS/AddService
。
Configure Process File - Partner Links & Variables
在 BPEL 裡須將每個會使用到的 Web Service 設定成
Partner Links
,在設定 BPEL Process 時就會針對 Partner Links
來操作, MathFormulas Process 本身也是 Partner Links
由 Server 生成不須另外設定;除了預設的 input/output
Variable 是 MathFormulas 的 request/response
變數外,Variables 主要是設定 Web Service 的 request/response
變數,因此 +、-、X、/
都須設定 request/response
變數,方便執行各個 Web Service 時操作輸入的參數及輸出的值。 Variables
也可設為一般的變數,int、double、dateTime、string....
等基本型態都可設定。- 新增 Add Web Service
Partner Links
,Add Partner Link -> 輸入Name:addPL -> Properties -> Details -> Browse
。 - 於 Choose Partner Link Type 點選
Add WSDL
,於 Browse for a WSDL to Import點選 Add.wsdl -> 點選 MathAdd -> OK
。 - 回到 Choose Partner Link Type 出現
MathAdd
Web Service,Matches:MathAdd -> Partner Link Type Structure:MathAdd -> OK
, 於 Create new Partner Link Type 輸入Partner Link Type Name:addPLT
,點選Next
。 - 繼續上一步驟
Partner Link Type
的設定,輸入Role Name:addProvider -> 點選:MathAdd -> Finish
,回到Details
的設定,可以看到Partner Role
出現addProvider
直接點選,Partner Operstions
顯示 MathAdd Web Service 的 Request/Response ,到此 Add Web ServicePartner Links
設定完成。 - 重覆上述的步驟建立
-、X、/
的Partner Links
,完成後如下圖。 - 如上圖可看到
Variables
已經有input/output
二個變數了,這是建立 BPEL Process File 時就預設生成的,是 MathFormulas Process 的輸入及輸出,而input/output
的設定是在 wsdl file,開啟MathFormulasArtifacts.wsdl
可看到除了 MathFormulas 的 wsdl 外,還有4個 Web Service 的 wsdl。 - 以這個 Sample 來說輸入就是
a、b
二個數字,而輸出則是運算結果直接輸出,預設的 output 型態為 string 符合 Sample 的需求,因此 output 不做修改,而 input 的二個數字的型態則定義為 double ;如下圖將游標停留在 MathFormulasRequest 向右的箭頭(藍色箭頭)約三秒,出現 MathFormulasRequest 視窗後再點選Open in New Editor
。 - 於參數編輯視窗點二下修改
input
參數,並新增一個參數MathFormulasRequestType -> 點選右鍵 -> Add Element
,型態都為 double ,修改及新增後存檔,完成後如右下圖。 - 新增 Add Web Service
Request
Variables ,Add Variable -> 輸入Name:addRequest -> Properties -> Details -> Browse
。 - 於 Choose type of variable
勾選 Messages -> 跳出Namespace Mappings -> OK
,如右下圖Matches:點選 MathAdd_add -> Type Structure:點選 MathAdd_add -> OK
, Add Request Variables 設定完成。 - 新增 Add Web Service
Response
Variables ,Add Variable -> 輸入Name:addResponse -> Properties -> Details -> Browse
,於 Choose type of variable 如右下圖Matches:點選 MathAdd_addResponse -> Type Structure:點選 MathAdd_addResponse -> OK
, Add Response Variables 設定完成。 - 重覆上述的步驟建立
-、X、/
的Request/Response
Variables,完成後如下圖。
Configure BPEL Process Sequence
- 接著定義 BPEL Process 的流程,先新增
Flow
再在Flow
裡新增二個Sequence
對應到MathAdd/MathSubtract
二個 Web Service;FIX_ME-Add_Business_Logic_Here 點右鍵 -> Insert Before -> Flow
,於新增的 Flow 操作Flow 點右鍵 -> Add -> Sequence
。 - 在 Sequence 內新增 Assign 及 Invoke ,於新增的 Sequence 操作
Sequence 點右鍵 -> Add -> Assign
,Sequence 點右鍵 -> Add -> Invoke
。 - 比照之前的操作於 Flow 內新增另一個 Sequence 同樣要包含 Assign 及 Invoke 並刪除
FIX_ME-Add_Business_Logic_Here
,設定完成後如左下圖 ,Assign
:是在指定參數這裡的用途是指定 Web Service Request 的參數,Invoke
:是在呼叫/執行 Web Service;為方便閱讀將Sequence、Assign、Invoke如右下圖重新命名。 -
+、-
法的流程完成後,接著設定X
法的流程,Web Service Input:replyOutput 點右鍵 -> Insert Before -> Assign
,Call Web Service:replyOutput 點右鍵 -> Insert Before -> Invoke
,Web Service Output:replyOutput 點右鍵 -> Insert Before -> Assign
。 - 上一步驟設定完成後如左下圖,同樣比照右下圖更名,
mulInputAss 及 mulWSInvoke
用途同+、-
法,mulResultAss
:則是將運算結果指定為輸出的值。
Configure BPEL Process Sequence - Assign & Invoke
- 流程定義完成後要針對每一個
Assign及Invoke
設定,首先設定 MathAdd Sequence ,addInputAss
的任務就是將input
二個參數對應到 MathAdd Request 的二個參數,addInputAss -> Properties -> Details -> New -> paraDouble1:double -> arg0:double -> Yes
, MathAdd Request 的第一個參數設定完成。 - 設定 MathAdd Request 的第二個參數,
New -> paraDouble2:double -> arg1:double
, MathAdd Request 的第二個參數設定完成。 - 設定 MathAdd Invoke ,
addWSInvoke -> Properties -> Details -> add
, MathAdd Sequence 即設定完成。 MathSubtract Sequence 也比照上述步驟設定。 - 設定 MathMultiply Sequence 跟之前的步驟大致相同,只是 MathMultiply Request 的來源是加/減法運算後結果,
mulInputAss -> Properties -> Details -> New -> return:double(addResponse) -> arg0:double(multiplyRequest) -> Yes
, MathMultiply Request 的第一個參數設定完成;設定 MathMultiply Request 的第二個參數,New -> return:double(subtractResponse) -> arg1:double(multiplyRequest)
。 - 設定 MathMultiply Invoke ,
mulWSInvoke -> Properties -> Details -> multiply
;設定 MathMultiply Response 即是將運算結果對應到 output ,mulResultAss -> Properties -> Details -> New -> return:double(multiplyResponse) -> result:string(output) -> Yes
, MathMultiply Sequence 即設定完成。 到此 MathFormulas BPEL Process 全部設定完成, BPEL Process File 接著存檔。
Deploy & Test MathFormulas Process
- 新增
ODE Deployment Descriptor
File,於MathFormulas Project
點選右鍵,接著New -> Other -> Select a wizard -> BPEL2.0 -> Apache ODE Deployment Descriptor -> Next
;接者 BPEL Project 相對路徑照預設值不用修改,點選Finish
。開啟deploy.xml
File,如下圖為每個Partner Link
設定對應的Associated Port
,接著存檔。 - 於 Eclipse - Server View 操作
JBoss 5.0 Runtime Server點選右鍵 -> Add and Remove
,於 Add and Remove 視窗點選 MathFormulas -> Add -> Finish
。 - 確定 MySQL 啟動後,回到 Server View 啟動 JBoss Server 。於 JBoss Web Services Console 查看部署後的結果,
http://localhost:8080/jbossws/ -> 帳/密:admin/admin -> View a list of deployed services
,可看到 MathFormulas 部署後的訊息,點選 Service URL 可看到 wsdl file。 - 利用 soapUI Tool 測試 MathFormulas Process ,輸入
a=8
、b=1.432
,算式則為:(8+1.432)X(8-1.432)=61.949376
測試結果如下。 - JBoss Log 如下。
http://localhost:8080/MathFormulas?wsdl
參考文章如下:
Eclipse平台BPEL開發
BPEL的基本活動介紹
BPEL的基本思想
沒有留言:
張貼留言