在SOA开发中使用WBSF动态调用业务服务,第2部分(上)2010-04-11 IBM 周志远,郭迎春,王强引言在上一篇文章中,我们介绍了WBSF动态调用业务服务的基本概念和工作原理。WBSF让我们在SOA 开发中能够根据服务策略动态调用业务服务。WBSF V6.02 提供了SCA 编程模型,让开发业务服务更加灵活,方便。本文通过一个具体的例子,介绍如何通过 WBSF V6.02 的 SCA 编程模型动态调用业务服务。我们将基于上下文属性制定服务策略;在ResponseListener 扩展中设置基于服务内容的断言;通过 ContextExtractor 扩展更新事务中的上下文属性;业务场景与建模业务场景:考虑一个如下的银行帐户余额查询的业务场景:用户向帐户查询系统提交用户名和帐户名,系统首先通过授权服务获取用户服务级别,接着调用帐户查询服务,将账户余额信息返回给客户。对于通过门户网站通道进行的查询,授权服务采用 HTTP 基本认证方式;对于通过 WebService 通道进行的查询,授权服务采用 HTTPS 客户机认证方式。对于不同服务级别的用户,将使用不同处理能力的查询服务。业务建模:业务流程:AccountQueryProcess:输入为用户名与用户帐号。首先调用 AuthorizationService获取用户服务级别;然后调用AccountQueryService查询帐户余额作为返回。Web Services:AuthorizationService:输入为用户名,返回用户服务级别AccountQueryService:输入为帐户名,返回帐户余额准备 Web Service在WID中创建AccountQueryModule项目打开 WID,切换至Business Integration Perspective,新建Module 如图 1 所示。

图 1 创建AccountQueryModule项目创建Authorization Service:在AccountQueryModule中新建AuthorizaitonService 接口,该接口包括getServiceLevel方法,如图 2 所示:

图 2 创建AuthorizationService 接口打开 AccountQueryModule 的 Assembly Diagram,添加 AuthorizationService_HTTPBA 组件,该组件模拟采用 HTTP 基本认证方式的授权服务。为该组件添加 AuthorizaitonService 接口,如图 3 所示。双击组件,实现类型选择”java”。主要实现代码如示例 1 所示。示例 1 AuthorizationService_HTTPBA 组件实现
public class AuthorizationService_HTTPBAImpl {
public String getServiceLevel(String userId) {
return "SILVER";
}
}

图 3 为组件添加 AuthorizationService 接口