2013年1月14日 星期一

JBoss RiftSaw Sample - Math Formulas

前一篇文章 JBoss SOA Web Service - Math Sample+、-、X、/ 的運算包裝成 Web Service ,假設這些 +、-、X、/ 的運算都是不同平台的實作, 法是用PHP開發, 法是用JAVA開發, 法是用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 GuideJBoss 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 方便參考。
  1. 在 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 建立完成。

  2. 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

  3. 於 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。

  4. 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.... 等基本型態都可設定。
  1. 新增 Add Web Service Partner LinksAdd Partner Link -> 輸入Name:addPL -> Properties -> Details -> Browse

  2. 於 Choose Partner Link Type 點選 Add WSDL ,於 Browse for a WSDL to Import 點選 Add.wsdl -> 點選 MathAdd -> OK

  3. 回到 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

  4. 繼續上一步驟 Partner Link Type 的設定, 輸入Role Name:addProvider -> 點選:MathAdd -> Finish,回到 Details 的設定,可以看到 Partner Role 出現 addProvider 直接點選, Partner Operstions 顯示 MathAdd Web Service 的 Request/Response ,到此 Add Web Service Partner Links 設定完成。


  5. 重覆上述的步驟建立 -、X、/Partner Links,完成後如下圖。

  6. 如上圖可看到 Variables 已經有 input/output 二個變數了,這是建立 BPEL Process File 時就預設生成的,是 MathFormulas Process 的輸入及輸出,而 input/output 的設定是在 wsdl file,開啟 MathFormulasArtifacts.wsdl 可看到除了 MathFormulas 的 wsdl 外,還有4個 Web Service 的 wsdl。

  7. 以這個 Sample 來說輸入就是 a、b 二個數字,而輸出則是運算結果直接輸出,預設的 output 型態為 string 符合 Sample 的需求,因此 output 不做修改,而 input 的二個數字的型態則定義為 double ;如下圖將游標停留在 MathFormulasRequest 向右的箭頭(藍色箭頭)約三秒,出現 MathFormulasRequest 視窗後再點選 Open in New Editor

  8. 於參數編輯視窗點二下修改 input 參數,並新增一個參數 MathFormulasRequestType -> 點選右鍵 -> Add Element ,型態都為 double ,修改及新增後存檔,完成後如右下圖。

  9. 新增 Add Web Service Request Variables , Add Variable -> 輸入Name:addRequest -> Properties -> Details -> Browse

  10. 於 Choose type of variable 勾選 Messages -> 跳出Namespace Mappings -> OK ,如右下圖 Matches:點選 MathAdd_add -> Type Structure:點選 MathAdd_add -> OK , Add Request Variables 設定完成。

  11. 新增 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 設定完成。

  12. 重覆上述的步驟建立 -、X、/Request/Response Variables,完成後如下圖。


Configure BPEL Process Sequence

  1. 接著定義 BPEL Process 的流程,先新增 Flow 再在 Flow 裡新增二個 Sequence 對應到 MathAdd/MathSubtract 二個 Web Service; FIX_ME-Add_Business_Logic_Here 點右鍵 -> Insert Before -> Flow ,於新增的 Flow 操作 Flow 點右鍵 -> Add -> Sequence

  2. 在 Sequence 內新增 Assign 及 Invoke ,於新增的 Sequence 操作 Sequence 點右鍵 -> Add -> AssignSequence 點右鍵 -> Add -> Invoke

  3. 比照之前的操作於 Flow 內新增另一個 Sequence 同樣要包含 Assign 及 Invoke 並刪除FIX_ME-Add_Business_Logic_Here ,設定完成後如左下圖 ,Assign:是在指定參數這裡的用途是指定 Web Service Request 的參數,Invoke:是在呼叫/執行 Web Service;為方便閱讀將Sequence、Assign、Invoke如右下圖重新命名。

  4. +、- 法的流程完成後,接著設定 法的流程,Web Service Input:replyOutput 點右鍵 -> Insert Before -> Assign,Call Web Service:replyOutput 點右鍵 -> Insert Before -> Invoke,Web Service Output:replyOutput 點右鍵 -> Insert Before -> Assign

  5. 上一步驟設定完成後如左下圖,同樣比照右下圖更名,mulInputAss 及 mulWSInvoke用途同 +、- 法,mulResultAss:則是將運算結果指定為輸出的值。


Configure BPEL Process Sequence - Assign & Invoke

  1. 流程定義完成後要針對每一個 Assign及Invoke 設定,首先設定 MathAdd Sequence , addInputAss 的任務就是將 input 二個參數對應到 MathAdd Request 的二個參數, addInputAss -> Properties -> Details -> New -> paraDouble1:double -> arg0:double -> Yes , MathAdd Request 的第一個參數設定完成。

  2. 設定 MathAdd Request 的第二個參數, New -> paraDouble2:double -> arg1:double , MathAdd Request 的第二個參數設定完成。

  3. 設定 MathAdd Invoke , addWSInvoke -> Properties -> Details -> add , MathAdd Sequence 即設定完成。 MathSubtract Sequence 也比照上述步驟設定。

  4. 設定 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)

  5. 設定 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

  1. 新增 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 ,接著存檔。

  2. 於 Eclipse - Server View 操作 JBoss 5.0 Runtime Server點選右鍵 -> Add and Remove ,於 Add and Remove 視窗 點選 MathFormulas -> Add -> Finish

  3. 確定 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。
  4. http://localhost:8080/MathFormulas?wsdl

  5. 利用 soapUI Tool 測試 MathFormulas Process ,輸入 a=8b=1.432 ,算式則為: (8+1.432)X(8-1.432)=61.949376 測試結果如下。

  6. JBoss Log 如下。



參考文章如下:
Eclipse平台BPEL開發
BPEL的基本活動介紹
BPEL的基本思想

沒有留言:

張貼留言