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中国
相关推荐
-
工具和实践促进意义SOA ALM流程的创建
SOA ALM时代已经到来,它必须反映这样的事实:现代应用程序逐渐由重用组件和重新编排工作流而组成。
-
如何透过业务和技术看SOA的发展
随着SOA发展的深入,各种SOA相关技术标准也随之发展和完善。面对庞大而复杂的SOA相关技术标准,我们如何来有选择的使用它们呢?
-
SOA架构下补偿模型驱动的安全苛求软件开发
随着我国高速铁路的快速发展,传统的计算机联锁软件开发方法在灵活性、可维护性、安全性以及开发效率上都显露出不足,怎样才能弥补这一不足呢?
-
浅谈基于SOA架构的服务集成技术研究
在近几年软件行业的发展中,面向服务架构(SOA)成为了当下的热门话题。那么对于SOA架构的服务集成你又了解多少?