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

developerWorks 中国  >  SOA and Web services | WebSphere  >

在 SOA 开发中使用 WBSF 动态调用业务服务,第 2 部分(上)

WBSF V6.02 开发实例

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


周 志远 (zzyuan@cn.ibm.com), 软件工程师, IBM 中国开发试验室
郭 迎春 (guoyingc@cn.ibm.com), 软件工程师, IBM中国软件实验室
王 强 (wangq@cn.ibm.com), IBM 中国软件开发实验室 软件工程师

2008 年 2 月 21 日

WBSF(WebSphere Business Services Fabric)让我们在 SOA 开发中能够根据服务策略动态调用业务服务。本文通过一个具体的例子,介绍如何通过 WBSF V6.02 的 SCA 编程模型动态调用业务服务。

引言

在上一篇文章中,我们介绍了 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

  1. 在 WID 中创建 AccountQueryModule 项目
    打开 WID,切换至 Business Integration Perspective,新建 Module 如图 1 所示。

图 1 创建 AccountQueryModule 项目

  1. 创建 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 接口

按照同样的步骤,在 Module 中添加实现 AuthorizationService 接口的 java 组件 AuthorizationService_HTTPS,该组件模拟采用 HTTPS 认证方式的授权服务。其主要实现代码如示例 2 所示。

示例 2 AuthorizationService_HTTPS 组件实现

public class AuthorizationService_HTTPSImpl {
	public String getServiceLevel(String userId) {
		return "GOLDEN";
	}
}

为上面创建的两个组件生成 web service 导出,如图 4 所示:


图 4 为 AuthorizationService 组件生成 Web Service 导出

  1. 创建 AccountQuery Service::

在 AccountQueryModule 中新建 AccountQueryService 接口,该接口包括 getAmount 方法,如图 5 所示:


图 5 AccountQueryService 接口

按照与 AuthorizationService 同样的方法,在 Module 中创建实现 AccountQueryService 接口的 java 组件:AccountQueryService_Advanced, AccountQueryService_Basic,并为之生成 Web Service 导出。

AccountQueryService_Advanced 组件模拟处理能力较强的查询服务,其实现的主要代码如示例 3 所示。

public class AccountQueryService_AdvancedImpl {
	public Integer getAmount(String accountId) {
		return new Integer(5000);
	}
}

AccountQueryService_Basic 组件模拟普通处理能力的查询服务,其实现的主要代码如示例 4 所示。

示例 4 AccountQueryService_Basic 组件实现

public class AccountQueryService_BasicImpl {
	public Integer getAmount(String accountId) {
		return new Integer(2000);
	}
}





回页首


创建 Fabric 项目

  1. 在 WBSF 中配置 Fabric 项目

登录 Fabric Web 控制台,依次选择”My Service”=>” Governance Manager”=>”Configure Projects”,点击在右下角的”Create Project”按钮,创建 BankingAccount 项目,项目配置如图 6 所示:


图 6 在 Governance Manager 中创建 BankingAccount 项目

选择”Configure Projects”,点击进入 BankingAccount 项目,在”Namespace” Tab 中为项目创建 Instance 类型的 BankingAccount_Instance 名称空间,配置如图 7 所示:


图 7 配置 instance 名字空间

同样为 BankingAccount 项目创建 Enrollment 类型的 BankingAccount_Enrollment 名称空间,如图 8 所示:


图 8 配置 Enrollment 名字空间

  1. 在 WID 中使用 Composite Studio 向 Fabric 项目添加服务元数据

打开 WID,切换至 Business Service Perspective,右键选择”新建”=>”Fabric 项目”启动 Fabric 项目创建向导,如图 9 所示:


图 9 在 Composite Studio 中创建 Fabric 项目

在向导中选择连接到步骤 1 中创建的 BankingAccount 项目,如图 10 所示:


图 10 选择连接到 BSR 的 Fabric 项目

在向导中点击”Finish”按钮,完成项目创建,Composite Studio 将 Business Service Repository 中存储的 BankingAccount 项目同步至本地。

在 Composite Studio 中右键单击 BankingAccountFAC 项目,选择”新建”=>”组合服务”,启动组合服务创建向导,将 AccountQueryModule 中的服务元数据导入至 BankingAccountFAC 项目的 BankingAccount_Instance 名字空间下,如图 11 所示:


图 11 导入组合服务

点击”Finish”按钮,完成组合服务导入,将 AccountQueryService 的两个 endpoint 名称分别修改为 AccountQueryService_Advanced, AccountQueryService_Basic,

将 AuthorizationService 的两个 endpoint 名称分别修改为

AuthorizationService_HTTPBA, AuthorizationService_HTTPS,生成的服务元数据如图 12 所示:


图 12 Fabric 项目服务元数据列表

  1. 制定服务策略

在 Business Service Perspective 中选择业务资源管理器,右键单击 BankingAccountFAC 项目,选择”新建”=>”策略”, 启动策略创建向导,配置 Policy 如图 13 所示:


图 13 新建服务策略

点击”Next”按钮,在策略上下文对话框中,选择匹配的上下文对象为”门户网站通道”,如图 14 所示:


图 14 为策略添加上下文条件

点击”Finish”, 完成 Policy 创建,选择 Policy 的合同 Tab,在”安全性”中添加 HTTP 基本认证断言,其值选择”必需”,如图 15 所示:


图 15 在合同中添加 HTTP 基本认证安全性断言

按照同样的步骤,创建 ChannelSecurityPolicy_HTTPS 策略,在上下文页中选择 Web Service 通道,在合同页中添加 HTTPS 客户机认证断言,其值选择”必需”。

  1. 为服务 endpoint 设置 assertion

在 Composite Studio 中选择业务服务资源管理器,双击 AuthorizationService_HTTPBA endpoint,在断言 Tab 中添加 HTTP 基本认证安全性断言,在环境 Tab 中将 endpoint 添加至 Default 环境中。

以同样的步骤,为 AuthorizationService_HTTPS endpoint 添加 HTTPS 客户机认证安全性断言,并将其添加至 Default 环境。

以同样的步骤,在 AccountQueryService_Advanced endpoint 的断言 Tab 中选择”互操作性”栏,添加”工作单元”断言,其值设为 400,我们用此断言表明服务的处理能力大于 400 个工作单元。同样将 endpoint 添加至 Default 环境中。

以同样的步骤,为 AccountQueryService_Basic endpoint 添加”工作单元”断言,其值设为 200,同样将 endpoint 添加至 Default 环境中。

  1. 创建 AccountQuery Service 业务服务

在业务服务资源管理器中右键单击 BankingAccountFAC 项目,选择”新建”=>”应用程序套件”,如图 16 所示:


图 16 新建应用程序套件

在业务服务资源管理器中右键单击 BankingAccountFAC 项目,选择”新建”=>”应用程序”,如图 17 所示:


图 17 创建应用程序

在业务服务资源管理器中右键单击 BankingAccountFAC 项目,选择”新建”=>”业务服务”,启动业务服务向导。在服务类别中选择”流程服务”,具体配置如图 18 所示:


图 18 创建流程服务

在通道选项中添加门户网站通道和 Web Service 通道,如图 19 所示:


图 19 为流程服务添加通道

在角色选项中添加”客户”角色,如图 20 所示。这就规定了只有属于客户角色的用户能够预订该业务服务。


图 20 为流程服务添加使用者角色

点击”Finish”按钮,完成业务服务创建。

  1. 向 WBSF 发布 Fabric 项目更新

在 Composite Studio 的”存储库更改”视图中,右键单击 BankingAccountFAC, 选择”提交更改列表”,提交所有的更改。

登录 WBSF Web 控制台,选择”Governance Manager”=>”管理更改”,查找到上面提交的更改,批准并发布提交的更改。

  1. 为使用者登记 AccountQuery 业务服务

登录 WBSF Web 控制台,选择”Subscriber Manager”=>”管理注册”,在组织中选择”IBM”, 为其注册 BankingAccountApp 下的 /AccountQuery Service 业务服务

转到” Subscriber Manager”=>”管理订户”, 点击查看 IBM 组织中的 admin 用户,确保其所属角色中包含”Customer”,这样 admin 用户才能预订 AccountQuery Service 服务。

转到” Subscriber Manager”=>”管理预订”,选择组织为 IBM,为用户 admin 预订通过 Portal 通道和 WS 通道使用 AccountQuery Service 服务,如图 21 所示:


图 21 预订业务服务

转到” Subscriber Manager”=>”管理订户”,点击查看 IBM 组织中的 admin 用户,在”预订”Tab 中点击右下角”保存预订”按钮,然后点击左上角”查看预订按钮”,可以查看 admin 分别通过 Portal Channel 和 WS Channel 预订 AccountQuery Service 的 Subscription ID,如图 22 所示:


图 22 查看订户的预订列表

由于篇幅的问题,本文分为两部分,请您继续访问下半部分



参考资料

学习

获得产品和技术
  • 使用 IBM 试用软件 开发您的下一个项目,可下载或索取 DVD 光盘。


讨论


作者简介

周志远,工作在 IBM 中国软件开发实验室 - 中国新技术中心(China Emerging Technology Institute),从事 Incubator 及 SOA 相关项目的工作。他的邮件是zzyuan@cn.ibm.com。


郭迎春,IBM 中国软件实验室(CSDL BJ)的成员,有多年 Java 开发经验,目前主要研究方向为 SOA、CBS(Composite Business Service)。你可以通过 guoyingc@cn.ibm.com 联系她。


王强IBM软件工程师,工作在IBM中国软件开发实验室 - SOA Design Center,从事Incubator及 SOA ,Grid项目的工作,对J2EE架构、 SOA 架构、MDA/MDD以及网格计算等技术有较深入的研究。联系方式:wangq@cn.ibm.com




对本文的评价










回页首


IBM、IBM 徽标和 WebSphere 是 IBM 在美国和 / 或其他国家 / 地区的注册商标。 Java 和所有基于 Java 的商标都是 Sun Microsystems, Inc. 在美国和 / 或其他国家 / 地区的商标。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

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