在SOA开发中使用WBSF动态调用业务服务(上)

日期: 2008-05-08 作者:周志远郭迎春王强 来源:TechTarget中国

  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


  在 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 接口
 
  按照同样的步骤,在 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 导出
 
  创建 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 项目


  在 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 名字空间
 
  在 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 项目服务元数据列表
 
  制定服务策略


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



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



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



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


  为服务 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 环境中。


  创建 AccountQuery Service 业务服务


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



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



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



  图 18 创建流程服务
 
  在通道选项中添加门户网站通道和 Web Service 通道,如图 19 所示:




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



  图 20 为流程服务添加使用者角色
 
  点击”Finish”按钮,完成业务服务创建。


  向 WBSF 发布 Fabric 项目更新


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


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


  为使用者登记 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 中国软件开发实验室 – 中国新技术中心(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。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

周志远
周志远

郭迎春
郭迎春

王强
王强

北京华油天然气有限公司CIO

相关推荐