扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
引言
本系列文章讨论使用 IBM WebSphere Business Services Fabric Version 6.0 创建组合业务服务的完整过程。第 1 部分介绍了组合业务服务的概念以及 WebSphere Business Services Fabric 如何支持这些服务的开发,第 2 部分 接着通过演示结果分析和设计步骤阐述了 WebSphere Business Services Fabric 如何可以帮助解决提出的业务问题。
在第 2 部分提供的案例研究中,您学习了虚构的 International Bank (INT Bank) 希望新的贷款处理应用程序基于申请贷款的客户的贷款额和存款额选择适当的信用信息服务提供程序。将要使用的两个服务提供程序为:
|
在第 3 部分中,为解决 INT Bank 的业务问题,在第一步中就创建了业务服务模型。在第 4 部分中,将逐步向您介绍使用 IBM Business Services Dynamic Assembler 组件(以下称为 Dynamic Assembler)组装和实现业务服务的流程,并在集成测试环境中进行单元测试。使用 Dynamic Assembler 可以将请求程序和实际服务提供程序之间的绑定推迟到运行时,并且可以由特定的参数确定绑定。
为演示动态组装和帮助您完成遵循的操作,本文提供了一个示例应用程序,其中包括两个不同的 Web 服务实现。
下面是组装和测试示例 CBS 的常规步骤。本文将详细阐述与这些步骤中每个步骤关联的任务:
本文假设您已阅读了本系列以前的文章。
|
A. 设置 CCIS 和 Credit Digger 示例 Web 服务
本文提供的 CCIS 和 CreditDigger 示例 Web 服务实现用于演示和测试目的。提供的企业应用程序存档文件 CreditVeriSrvcEAR 包括以下两个 Web 应用程序:
两个 Web 服务实现共享同一个 Web 服务接口,这样,Dynamic Assembler 可以在运行时动态选择其中任何一个。
要将示例 Web 服务部署到运行时环境并验证它们,请执行以下操作:
在 WebSphere Integration Developer 中,在任何透视图中打开 Server 视图,找到新版 WebSphere Business Services Fabric Server v6.0(图 1)。因为 WebSphere Business Services Fabric 服务器是以 WebSphere Process Server 为基础构建的,所以可以在此服务器实例上部署和测试一般的 SCA 模块(包括 BPEL 或中介)。
WebSphere Business Services Fabric V6.0.2 工具包内含有内置 Unit Test Environment (UTE)。在使用 UTE 之前,必须正确地配置安全信息。选择 WebSphere Business Services Fabric Server v6.0,将显示 Server Overview 面板(图 2)。
在 Security 部分中,分别在 User ID 和 Password 中为 Fabric 服务器输入用户名和密码。缺省 User ID 和 Password 的值分别为 admin
和 webify
(图 2)。
从 J2EE™ 透视图,将 CreditVeriSrvcEAR.ear 导入到工作区。对于 Target server,请选择 WebSphere Business Services Fabric Server v6.0(图 3)。
CreditVeriSrvcEAR.ear 包括以下两个 Web 模块:CreditVeriCD.war 和 CreditVeriCCIS.war。选中两个 Web 项目,并单击 Finish,启动导入(图 4)。
现在已将两个 Web 服务部署到了 Fabric 服务器,下面可以尝试测试它们了。请转到 WebContent/wsdl 下的任何 Web 项目,并找到 Web 服务的 wsdl 文件。(如图 6 所示,CCIS 和 Credit Digger Web 服务采用 loanAmount 和其他输入参数,并返回相应的信用记录。)右键单击 WSDL 文件,并选择 Web Service => Test with Web Service Explorer(图 5)。
输入如图 6 所示的参数,并单击 Go。通过成功调用 CCIS Web 服务后,您应收到产生的信用记录。
|
B. 使用 Dynamic Assembler 创建 CreditService SCA 模块
创建 SCA 模块
在 Business Integration 透视图中,右键单击并选择 New => Module project 以创建模块项目(图 7)。图 8 显示了此新模块项目中的结果构件。(如果您不熟悉 SCA 模块,请参见 WebSphere Integration Developer 信息中心和使用服务组件体系结构构建 SOA 解决方案,以获得详细信息。)
右键单击 Interfaces,以导入 CCIS 和 CreditDigger Web 服务 WSDL 文件及其依赖性资源(图 9)。FabricSCASample.zip 下载文件中可以找到示例 WSDL。
在 Business Integration 视图中双击 Assembly Diagram,以打开 Assembly Editor。将 Dynamic Assembler component(图 10)拖放到组装关系图,并将其重命名为 CreditDA
。Dynamic Assembler 组件是 WebSphere Business Services Fabric 提供的新 SCA 组件,可用于根据上下文、内容和契约信息从不同的注册服务实现中选择合适的服务端点。
要向新组件添加接口,请右键单击 CreditDA 组件,并选择 Add => Interface(图 11)。出现提示时,请选择 CreditVerificationSrvc 接口。
右键单击 CreditDA 组件。要为 CreditDA 组件生成实现,请右键单击该组件,并选择 Generate Implementation(图 12)。出现提示时,为实现选择缺省包。
构建 Dynamic Assembler 扩展模型
WebSphere Business Services Fabric V6.0.2 提供扩展框架,该框架使您能够插入 WebSphere Business Service Fabric 运行时在服务调用生命周期期间调用的自定义代码。扩展框架允许您覆盖缺省策略行为、激活事件和从有效负载提取上下文信息。接下来,将创建上下文提取器扩展,该扩展允许您从有效负载提取上下文信息,并将其添加到 Dynamic Assembler 上下文。基于上下文中提供的贷款数额和组织信息,Dynamic Assembler 将服务请求绑定到 CCIS 或 CreditDigger。(有关其他扩展接口,请参见 WebSphere Business Services Fabric 信息中心。)
在创建上下文提取器之前,需要将所需的 WebSphere Business Services Fabric Java™ 库导入到项目构建路径。右键单击 CreditSrvc 模块项目,并选择 Properties(图 13)。
从左侧的属性列表中,选择 Java Build Path,然后选择 Libraries 选项卡(图 14)。
单击 Add External JARs 以添加以下三个 Java 库,它们位于 <WebSphere Integration Developer 安装路径>\runtimes\bi_v6\lib\ext 下:
将 Java component 拖放到 Assembly Diagram,将其重命名为 CreditContextExtractor
。您可以将 Java 代码扩展放入此组件。
右键单击 CreditContextExtractor 组件,并选择 Add => Interface,将 com.ibm.websphere.fabric.da.plugin.ContextExtractor 接口添加到该组件(图 16)。
下一个任务是基于导入接口实现 ContextExtractor。右键单击 CreditContextExtractor 以生成实现。清单 1 显示了缺省生成的代码。
public class CreditContextExtractorImpl implements ContextExtractor { /** * Default constructor. */ public CreditContextExtractorImpl() { super(); } private ContextExtractor getMyService() { return (ContextExtractor) ServiceManager.INSTANCE.locateService("self"); } public Context extractContext(PendingRequest arg0) throws UnexpectedContentException { //TODO Needs to be implemented. return null; } } |
您需要将代码添加到 extractContext 方法,以便从服务请求正文提取 loanAmount 和 organizationId 值。organizationId 表示此请求源自哪一个组织(INT 银行、INT-CA 或 INT-TX)。图 17 显示了服务请求正文格式,清单 2 显示了从 SOAP 请求正文检索 loanAmount 和 organizationId 的代码。
//Get message body from request DataObject body = arg0.getMessageBody(); DataObject creditRequest = ((DataObject)body.getSequence(0).getValue(0)); //Print out the content of data object via SdoUtil provided by Fabric System.out.println(SdoUtil.printTree(creditRequest)); //Retrieve loanAmount and organizationId value Integer loanAmount = (Integer) creditRequest.get("loanAmount"); Integer organizationId = (Integer)creditRequest.get("organizationId"); |
清单 3 显示了数据对象 CreditRequestBO 的示例结果输出。
<dataobject> CreditRequestBO companyName: IBM <simple> (java.lang.String); companyDUNSId: 123456 <simple> (java.lang.String); loanAmount: 10000 <simple> (java.lang.Integer); organizationId: 1 <simple> (java.lang.Integer); </dataobject> |
从请求检索 loanAmount 和 organizationId 参数值后,可以将参数传入 Dynamic Assembly 组件,以用于端点选择决策。现在需要将 loanAmount 和 organizationId 值添加到上下文(如清单 4 所示),这样 Dynamic Assembler 便可以使用此信息选择端点。
注意,在此示例应用程序中,从请求检索的 organizationId 只是用于简化原始组织名称信息输入的外部表示形式。您需要将外部 organizationId 映射为内部组织实例 ID(从第 3 部分中创建的组织实例),这样 WebSphere Business Services Fabric 就可以识别它。在图 18 所示的组织 Property 窗口中可以找到组织实例的 URI 值(打开 Subscriber Explorer 视图,然后选择您需要检查的组织实例)。为便于参考,下表列出了 organizationId 和组织实例 ID URI 之间的映射。WebSphere Business Services Fabric 提供了允许您查询此类信息的 SDK。(为简化此示例,在 Content Extractor 组件中对此信息进行了硬编码。)
organizationId (输入参数) |
组织名称 | 组织实例 ID |
---|---|---|
0 | International Bank | fc://fabric/subscriber/organization-inst#82fa27a2-702e-42ae-88c7-41c134e10643 |
1 | International Bank of California | fc://fabric/subscriber/organization-inst#4cbd859b-52fd-4f48-b8b3-381e8ac6dadb |
2 | International Bank of Texas | fc://fabric/subscriber/organization-inst#eb5357a3-c3a6-4853-bca5-fcd3fd42bf9f |
需要将 loanAmount 值绑定到在第 3 部分中创建的 LoanAmountAssertion。在 Property 窗口中可以找到 LoanAmountAssertion URI 值。从 Business Services 视图,选择任意端点(图 19),然后选择 Assertions 选项卡。选择 LoanAmountAssertion,并单击 Edit 按钮,调出属性窗口(图 20)。
//Get the request context Context context = arg0.getContext(); //Bind the loanAmount value to LoanAmountAssertion final String LOANAMOUNT_URI ="http://intbank/loan/loanorigination#loanAmount"; context.setSelectionProperty(LOANAMOUNT_URI, new TypedValue(loanAmount.toString())); //Map the organizationId value to organization instance URI String organizationINST =null; switch (organizationId.intValue()) { // 0 => International Bank case 0: organizationINST=INTLBANK_ID; break; //1 => International Bank of California case 1: organizationINST=INTLBANKCA_ID; break; //2 => International Bank of Texas case 2: organizationINST=INTLBANKTX_ID; break; //Otherwise, invalid input default: System.out.println("No Valid Input for Organization ID");break; } //Bind to organization instance URI to organization final String ORG_URI = "http://www.webifysolutions.com/2005/10/catalog/subscriber#Organization"; context.setSelectionProperty(ORG_URI, new TypedValue(organizationINST)); return context; |
下载部分提供了完整的参考代码 (CreditContextExtractorImpl.java)。
现在可以在 CreditSrcs SCA 模块中组装组件了。这将通过连接完成此任务。将 Export component 拖放到组装关系图,将其重命名为 CreditDAExport(图 21)。
为导出组件添加一个接口。在本例中,请指定 CreditVerificationSrvc 接口(图 22)。
将这三个组件连接在一起(图 23)。此时,便完成了需要在 Business Integration 透视图执行的所有工作。
|
C. 将 SCA 模块导入到 Composition Studio
本部分中的任务将基于从第 3 部分创建的项目构件,需要对本文引入的 SCA 模块进行略微更改。即,将业务服务与新的 SCA 模块关联:
切换到 Business Service 透视图。
右键单击 Composite Service,然后选择 New => Composite Service(图 25)。
在 New Composite Service 面板(图 26)中,为这些字段选择以下值:
单击 Finish 开始导入。
导入 CreditSrvc 组合服务后,现在需要将该服务与利用它的 Business Service 关联。选择 Business Service => Process Service => Loan Processing Service(图 27)。Process Service 窗口将显示(图 28)。
转到 Interfaces 选项卡,选择 CreditVerifiationSrvc 接口,并单击 Edit(图 28)。
当 Edit Interface 对话框显示时,将模块从 <Fabric Hub> 更改为 CreditSrvc SCA 模块(图 29)。在这里,WebSphere Business Services Fabric V6.0.2 中的 SCA 模块将替换 Version 6.0 中的 <Fabric Hub> 模块。单击 OK 完成操作。
在 Business Service 透视图中完成所有的更改后,请单击 Submit Changelist 按钮,以提交更改(图 30)。
在 Fabric 6.0.2 工具包中,系统会自动批准 UTE 库 (BSR) 中的更改。提交更改列表后,请单击 Update Project 按钮,以同步 BSR 中的内容(图 31)。
|
D. 在 SCA 模块中执行组件测试
现在可以运行组件测试,以确保所有组件都能够按预期工作。
切换到 Business Integration 透视图,并单击 Business Explorer 视图中的组装关系图,以打开 Assembly Editor。
右键单击 CreditDAExport 组件并选择 Test Component(图 32)。
从 Events 选项卡,为这些输入请求参数输入以下值(图 33):
IBM
1234
10000
1
单击 Continue。
在 Deployment location 中选择 WebSphere Business Services Fabric Server v6.0(图 34)。
在 User ID 和 Password 中为组件测试输入用户名和密码(缺省值分别为 admin
和 webify
)(图 35)。
图 36 显示了执行结果。在 Console 选项卡中,您可以看到按照提供的测试数据选择了 Credit Digger Service。根据上一篇文章定义的场景,当 loanAmount 大于 10000 并且组织为 International Bank of California(organizationId =1)时,则应选择并调用 Credit Digger 服务。有关其他测试场景,请参阅第 3 部分。
|
结束语
在本文中,您学习了如何使用 Dynamic Assembler SCA 模块在 WebSphere Business Services Fabric 项目中通过动态组装执行服务。还学习了如何使用 Dynamic Assembler 扩展从请求消息正文提取数据,并将该信息提供给 Dynamic Assembler,以便适应动态端点选择决策。最后介绍了如何使用 Unit Test Environment 测试组件,以确保代码正常工作。
有关 WebSphere Business Services Fabric SCA 编程(包含其他 Version 6.0.2 Dynamic Assembler 扩展)的更多学习资料,请参见 IBM WebSphere Business Services Fabric 信息中心。
本文是关于使用 WebSphere Business Services Fabric 开发自适应业务服务系列文章的最后一篇。通过本系列文章提供的信息,您学习了组合业务服务的概念,现在应该可以构建和测试应用程序的这些动态服务,以交付基于上下文和策略的业务功能。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者