科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道使用 WebSphere Business Services Fabric 开发自适应组合业务服务,第 4 部分: 使用 Dynamic Assembler SC

使用 WebSphere Business Services Fabric 开发自适应组合业务服务,第 4 部分: 使用 Dynamic Assembler SC

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文继第 3 部分的组合业务服务建模、本体编辑和策略模拟之后,提供一个分步示例,演示如何使用 Business Services Dynamic Assembler SCA 组件在 IBM® WebSphere® Business Services Fabric 工具环境中组装服务

作者:ibm 来源:ibm 2007年10月6日

关键字: 应用 技术 WEBSPHERE 中间件

  • 评论
  • 分享微博
  • 分享邮件

引言

本系列文章讨论使用 IBM WebSphere Business Services Fabric Version 6.0 创建组合业务服务的完整过程。第 1 部分介绍了组合业务服务的概念以及 WebSphere Business Services Fabric 如何支持这些服务的开发,第 2 部分 接着通过演示结果分析和设计步骤阐述了 WebSphere Business Services Fabric 如何可以帮助解决提出的业务问题。

在第 2 部分提供的案例研究中,您学习了虚构的 International Bank (INT Bank) 希望新的贷款处理应用程序基于申请贷款的客户的贷款额和存款额选择适当的信用信息服务提供程序。将要使用的两个服务提供程序为:

  • Customer Credit Information System (CCIS),它是 INT Bank 的内部应用程序。
  • Credit Digger,它是以提供高质量客户信用信息著称的外部服务。

更新文章
本系列文章的前一篇文章第 3 部分:CBS 建模、本体编辑和策略模拟自从首次发布以来已经进行了更新,以反映 WebSphere Business Services Fabric V6.0.2。

第 3 部分中,为解决 INT Bank 的业务问题,在第一步中就创建了业务服务模型。在第 4 部分中,将逐步向您介绍使用 IBM Business Services Dynamic Assembler 组件(以下称为 Dynamic Assembler)组装和实现业务服务的流程,并在集成测试环境中进行单元测试。使用 Dynamic Assembler 可以将请求程序和实际服务提供程序之间的绑定推迟到运行时,并且可以由特定的参数确定绑定。

为演示动态组装和帮助您完成遵循的操作,本文提供了一个示例应用程序,其中包括两个不同的 Web 服务实现。

下面是组装和测试示例 CBS 的常规步骤。本文将详细阐述与这些步骤中每个步骤关联的任务:

  1. 设置 CCIS 和 Credit Digger 示例 Web 服务
  2. 使用 Dynamic Assembler 创建 CreditService SCA 模块
  3. 将 SCA 模块导入到 Composition Studio
  4. 在 SCA 模块上执行组件测试

本文假设您已阅读了本系列以前的文章





回页首


A. 设置 CCIS 和 Credit Digger 示例 Web 服务

本文提供的 CCIS 和 CreditDigger 示例 Web 服务实现用于演示和测试目的。提供的企业应用程序存档文件 CreditVeriSrvcEAR 包括以下两个 Web 应用程序:

  • CreditVeriCD 包括 Credit Digger Web 服务。
  • CreditVeriCCIS 包括 Customer Credit Information System Web 服务。

两个 Web 服务实现共享同一个 Web 服务接口,这样,Dynamic Assembler 可以在运行时动态选择其中任何一个。

要将示例 Web 服务部署到运行时环境并验证它们,请执行以下操作:

  1. 在 WebSphere Integration Developer 中,在任何透视图中打开 Server 视图,找到新版 WebSphere Business Services Fabric Server v6.0(图 1)。因为 WebSphere Business Services Fabric 服务器是以 WebSphere Process Server 为基础构建的,所以可以在此服务器实例上部署和测试一般的 SCA 模块(包括 BPEL 或中介)。



    图 1. WebSphere Integration Developer 中的 Server 视图
    图 1. WebSphere Integration Developer 中的 Server 视图

  2. WebSphere Business Services Fabric V6.0.2 工具包内含有内置 Unit Test Environment (UTE)。在使用 UTE 之前,必须正确地配置安全信息。选择 WebSphere Business Services Fabric Server v6.0,将显示 Server Overview 面板(图 2)。

  3. 在 Security 部分中,分别在 User ID 和 Password 中为 Fabric 服务器输入用户名和密码。缺省 User ID 和 Password 的值分别为 adminwebify(图 2)。



    图 2. 在服务器概要中更改安全信息
    图 2. 在服务器概要中更改安全信息

  4. 从 J2EE™ 透视图,将 CreditVeriSrvcEAR.ear 导入到工作区。对于 Target server,请选择 WebSphere Business Services Fabric Server v6.0(图 3)。



    图 3. 将示例 Web 服务项目导入到工作区
    图 3. 将示例 Web 服务项目导入到工作区

  5. CreditVeriSrvcEAR.ear 包括以下两个 Web 模块:CreditVeriCD.warCreditVeriCCIS.war。选中两个 Web 项目,并单击 Finish,启动导入(图 4)。



    图 4. EAR 模块中的两个 Web 项目
    图 4. EAR 模块中的两个 Web 项目

  6. 现在已将两个 Web 服务部署到了 Fabric 服务器,下面可以尝试测试它们了。请转到 WebContent/wsdl 下的任何 Web 项目,并找到 Web 服务的 wsdl 文件。(如图 6 所示,CCIS 和 Credit Digger Web 服务采用 loanAmount 和其他输入参数,并返回相应的信用记录。)右键单击 WSDL 文件,并选择 Web Service => Test with Web Service Explorer(图 5)。



    图 5. 使用 Web Service Explorer 测试 Web 服务
    图 5. 使用 Web Service Explorer 测试 Web 服务

  7. 输入如图 6 所示的参数,并单击 Go。通过成功调用 CCIS Web 服务后,您应收到产生的信用记录。



    图 6. 导入参数并验证 Web 服务执行结果
    图 6. 导入参数并验证 Web 服务执行结果





回页首


B. 使用 Dynamic Assembler 创建 CreditService SCA 模块

创建 SCA 模块

  1. 在 Business Integration 透视图中,右键单击并选择 New => Module project 以创建模块项目(图 7)。图 8 显示了此新模块项目中的结果构件。(如果您不熟悉 SCA 模块,请参见 WebSphere Integration Developer 信息中心使用服务组件体系结构构建 SOA 解决方案,以获得详细信息。)



    图 7. 创建新的业务集成模块
    图 7. 创建新的业务集成模块



    图 8. 新的业务集成模块
    图 8. 新的业务集成模块

  2. 右键单击 Interfaces,以导入 CCIS 和 CreditDigger Web 服务 WSDL 文件及其依赖性资源(图 9)。FabricSCASample.zip 下载文件中可以找到示例 WSDL。



    图 9. 导入 WSDL 文件
    图 9. 导入 WSDL 文件

  3. 在 Business Integration 视图中双击 Assembly Diagram,以打开 Assembly Editor。将 Dynamic Assembler component(图 10)拖放到组装关系图,并将其重命名为 CreditDA。Dynamic Assembler 组件是 WebSphere Business Services Fabric 提供的新 SCA 组件,可用于根据上下文、内容和契约信息从不同的注册服务实现中选择合适的服务端点。



    图 10.新的 Dynamic Assembler 组件
    图10.新的 Dynamic Assembler 组件

  4. 要向新组件添加接口,请右键单击 CreditDA 组件,并选择 Add => Interface(图 11)。出现提示时,请选择 CreditVerificationSrvc 接口。



    图 11. 向 Dynamic Assembler 组件添加新接口
    图 11. 向 Dynamic Assembler 组件添加新接口

  5. 右键单击 CreditDA 组件。要为 CreditDA 组件生成实现,请右键单击该组件,并选择 Generate Implementation(图 12)。出现提示时,为实现选择缺省包。



    图 12. 为 Dynamic Assembler 组件生成缺省实现
    图 12. 为 Dynamic Assembler 组件生成缺省实现

构建 Dynamic Assembler 扩展模型

WebSphere Business Services Fabric V6.0.2 提供扩展框架,该框架使您能够插入 WebSphere Business Service Fabric 运行时在服务调用生命周期期间调用的自定义代码。扩展框架允许您覆盖缺省策略行为、激活事件和从有效负载提取上下文信息。接下来,将创建上下文提取器扩展,该扩展允许您从有效负载提取上下文信息,并将其添加到 Dynamic Assembler 上下文。基于上下文中提供的贷款数额和组织信息,Dynamic Assembler 将服务请求绑定到 CCIS 或 CreditDigger。(有关其他扩展接口,请参见 WebSphere Business Services Fabric 信息中心。)

  1. 在创建上下文提取器之前,需要将所需的 WebSphere Business Services Fabric Java™ 库导入到项目构建路径。右键单击 CreditSrvc 模块项目,并选择 Properties(图 13)。

  2. 从左侧的属性列表中,选择 Java Build Path,然后选择 Libraries 选项卡(图 14)。

  3. 单击 Add External JARs 以添加以下三个 Java 库,它们位于 <WebSphere Integration Developer 安装路径>\runtimes\bi_v6\lib\ext 下:

    • fabric-da.api.jar
    • fabric-da-sca.jar
    • fabric-da.scdl.jar.


    图 13. 添加项目属性
    图 13. 添加项目属性



    图 14. 作为外部 JAR 添加 Fabric 库
    图 14. 作为外部 JAR 添加 Fabric 库

  4. Java component 拖放到 Assembly Diagram,将其重命名为 CreditContextExtractor。您可以将 Java 代码扩展放入此组件。



    图 15. 为上下文提取器创建新的 Java 组件
    图 15. 为上下文提取器创建新的 Java 组件

  5. 右键单击 CreditContextExtractor 组件,并选择 Add => Interface,将 com.ibm.websphere.fabric.da.plugin.ContextExtractor 接口添加到该组件(图 16)。



    图 16. 将上下文提取器接口添加到 Java 组件
    图 16. 将上下文提取器接口添加到 Java 组件

  6. 下一个任务是基于导入接口实现 ContextExtractor。右键单击 CreditContextExtractor 以生成实现。清单 1 显示了缺省生成的代码。



    清单 1. CreditContextExtractor 的缺省实现
                            
    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;
    	}
    }

  7. 您需要将代码添加到 extractContext 方法,以便从服务请求正文提取 loanAmount 和 organizationId 值。organizationId 表示此请求源自哪一个组织(INT 银行、INT-CA 或 INT-TX)。图 17 显示了服务请求正文格式,清单 2 显示了从 SOAP 请求正文检索 loanAmount 和 organizationId 的代码。



    图 17. CreditVerificationSrvc WSDL
    图 17. CreditVerificationSrvc WSDL



    清单 2. 从请求获得所需断言属性的代码片段
                            
    //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 的示例结果输出。



    清单 3. 数据对象的示例输出
                            
    <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>

  8. 从请求检索 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




    图 18. 从订阅者浏览器获取 International Bank 组织实例 ID
    图 18. 从订阅者浏览器获取 International Bank 组织实例 ID

  9. 需要将 loanAmount 值绑定到在第 3 部分中创建的 LoanAmountAssertion。在 Property 窗口中可以找到 LoanAmountAssertion URI 值。从 Business Services 视图,选择任意端点(图 19),然后选择 Assertions 选项卡。选择 LoanAmountAssertion,并单击 Edit 按钮,调出属性窗口(图 20)。



    图 19. 切换到 Business Services 透视图
    图 19. 切换到 Business Services 透视图



    图 20. 从断言信息窗口获取断言属性 URI
    图 20. 从断言信息窗口获取断言属性 URI



    清单 4 .向上下文添加参数值
                            
    //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)。

  10. 现在可以在 CreditSrcs SCA 模块中组装组件了。这将通过连接完成此任务。将 Export component 拖放到组装关系图,将其重命名为 CreditDAExport(图 21)。



    图 21. 创建新的导出组件
    图 21. 创建新的导出组件

  11. 为导出组件添加一个接口。在本例中,请指定 CreditVerificationSrvc 接口(图 22)。



    图 22. 向导出组件添加新的接口
    图 22. 向导出组件添加新的接口

  12. 将这三个组件连接在一起(图 23)。此时,便完成了需要在 Business Integration 透视图执行的所有工作。



    图 23. 在组装关系图中连接组件
    图 23. 在组装关系图中连接组件





回页首


C. 将 SCA 模块导入到 Composition Studio

本部分中的任务将基于从第 3 部分创建的项目构件,需要对本文引入的 SCA 模块进行略微更改。即,将业务服务与新的 SCA 模块关联:

  1. 切换到 Business Service 透视图。



    图 24. 切换到 Business Service 透视图
    图 24. 切换到 Business Service 透视图

  2. 右键单击 Composite Service,然后选择 New => Composite Service(图 25)。



    图 25. 创建新的组合服务
    图 25. 创建新的组合服务

  3. 在 New Composite Service 面板(图 26)中,为这些字段选择以下值:

    • Project:LoanOrigination
    • Namespace:Loan Origination Instance
    • SCA Project:CreditSrvc

    单击 Finish 开始导入。



    图 26. 为新的组合服务选择 Project、Namespace 和 SCA Project 值
    图 26. 为新的组合服务选择 Project、Namespace 和 SCA Project 值

  4. 导入 CreditSrvc 组合服务后,现在需要将该服务与利用它的 Business Service 关联。选择 Business Service => Process Service => Loan Processing Service(图 27)。Process Service 窗口将显示(图 28)。



    图 27. 更改流程服务信息
    图 27. 更改流程服务信息

  5. 转到 Interfaces 选项卡,选择 CreditVerifiationSrvc 接口,并单击 Edit(图 28)。



    图 28. 编辑接口信息
    图 28. 编辑接口信息

  6. 当 Edit Interface 对话框显示时,将模块从 <Fabric Hub> 更改为 CreditSrvc SCA 模块(图 29)。在这里,WebSphere Business Services Fabric V6.0.2 中的 SCA 模块将替换 Version 6.0 中的 <Fabric Hub> 模块。单击 OK 完成操作。



    图 29. 使用 SCA 项目替换 <Fabric Hub> 模块
    图 29. 使用 SCA 项目替换 <Fabric Hub > 模块

  7. 在 Business Service 透视图中完成所有的更改后,请单击 Submit Changelist 按钮,以提交更改(图 30)。



    图 30. 提交更改列表
    图 30. 提交更改列表

  8. 在 Fabric 6.0.2 工具包中,系统会自动批准 UTE 库 (BSR) 中的更改。提交更改列表后,请单击 Update Project 按钮,以同步 BSR 中的内容(图 31)。



    图 31. 更新项目信息
    图 31. 更新项目信息





回页首


D. 在 SCA 模块中执行组件测试

现在可以运行组件测试,以确保所有组件都能够按预期工作。

  1. 切换到 Business Integration 透视图,并单击 Business Explorer 视图中的组装关系图,以打开 Assembly Editor。

  2. 右键单击 CreditDAExport 组件并选择 Test Component(图 32)。



    图 32. 右键单击导出组件,以执行组件测试
    图 32. 右键单击导出组件,以执行组件测试

  3. Events 选项卡,为这些输入请求参数输入以下值(图 33):

    • companyName: IBM
    • companyDUNSId: 1234
    • loanAmount: 10000
    • organizationId: 1

    单击 Continue



    图 33. 为测试输入参数
    图 33. 为测试输入参数

  4. 在 Deployment location 中选择 WebSphere Business Services Fabric Server v6.0(图 34)。



    图 34. 选择部署位置
    图 34. 选择部署位置

  5. 在 User ID 和 Password 中为组件测试输入用户名和密码(缺省值分别为 adminwebify)(图 35)。



    图 35. 为组件测试输入安全信息
    图 35. 为组件测试输入安全信息

  6. 图 36 显示了执行结果。在 Console 选项卡中,您可以看到按照提供的测试数据选择了 Credit Digger Service。根据上一篇文章定义的场景,当 loanAmount 大于 10000 并且组织为 International Bank of California(organizationId =1)时,则应选择并调用 Credit Digger 服务。有关其他测试场景,请参阅第 3 部分



    图 36. 验证执行结果
    图 36. 验证执行结果





回页首


结束语

在本文中,您学习了如何使用 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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章