IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  SOA and Web services | Java technology  >

WebSphere ESB 入门:创建 POJO 并将其作为服务发布

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码


级别: 初级

Vasudevan Thiyagarajan (vthiyaga@in.ibm.com), 系统工程师, IBM India Pvt. Ltd.

2007 年 3 月 20 日

了解如何从传统 Java 对象(Plain Old Java™ Object,POJO)开发服务组件,并在 IBM® WebSphere Enterprise Service Bus 中发布。采用 Web 服务描述语言 (WSDL) 定义接口,并使用 Java™ 实现。了解如何将服务组件与独立引用相关联,以及如何使用独立引用跨 ESB 访问服务。

先决条件

本文假定您已经安装了 IBM WebSphere ESB 6.0 和 IBM WebSphere Integration Developer 6.0。

WebSphere Enterprise Service Bus 简介

WebSphere Enterprise Service Bus 是允许应用程序以灵活方式进行集成的平台,可帮助企业实现其面向服务的体系结构(Service-Oriented Architecture,SOA)目标。ESB 允许服务使用者和服务提供者彼此进行交互,而其间没有任何直接依赖关系。在 ESB 中,需要其他应用程序的服务的应用程序称为“服务使用者”,而提供服务的应用程序称为“服务提供者”。ESB 将服务使用者和服务提供者分离开,务必注意的是,您可以更改服务使用者或服务提供者的接口定义,而不用修改另一方。

WebSphere Enterprise Service Bus 能够执行以下主要任务,从而将服务提供者与服务使用者分离开来:

  1. 请求和响应路由:服务提供者和服务使用者之间的全部通信都以消息的形式进行。服务使用者请求服务,并针对 ESB 创建请求消息。ESB 平台将充当提供者和使用者之间的传输媒介。ESB 将标识实际的服务提供者并将请求传递给提供者。服务提供者完成操作后,将以消息格式生成响应,并随后将其返回给 ESB。ESB 将响应传输回实际的使用者。在整个通信过程中,提供者和使用者都不会意识到彼此的存在。只有 ESB 知道将请求和响应消息路由到何处。
  2. 消息转换:ESB 允许提供者和使用者使用自己的协议和消息传递格式。他们并没有必要遵循相同的协议和消息格式——ESB 将负责处理不同的协议和不同的消息格式。它知道如何将一种消息格式转换为另一种消息格式,也知道如何将使用一种协议的消息转换为使用另一种协议的消息。

下图说明了 ESB 的角色:


图 1. ESB 概略图
ESB 概略图

在 WSDL 中创建接口

我们从将摄氏度转换为华氏度的示例服务组件着手进行演示。Temperature Converter 组件具有名为 convert 的方法,该方法接受以摄氏度表示的给定温度,并将返回对应的华氏度温度作为输出。我们将使用 JavaServer Pages (JSP) 客户机进行测试,此客户机通过独立引用访问该服务组件。

在 WebSphere ESB 中发布的每个服务组件都具有一个定义良好的接口。我们可以在 WebSphere Integration Developer 中为上述服务组件创建接口 TemperatureConverterInterface


图 2. 使用 New Java Interface Wizard 创建 WSDL 接口
使用 New Java Interface Wizard 创建 WSDL 接口

如下所示,向上述接口添加具有一个输入和一个输出的请求与响应操作。此处的操作名为 convert,输入为 Celsius as double,输出为 Fahrenheit as double


图 3. 向接口添加操作
向接口添加操作


从 WSDL 通过 Assembly Editor 将服务组件作为 POJO 实现

接下来,我们为上述接口创建一个传统 Java 对象 (POJO) 实现。我们可以在 Assembly Editor 的帮助下采用 Java 创建实现(服务组件),如下所示。Assembly Editor 属于 WebSphere Integration Developer,允许开发人员通过接口(导入和导出)和绑定来连接 SCA 组件。我们将此实现命名为“TemperatureConverterImpl.java”。


图 4. 使用 Assembly Editor 创建服务组件
使用 Assembly Editor 创建服务组件

接下来,我们需要通过“Add Interface”将接口 TemperatureConverterInterface 与此实现相关联。


图 5. 将接口与生成的服务组件相关联
将接口与生成的服务组件相关联

现在接口已与组件关联。我们可以通过使用“Generate Implementation”选项生成实现的框架。


图 6. 为新服务组件生成实现
为新服务组件生成实现

图 7. 将实现添加到生成的框架中
将实现添加到生成的框架中

我们需要在上述类中添加 convert 方法的实现,如下所示:


清单 1. Convert 方法实现
				
public Double convert(Double celsius) {
	double dCelsius = celsius.doubleValue();
	double fahr;
	fahr = (((0.9/0.5) * dCelsius) + 32);
	return new Double(fahr);
}		

将服务组件与独立引用关联

接下来,我们将创建独立引用,并将其与服务组件相关联,以便 JSP 客户机能够通过独立引用访问该组件。


图 8. 创建独立引用
创建独立引用

我们可以通过“Add Reference”按钮将 TemperatureConverterInterface.wsdl 与独立引用相关联。缺省情况下,独立引用将被命名为 TemperatureConverterInterfacePartner


图 9. 将独立引用与服务组件连接
将独立引用与服务组件连接

创建客户机,并通过独立引用访问服务

接下来,我们需要开发客户机 JSP 来测试服务组件。此 JSP 将允许用户输入摄氏度值。随后 JSP 会将该值传递给服务,以将其转换为华氏度,并最后显示结果。


图 10. 新 JSP 文件模板
新 JSP 文件模板

将随后使用下面所示的 ServiceManager 类通过 JSP 调用组件。


清单 2. JSP 实现
				
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 中部署应用程序

组件和客户机现在已经准备好,可以打包并在 WebSphere ESB 中部署,以便进行测试。将应用程序导出为 Integration Module EAR,如下所示。


图 11. 将项目作为集成模块导出
将项目作为集成模块导出

图 12. 集成模块导出
将项目作为集成模块导出

在 WebSphere ESB 中通过 Admin Console 部署 EAR 文件,并在浏览器中访问其“URL”。


图 13. 最终输出
最终输出

结束语

通过本文,您已经了解了如何使用自底向上方法(从接口到实现)创建服务组件以及如何在 IBM WebSphere ESB 中发布它。另外,还了解了如何通过独立引用从客户机访问此服务组件。






回页首


下载

描述名字大小下载方法
Source codeTemp-Conv-Module.ear16KBHTTP
关于下载方法的信息


参考资料



关于作者

Vasudevan Thiyagarajan 是印度班加罗尔的一位 IBM 系统工程师,广泛参与 IBM WebSphere 家族中电信相关产品的开发。他拥有计算机应用硕士学位。他感兴趣的领域包括分布式计算和中间件技术。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款