-------------- 本欄目由ChiChi同學特約播映 -------------
======= 同時鳴謝115網盤提供的下載空間 =======
************* 看完之後請點擊頁面下方的"頂" ************
一.配置BPEL開發環境
需要在Eclipse EE中安裝BPEL外掛程式
參考: http://blog.csdn.net/xiaoanian/article/details/7080015
二.BPEL工程配置
1.建立BPEL工程
2.添加BPEL檔案
注意Template一定要選擇Synchronous BPEL Process
Service Address是將來要部署到BPS上之後的地址(......因為這個屬性是用在單獨啟動並執行時候,而咱們是在BPS中用,不知道可不可以隨便填)
3.添加Application Server中的HelloService的WSDL
為了使用HelloService,我們要用到它的WSDL檔案
開啟HelloService的WSDL1.1(不能用WSDL2),另存新檔HelloService.wsdl
複製HelloService.wsdl到工程bpelContent目錄下
在HelloServiceProcess.bpel中添加<bpel:import>標籤,將HelloService.wsdl 匯入進來,
注意其名空間是HelloService.wsdl 中指定targetNamespace
三.添加名空間
1.在HelloService.wsdl中添加xmlns:plnk名空間,從HelloServiceProcessArtifacts.wsdl拷過來
2.在HelloServiceProcess.bpel中添加xmln:ns名空間,從HelloService.wsdl拷過來.
這個名空間其實是HelloService.wsdl中指定的 targetNamespace.
拷到bpel中是為了能引用HelloService.wsdl的定義元素 (跟java的import差不多).
如果要添加更多的wsdl,這一步也不可少,並且要保證名空間首碼唯一,比如不能在不同的wsdl中
都出現xmln:ns而指向不同的名空間.
鑒於xxx,lcx,cy,gg等戰鬥在抗擊chichi一線的勞動婦女對名空間甚為疑惑, 並且考慮到恐怖的run豐肯定也會confused,專門貼一張圖
來解釋一下名空間.
四.添加代碼
1.在HelloService.wsdl中添加<plnk:partnerLinkType>,這就是剛才我們添加xmlns:plnk名空間的原因
下面我們轉到HelloServiceProcess.bpel中
2.在<bpel:partnerLinks>中添加<bpel:partnerLink>,指向HelloService.wsdl中的partnerLinkType
注意是partnerRole而非myRole.
3.在<bpel:variables>添加中間變數,做為HelloService的輸入輸出
4.在<bpel:sequence>添加<bpel:invoke>,添加到<bpel:receive>和<bpel:reply>之間
這一步就是調用App Server的HelloService服務
5.點擊編輯視窗左下方的Design,我們看到如下的流程
6.再回到Source,還要添加訊息類型轉換模組.因為整個process輸入的變數是"input"(類型是tns:HelloServiceProcessRequestMessage,在HelloServiceProcessArtifacts.wsdl中定義),而我們調用的HelloService服務的輸入是"service_input"(類型是ns:greetRequest,在HelloService.wsdl中定義),因此必須要進行類型轉換.類型的轉換要用到<bpel:assign>.該過程相對複雜,不宜手動編寫代碼,需要自動產生.我們先在<bpel:invoke>前後分別添加<bpel:assign>,取名為assignInput和assignOutput,不填任何內容,現在我們看到報錯,不要緊,往下看
7.點擊Design,進行如下操作
編輯assignInput
編輯assignOutput
8.添加deploy.xml
右鍵bpelContent檔案夾->new->others->BPEL2.0->Apache ODE Deployment Descriptor, next->finish
雙擊開啟,
在client 那行的 Associated Port 列選擇HelloServiceProcessPort,其他列自動完成
在helloServiceBpelLink那行的Associated Port列選擇HelloServiceHttpSoap11Endpoint,其他列自動完成
儲存.
好了,整個BPEL就部署好了
注意,如果你更改了bpel,wsdl檔案,一定要同步更新deploy.xml, 如下:點擊右上方連結Associated BPEL ........update!
五.打包並上傳
1.進入工程檔案夾的 beplContent 下,將5個檔案打包成 zip 檔案
2.進入BPS,進入main/Business Process/Add BPEL,上傳檔案
注意,如果已經部署過服務名相同的服務,先要進入main/Business Process/Deployed Packages,把以前的服務Undepoly掉.
3.好了,我們看到 Web Services/list 列表中多了一個HelloServiceProcess
六.手動wsdl2java
因為BPS裡Generate Client報錯(不信你隨便選一個bepl service試試),所以我們必須手動產生java檔案.
需要用到axis-1.6.1包,
http://axis.apache.org/axis2/java/core/download.cgi
如果你以前用Client的話多半已經下過了.
解壓後我們進入到其bin目錄下
輸入如下命令:
wsdl2java.bat -uri http://192.168.10.111:9766/services/HelloServiceProcess?wsdl -o ./temp -t
uri是你的BPS的HelloServiceProcess的wsdl1.1的地址. "-o ./temp"表示將產生的程式碼到temp檔案夾下(先建立)
產生成功之後,就可以將兩個java檔案複製到Client的工程中使用了
七.使用Client
假設我們的名字叫 KongBuDeRunFeng, 運行結果是這樣的
八.源碼下載
HelloServiceProcess BPEL工程, 可直接匯入到Eclipse中. (需要BPEL外掛程式)
http://115.com/file/e6p3ybm8#HelloServiceProcess_EclipseEE_Project.rar
HelloServiceProcesClient工程,可直接匯入到Eclipse中
http://115.com/file/e6p3yo2b#HelloServiceProcessClient_EclipseEE_Project.rar
九.總結
BPS可以用來串連各種服務,並定義流程 ,操作方法大同小異.
需要注意的一點是名空間的引用.還有 用<bpel:invoke>調用其他服務時比較麻煩的一點是要用<bepl:assign>進行類型轉換和賦值,這一步最好讓程式自動產生