|
級別: 初級
Vasudevan Thiyagarajan (vthiyaga@in.ibm.com), 系統工程師, IBM India Pvt. Ltd.
2007 年 3 月 20 日
了解如何從傳統 Java 對象(Plain Old Java? Object,POJO)開(kāi)發(fā)服務(wù)組件,并在 IBM? WebSphere Enterprise Service Bus 中發(fā)布。采用 Web 服務(wù)描述語(yǔ)言 (WSDL) 定義接口,并使用 Java? 實(shí)現。了解如何將服務(wù)組件與獨立引用相關(guān)聯(lián),以及如何使用獨立引用跨 ESB 訪(fǎng)問(wèn)服務(wù)。
先決條件
本文假定您已經(jīng)安裝了 IBM WebSphere ESB 6.0 和 IBM WebSphere Integration Developer 6.0。
WebSphere Enterprise Service Bus 簡(jiǎn)介
WebSphere Enterprise Service Bus 是允許應用程序以靈活方式進(jìn)行集成的平臺,可幫助企業(yè)實(shí)現其面向服務(wù)的體系結構(Service-Oriented Architecture,SOA)目標。ESB 允許服務(wù)使用者和服務(wù)提供者彼此進(jìn)行交互,而其間沒(méi)有任何直接依賴(lài)關(guān)系。在 ESB 中,需要其他應用程序的服務(wù)的應用程序稱(chēng)為“服務(wù)使用者”,而提供服務(wù)的應用程序稱(chēng)為“服務(wù)提供者”。ESB 將服務(wù)使用者和服務(wù)提供者分離開(kāi),務(wù)必注意的是,您可以更改服務(wù)使用者或服務(wù)提供者的接口定義,而不用修改另一方。
WebSphere Enterprise Service Bus 能夠執行以下主要任務(wù),從而將服務(wù)提供者與服務(wù)使用者分離開(kāi)來(lái):
- 請求和響應路由:服務(wù)提供者和服務(wù)使用者之間的全部通信都以消息的形式進(jìn)行。服務(wù)使用者請求服務(wù),并針對 ESB 創(chuàng )建請求消息。ESB 平臺將充當提供者和使用者之間的傳輸媒介。ESB 將標識實(shí)際的服務(wù)提供者并將請求傳遞給提供者。服務(wù)提供者完成操作后,將以消息格式生成響應,并隨后將其返回給 ESB。ESB 將響應傳輸回實(shí)際的使用者。在整個(gè)通信過(guò)程中,提供者和使用者都不會(huì )意識到彼此的存在。只有 ESB 知道將請求和響應消息路由到何處。
- 消息轉換:ESB 允許提供者和使用者使用自己的協(xié)議和消息傳遞格式。他們并沒(méi)有必要遵循相同的協(xié)議和消息格式——ESB 將負責處理不同的協(xié)議和不同的消息格式。它知道如何將一種消息格式轉換為另一種消息格式,也知道如何將使用一種協(xié)議的消息轉換為使用另一種協(xié)議的消息。
下圖說(shuō)明了 ESB 的角色:
圖 1. ESB 概略圖
在 WSDL 中創(chuàng )建接口
我們從將攝氏度轉換為華氏度的示例服務(wù)組件著(zhù)手進(jìn)行演示。Temperature Converter 組件具有名為 convert 的方法,該方法接受以攝氏度表示的給定溫度,并將返回對應的華氏度溫度作為輸出。我們將使用 JavaServer Pages (JSP) 客戶(hù)機進(jìn)行測試,此客戶(hù)機通過(guò)獨立引用訪(fǎng)問(wèn)該服務(wù)組件。
在 WebSphere ESB 中發(fā)布的每個(gè)服務(wù)組件都具有一個(gè)定義良好的接口。我們可以在 WebSphere Integration Developer 中為上述服務(wù)組件創(chuàng )建接口 TemperatureConverterInterface:
圖 2. 使用 New Java Interface Wizard 創(chuàng )建 WSDL 接口
如下所示,向上述接口添加具有一個(gè)輸入和一個(gè)輸出的請求與響應操作。此處的操作名為 convert,輸入為 Celsius as double,輸出為 Fahrenheit as double。
圖 3. 向接口添加操作
從 WSDL 通過(guò) Assembly Editor 將服務(wù)組件作為 POJO 實(shí)現
接下來(lái),我們?yōu)樯鲜鼋涌趧?chuàng )建一個(gè)傳統 Java 對象 (POJO) 實(shí)現。我們可以在 Assembly Editor 的幫助下采用 Java 創(chuàng )建實(shí)現(服務(wù)組件),如下所示。Assembly Editor 屬于 WebSphere Integration Developer,允許開(kāi)發(fā)人員通過(guò)接口(導入和導出)和綁定來(lái)連接 SCA 組件。我們將此實(shí)現命名為“TemperatureConverterImpl.java”。
圖 4. 使用 Assembly Editor 創(chuàng )建服務(wù)組件
接下來(lái),我們需要通過(guò)“Add Interface”將接口 TemperatureConverterInterface 與此實(shí)現相關(guān)聯(lián)。
圖 5. 將接口與生成的服務(wù)組件相關(guān)聯(lián)
現在接口已與組件關(guān)聯(lián)。我們可以通過(guò)使用“Generate Implementation”選項生成實(shí)現的框架。
圖 6. 為新服務(wù)組件生成實(shí)現
圖 7. 將實(shí)現添加到生成的框架中
我們需要在上述類(lèi)中添加 convert 方法的實(shí)現,如下所示:
清單 1. Convert 方法實(shí)現
public Double convert(Double celsius) {
double dCelsius = celsius.doubleValue();
double fahr;
fahr = (((0.9/0.5) * dCelsius) + 32);
return new Double(fahr);
}
|
將服務(wù)組件與獨立引用關(guān)聯(lián)
接下來(lái),我們將創(chuàng )建獨立引用,并將其與服務(wù)組件相關(guān)聯(lián),以便 JSP 客戶(hù)機能夠通過(guò)獨立引用訪(fǎng)問(wèn)該組件。
圖 8. 創(chuàng )建獨立引用
我們可以通過(guò)“Add Reference”按鈕將 TemperatureConverterInterface.wsdl 與獨立引用相關(guān)聯(lián)。缺省情況下,獨立引用將被命名為 TemperatureConverterInterfacePartner。
圖 9. 將獨立引用與服務(wù)組件連接
創(chuàng )建客戶(hù)機,并通過(guò)獨立引用訪(fǎng)問(wèn)服務(wù)
接下來(lái),我們需要開(kāi)發(fā)客戶(hù)機 JSP 來(lái)測試服務(wù)組件。此 JSP 將允許用戶(hù)輸入攝氏度值。隨后 JSP 會(huì )將該值傳遞給服務(wù),以將其轉換為華氏度,并最后顯示結果。
圖 10. 新 JSP 文件模板
將隨后使用下面所示的 ServiceManager 類(lèi)通過(guò) JSP 調用組件。
清單 2. JSP 實(shí)現
String cel = request.getParameter("celcius");
if(cel != null && cel.length() > 0){
try{
ServiceManager serviceManager = new ServiceManager();
Service service = (Service) serviceManager.locateService
("TemperatureConverterInterfacePartner");
Double celDouble = Double.valueOf(cel);
DataObject respObject = (DataObject) service.invoke("convert", celDouble);
if(respObject!= null){
out.println(respObject.getDouble("Fahrenheit"));
}
}catch(Exception e){
//handele it
}
}
|
打包并在 WebSphere ESB 中部署應用程序
組件和客戶(hù)機現在已經(jīng)準備好,可以打包并在 WebSphere ESB 中部署,以便進(jìn)行測試。將應用程序導出為 Integration Module EAR,如下所示。
圖 11. 將項目作為集成模塊導出
圖 12. 集成模塊導出
在 WebSphere ESB 中通過(guò) Admin Console 部署 EAR 文件,并在瀏覽器中訪(fǎng)問(wèn)其“URL”。
圖 13. 最終輸出
結束語(yǔ)
通過(guò)本文,您已經(jīng)了解了如何使用自底向上方法(從接口到實(shí)現)創(chuàng )建服務(wù)組件以及如何在 IBM WebSphere ESB 中發(fā)布它。另外,還了解了如何通過(guò)獨立引用從客戶(hù)機訪(fǎng)問(wèn)此服務(wù)組件。
|