最新公告:goCom系统调整暂停注册,若需注册请访问gocom.cc地址进行操作。请点击此处
 
  网站地图
  
  高级搜索
  首页   技术论坛   博客 派计划   产品中心   资源中心   银弹在线   商城  





通过导入和导出集成SCA模块    
#1楼
给作者发送短消息 给作者发送短消息 实名会员 
查看用户其他信息
总分 358 分
财富 828 goCom币
威望 156
排名 第 57 名
段位 新手必读
通过导入和导出集成模块(一)

 

本文介绍如何使用服务组件体系结构(Service Component Architecture,SCA)和IBM WebSphere Integration Developer以各种组件为基础构建垂直集成解决方案。

引言

  随着系统不断发展而变得更为复杂,有必要将各种解决方案进行水平集成;组织中的不同部门可能需要构建自己的解决方案并稍后将其集成到一起,或者可能不同的业务合作伙伴将需要通过Internet集成其解决方案。图1显示了一个此类水平集成的示例:

 

图1. 集成系统
 
  我们在第1部分中定义了SCA导入和导出,但我们将在本文中对其进行更为深入的研究,并继续构建我们的精简示例。具体来说,将重点讨论使用SCA绑定的SCA导入和导出。SCA绑定允许一个模块中的SCA组件使用SCA编程模型与另一个模块中的SCA组件通信。

  在本文中,我们还将升级到IBM WebSphere Integration Developer V6.0.1,该版本允许构建特定的集成解决方案,以将IBM WebSphere Process Server V6.0.1或IBM WebSphere Enterprise Service Bus V6.0.1解决方案结合使用。在这个新版本中,我们还添加了对构建各种企业服务总线(Enterprise Service Bus,ESB)中介的支持。(WebSphere ESB运行时是WebSphere Process Server的子集;有关更多信息,请参阅参考资料。)
  导入与导出回顾
  正如在第1部分中提到的,用于进行模块到模块和模块到外部服务调用的机制分别称为导入和导出。导入和导出是从模块角度而言,而模块是一个执行特定业务功能的自包含组件包:
  ·当模块希望为其他实体(外部服务或其他模块)提供调用业务功能的能力时,它将导出此功能。导出还提供通过各种不同的传输协议提供此服务的能力。导出与模块内的特定组件关联。
  ·当模块希望利用其他实体(外部服务或模块)的功能时,该模块将导入此功能。导入还提供通过各种传输协议与服务提供者交换的能力。
  图2显示了一个使用导入和导出的SCA组装。该图表明,导出是外部的入口点,而导入则允许您调用模块外的功能。

图2. SCA导入和导出
 
  当通过导入和导入调用SCA组件时,参数将按值传递,即参数将从一个结构中复制到另一个结构。图3显示了两个彼此进行通信的SCA模块,并说明了SCA导入如何与SCA导出匹配。

图3. SCA导入和导出
 
  将SCA组件粘附到一起的连接机制抽象出了大部分基础结构级的代码。例如,可以将连接机制定义为同步或异步的,操作可以为单向的或为请求-响应型,或者可以定义组件间的事务处理行为。SCA将为您处理基础结构细节。

  导入和导出可以与其他技术绑定,如JMS、Enterprise JavaBeans(EJB)或Web服务,如图4所示。通过绑定到这些技术,可以通过使用SCA编程模型来让Web服务客户机调用SCA模块,或者让SCA模块调用现有EJB模块(由于EJB导入是由Java接口定义的,所以使用EJB导入有一些限制;因此,BPEL之类——要求合作伙伴支持WSDL——无法调用EJB导入。详见后文)。

图4. 与其他技术的导入与导出
 
  导入/导出绑定

  面向服务的体系结构的一个关键在于能够公开采用大量绑定选项的服务,以及能够使用行业规范调用服务。正如所指出的,WebSphere Process Server和WebSphere ESB提供了一系列不同的绑定类型来帮助满足此类需求。绑定类型使用Assembly Editor与导出和导入关联。目前有五种主要的绑定类型:
  ·SCA——用于模块间的SCA调用的绑定类型。该绑定类型是配置最简单的类型,可提供模块间的无缝集成。
  ·Web服务——可提供调用外部Web服务和将模块内的功能作为Web服务公开的功能。缺省情况下,Web服务将使用doc-lit包装样式,可以与HTTP和JMS协议一起使用。Web服务绑定功能是从基础WebSphere Application Server 基本Web服务引擎派生的,受到相同的限制。
  ·企业信息系统(Enterprise Information Systems,EIS)——提供通过WebSphere JCA Adapter集成到现有EIS系统的功能。此绑定类型的可用配置将根据目标不同而有所改变(SAP、JDBC Adapter等等)。企业数据发现服务通常与每个适配器一起提供,以帮助创建业务对象和导入与导出绑定。
  ·Java Messaging Service——提供与使用JMS作为消息传递协议的端点进行集成的功能。在这种情况下,导入和导出使用数据绑定来帮助解析正确的业务对象/操作组合。
  ·无状态会话Bean——提供使用Java接口与无状态会话Bean集成的功能。此功能只有在将Java引用连接到Java接口时才可用。在WebSphere Integration Developer中,使用WSDL引用的组件不允许连接到无状态会话Bean提供的Java接口。在此情况下,要求使用具有WSDL接口和Java引用的中间组件。
  在本文中,我们将更深入地讨论SCA绑定的情况。本系列的后续文章将对其他导入/导出绑定进行更为深入的分析。
  SCA绑定
  SCA绑定提供了一致的方法来在WebSphere Process Server或WebSphere ESB环境中跨模块边界进行通信。将基于客户机模块使用的调用模式自动选择SCA绑定所使用的基础协议。
  SCA提供四种调用模式。
  ·同步——客户机发出请求,并等待响应。
  ·异步单向——客户机发出请求,不等待响应。
  ·异步延迟响应——客户机发出请求,客户机将在稍后请求响应。
  ·异步回调——客户机发出请求,目标将调用使用响应调用客户机实现的服务。
  WebSphere Process Server或WebSphere ESB SCA运行时将确定何时使用基础系统集成总线(对于异步调用模式)或RMI/IIOP(对于同步调用模式)。
  SCA绑定是由导出驱动的。在SCA模块安装到WebSphere Process Server的过程中,将创建必要的支持构件:
  ·对于异步调用,将在SCA.SYSTEM.<cell name>.Bus中创建计算单元范围内的服务集成总线(Service Integration Bus,SIBus)目的地。
  ·对于同步通信,将创建一个指向模块会话Bean的计算单元范围内的名称空间绑定;模块会话Bean是无状态会话Bean,供模块用于各种目的,如作为工作边界、安全配置等的单元。
  导入和导出文件一起工作,其中导入文件包含关于导出的重要信息,可帮助任意数量的客户机导入目标服务。
  SCA运行时通过使用.import文件中的信息和调用模式(sync或async),可确定是使用SIBus目的地还是WebSphere名称空间绑定。
  将创建一系列SIBus(请参阅参考资料)目的地来支持WebSphere Process Server和WebSphere ESB提供的各种异步调用类型;将为模块、组件、导入和导出创建目的地。每个目的地和转发路由路径将确保将消息路由到正确的目标服务。图5显示了SIBus目的地的一个示例。

图5. SIBus目的地
 
  此外,将为模块中的每个SCA导出创建一个名称空间绑定,如图6中所示。此绑定将在计算单元范围内创建,并遵循以下命名模式:

  sca_ + <Module Name> + _export_ + <ExportName>。

图6. 名称空间绑定
 
  在给定这两组构件范围的情况下,SCA导出绑定在整个计算单元内都可见。客户端模块和目标模块可以放置在计算单元内的任何WebSphere Process Server或WebSphere ESB服务器上,且仍然能够进行通信。

  导出限定符
  使用SCA绑定的导入是SCA组件在另一个模块中的逻辑表示。因此,可以采用与图7所示相同的方法在指向导出的引用上定义限定符。

图7. 添加限定符
 
  导出并不包含任何限定符;相反,将要在导出的组件上放置限定符,详见第2部分中的说明。

  库项目
  跨越模块边界,必须考虑共享协定这一事实。应用程序通过接口进行通信,彼此传递数据对象。这意味着接口和业务对象应对模块可见,或位于与模块相同的位置。为了减少在每个模板中重复定义相同的接口和数据对象,WebSphere Integration Developer包括了一个特殊的SCA库模块,可以将其添加到SCA模块,就像Java JAR文件可以为EAR文件中独立的JAR一样。(事实上,WebSphere Integration Developer 就是这样处理库的。)这就允许您在单个位置中定义接口和业务对象,然后让所有模块对其进行共享。稍后我们将给出一个SCA库示例。
  我们的示例应用程序
  我们将继续使用在整个系列中使用的Credit Approval应用程序。在本文中,我们将演示如何通过将Credit History和Credit Agency模块外部化来使各个模块分离,以了解如何配置导出和导入。为了进行说明,我们还将演示如何在模块间共享SCA库。
  为了运行此示例,您将需要正确安装WebSphere Integration Developer V6.0.1(该版本支持 WebSphere ESB)并在您的计算机上运行(请参阅参考资料),还要获取本文所附的下载材料,其中包含两个SCA模块(Credit Agency和Credit History模块)和一个具有共享接口及业务对象的SCA库。
  设置工作区。
  启动WebSphere Integration Developer。打开新工作区并关闭欢迎屏幕。
  您将需要导入所下载的Project Interchange。为了导入Project Interchange,在Business Integration视图内单击右键,然后选择Import,如图8所示。

图8. Eclipse导入向导
 
  选择Project Interchange,然后选择Next (图9)。

图9. 导入Project Interchange
 
  选择下载文件<Download_root>/SCAArticlePart3.zip,然后单击select All,并单击Finish(图10)。

图10. select All
 
  检查我们刚刚导入的构件:

  从Business Integration透视图中展开CreditApprovalLibrary。正如前面提到的,SCA库可以用于方便地保存模块间共享的业务对象和接口。图11显示了Business Integration视图中的CreditApprovalLibrary。

图11. CreditApprovalLibrary
 
  通过在Business Integration透视图内上下文有关的菜单中选择New=>Library,可以方便地创建Library项目。在此例中,我们已经提供了接口和数据对象。

  展开CreditAgencySCAModule和CreditHistory模块。
  为每个模块打开Assembly Editor。在前面的第2部分中的示例中,我们在单个模块中包含了多个组件。在此示例中,我们将对实现进行分离,以模拟多个独立的解决方案。通常,SCA具有包含多个组件的完整解决方案。对于本文,我们假定这些为不同开发组(不同的管理人员、日程安排和项目规划)开发的完整解决方案。图12显示了Business Integration视图中的SCA模块。

图12. SCA模块
 
  这两个SCA模块都依赖于SCA库模块;这个依赖关系可以在Dependency Editor看到。分别右键单击每个SCA模块,并选择Open Dependency Editor(图13)。

图13. 打开Dependency Editor
 
  检查每个模块对应的Dependency Editor,以确保在两个模块间共享了CreditApprovalLibrary,如果是这样,CreditApprovalLibrary将显示为图14所示的情况。

图14. CreditApprovalLibrary

 

原文出处:http://www.ibm.com/developerworks/cn/websphere/techjournal/0602_barcia/0602_barcia.html

 来源:IBM   作者:Roland Barcia,Jeff Brent    
 

Re: 通过导入和导出集成SCA模块    
#2楼
给作者发送短消息 给作者发送短消息 实名会员 
查看用户其他信息
总分 358 分
财富 828 goCom币
威望 156
排名 第 57 名
段位 新手必读

通过导入和导出集成SCA模块(二)

  创建SCA导出
  接下来,我们将为每个模块创建SCA导出,以便可以从其他SCA模块调用此模块。
  为CreditAgencySCAModule创建导出:
  在WebSphere Integration Developer中,打开CreditAgencySCAModule Assembly Editor。在Business Integration视图中展开CreditAgencySCAModule,并双击CreditAgencySCAModule Assembly Editor图标,如下面的图15中所示。
  图15. 打开Assembly Editor
 
  要创建导出,请右键单击CreditApproval组件,并选择Export =>SCA Binding(图16)。
  图16. 创建具有SCA绑定的SCA导出
 
  将自动为CreditAgency组件创建具有SCA绑定的导出,如图17中所示。

  图17. SCA导出
 
  在Assembly Editor中选中此导出的同时查看Properties视图,以检查导出的各个属性。您将会在Details选项卡中看到操作的SCA详细信息,如图18中所示。

  图18. SCA导出详细信息
 
  切换到Qualifiers选项卡(图19)。您会发现无法添加任何限定符。这是因为导出将使用其所指向的组件的限定符。

  图19. 导出没有限定符
 
  保存并关闭Assembly Editor。
  采用类似的方法为CreditHistorySCAModule创建导出:
  和前面一样,为CreditHistorySCAModule打开Assembly Editor。
  和前面一样,生成具有SCA绑定的导出(图20)。

  图20. SCA导出
 
  保存并关闭编辑器。
  创建Credit Approval模块
  现在我们将创建要通过导入调用其他两个模块的CreditApprovalModule。
  首先,创建一个新的SCA模块:
  在Business Integration视图中单击右键,然后选择New => Module。
  将该模块命名为CreditApprovalSCAModule(图21)。确保选中Use Default,然后单击Finish。

  图21. 新建SCA模块
 
  右键单击新创建的CreditApprovalSCAModule,并选择Open Dependency Editor(图 22)。

  图 22. 打开Dependency Editor
 
  由于CreditApproval模块将调用其他两个模块,因此需要共享在其间传递的接口和业务对象。请记住,我们要使用库来存储这些接口和业务对象。在Dependency Editor中的Libraries节中选择Add,如图23所示。

  图23. 向SCA模块添加库
 
  选择CreditApprovalLibrary,然后单击OK。
  现在将创建一个调用组件。出于演示目的,我们将使用基于Java的简单组件;在以后的文章中,我们将展示调用各种组件和模块的BPEL流。
  双击CreditApprovalSCAModule Assembly图标,以打开CreditApprovalSCAModule Assembly Editor(图24)。

  图24. 打开SCA Assembly Editor
 
  将SCA组件(图25)拖放到Assembly Editor上。

  图25. 将SCA组件拖放到Assembly Editor上
 
  单击文本,并键入名称,从而将组件重命名为CreditApproval,如图26中所示。

  图26. 更改组件名称
 
  接下来,我们将向该组件添加接口。我们将接口存储在库项目中。
  在组件上单击Interface图标(图27的圆圈内),然后从菜单中选择CreditRequest。

  图27. 向SCA组件添加接口
 
  单击OK。
  我们刚刚创建了一个SCA组件。该组件将通过导入调用其他两个模块。
  创建导入
  我们已经完成了导出的创建,现在就可以开始创建SCA导入了。我们需要为要调用的每个导出创建一个SCA导入。在我们的示例中,我们将进行以下工作:
  ·调用CreditAgency和CreditHistory模块。
  ·更新CreditHistory导入的限定符,以在异步调用组件时正确地处理事务处理行为。
  ·假定History请求需要花一定的时间进行调用,那么我们将异步发出History请求。
  ·在请求之后,同步调用CreditAgency模块。
  ·获取信用分数后,以延迟方式获取History Response。
  首先,为CreditAgency调用创建导入:
  从面板上将import图标拖放到Assembly Editor上(图28)。

  图28. 将导入拖放到Assembly Editor上
 
  单击文本并键入CreditAgencyImport,从而重命名导入,如图29中所示。

  图29. 重命名导入
 
  接下来,我们将添加相应的接口。在此情况下,导入的接口必须与CreditAgencySCAModule中对应的导出的导入匹配。
  单击Import上方的Interface 图标(图30的圆圈内),然后选择CreditAgency接口。

  图30. 向SCA导入添加导入
 
  添加相应的绑定,在此例中,添加SCA绑定:
  右键单击导入,并选择Generate Binding=>SCA Binding(图31)。

  图31. 向导入添加SCA绑定
 
  在Assembly Editor中突出显示导入,转到Properties视图,并选择Binding部分(图32)。单击Browse。

  图32. 浏览导出
 
  选择CreditAgencyExport(图33)。

  图33. 选择导出
 
  接下来,我们需要将CreditApproval组件连接到CreditAgencyImport。
  在Assembly Editor中选择CreditApproval组件,并将一个wire拖放到CreditAgencyImport。

  图34. 将SCA组件连接到SCA导入
 
  在对话框中单击OK,以在CreditApproval组件上创建引用(图35)。(在第2部分中对引用进行了讨论。)

  图35. 确认引用创建
 
  保存编辑器,并使其保持为打开状态。下面的图显示了已连接的组件的最终结果。

  图36. 已连接的SCA模块
 
  接下来,我们将为CreditHistoryModule创建导入。
  和前面一样,将另一个 import 拖放到Assembly Editor并将其命名为CreditHistoryImport。
  向导入添加CreditHistory接口,如图37中所示。

  图37. 添加Credit History接口
 
  生成SCA绑定,并将CreditApproval连接到CreditHistoryImport。图38显示了最终的结果。

  图38. 最终结果
 
  请记住,我们假定Credit History组件的处理时间会稍微长一些,因此首先将触发异步请求以获取History,并在稍后检索响应。在CreditHistory运行的同时,我们将从CreditAgency模块获取Credit Score。然后我们将从CreditHistory捕获响应。我们可以为“服务”使用正确的SCA API来对Credit History模块进行异步调用。在这种情况下,我们希望使用前面描述的延迟响应调用模式
原文出处:http://www.ibm.com/developerworks/cn/websphere/techjournal/0602_barcia/0602_barcia.html
 来源:IBM   作者:Roland Barcia,Jeff Brent    
 

Re: 通过导入和导出集成SCA模块    
#3楼
给作者发送短消息 给作者发送短消息 实名会员 
查看用户其他信息
总分 358 分
财富 828 goCom币
威望 156
排名 第 57 名
段位 新手必读

通过导入和导出集成SCA模块(三)

生成实现

  我们现在将为CreditApproval组件创建一个实现。在我们的示例中,将使用一个简单的Java组件。
  在Assembly Editor中,右键单击CreditApproval组件,并选择Generate Implementation=>Java。

  图39. 生成Java实现
 
  暂时将该类放在缺省包中(图40)。

  图40. 缺省包
 
  如果希望在稍后添加本地Java客户机,请在Implement As...对话框中选择Yes,以创建一个匹配的Java接口(图41)。

  图41. 为本地Java客户机创建Java接口
 
  现在我们将编写实现的代码。
  应在Java编辑器中打开实现类。正如您在Java编辑器中看到的,WebSphere Integration Developer添加了方便的Helper,以通过检查模块组装来获取合作伙伴。如果我们首先生成Java类,则这些方法将不存在。
  public CreditAgency locateService_CreditAgencyPartner() {
   return (CreditAgency) ServiceManager.INSTANCE
   .locateService("CreditAgencyPartner");
  }
  public CreditHistory locateService_CreditHistoryPartner() {
 return (CreditHistory) ServiceManager.INSTANCE
   .locateService("CreditHistoryPartner");
  }
  将下面的代码(在<download_root>/SCAArticleSeries3/codeSnippet1.txt中)粘贴到calulateCreditScore方法内。异步调用模式以粗体突出显示。
  ServiceManager serviceManager = new ServiceManager();
  // create credit rating return data object using the BO factory
  BOFactory bof =
  (BOFactory)serviceManager.locateService("com/ibm/websphere/bo/BOFactory"
);
  DataObject creditRating = bof.create("http://CreditApproval",
"CreditRating");
  creditRating.setString("customerId",
creditApp.getString("customerId"));
  // create and call credit history service using async deferred response invocation
// pattern.
  CreditHistoryAsync cha = (CreditHistoryAsync)
  serviceManager.locateService("CreditHistoryPartner");
  Ticket tix = cha.getCreditLimitAsync(creditApp);
  CreditAgency creditAgency = (CreditAgency)   locateService_CreditAgencyPartner();
  Integer creditScore = creditAgency.getCreditScore  (creditApp);
  Double creditLimit = cha.getCreditLimitResponse(tix, Service.WAIT);
  creditRating.setInt("creditScore", creditScore.intValue());
  creditRating.setDouble("creditLimit", creditLimit.doubleValue());
  return creditRating;
 
  因为缺少导入,因此在Eclipse Editor中应报告一些编译错误(假定启动了自动生成功能)。在Java编辑器中任意位置单击右键,并选择Source=>Organize Imports,如图42中所示。

  图42. Organize imports
 
  将BOFactory接口解析到com.ibm.websphere.bo,如图43中所示。

  图43. 解析BOFactory
 
  将Service接口解析到com.ibm.websphere.sca,如图44中所示。

  图44. 将服务导入解析到com.ibm.websphere.sca
 
  保存Assembly Editor。
  
  测试解决方案
  现在可以测试我们的解决方案了。集成模块时,每个模块首先应进行相应的单元测试。在本文中,我们将假定各个开发团队(CreditHistory和CreditAgency)都已对其组件进行了相应的测试。
  将所有三个模块都添加到WebSphere Process Server:
  在WebSphere Integration Developer中,转到Servers视图,右键单击WebSphere Process Server,并选择Add/Romove Project(图45)。

  图45. 向WebSphere Process Server添加或删除项目
 
  选择Add All,以将全部SCA模块添加到服务器(图46)。

  图46. 添加所有模块
 
  单击Finish。
  通过WebSphere Integration Developer组件测试工具启动服务器。
  从CreditApproval模块的Assembly Editor中,右键单击CreditApproval组件,并选择Test Component,如图47所示。

 
  图47. 启动Test Component功能
 
  转到Configurations选项卡并删除两个模拟器,如图48中所示。如果合作伙伴不可用,可以使用模拟器来进行模拟,由于我们有实际的组件,因此不需要模拟器。

  图48. 删除模拟器
 
  回到Events页,在Initial响应参数中输入一些输入数据,如图49中所示,然后单击Continue。

  图49. 运行组件测试
 
  在Deployment Location对话框中,选择WebSphere Process Server v6.0。(图50)

  图50. 选择WebSphere Process Server运行时
 
  现在我们将对调用路径和结果进行检查。
  回到Events选项卡。从调用路径中选择最后一个Return,以创建结果,如图51中所示。

  图51. 选择Return
 
  应该看到与图52类似的结果。

  图52. 结果
 
  如果分析调用顺序,将会发现采用了异步调用:我们没有采用“请求-响应-请求-响应”的模式,而是使用了“异步请求-请求-响应-异步响应”模式。(图53)

  图53. 异步调用路径
 
  不保存,直接关闭测试编辑器并停止服务器。
  结束语
  通过导入和导出,我们可以将解决方案以面向服务的方式对外公开。在本文中,您了解了如何使用SCA导入和导出集成SCA解决方案。
原文出处:http://www.ibm.com/developerworks/cn/websphere/techjournal/0602_barcia/0602_barcia.html
 来源:IBM   作者:Roland Barcia,Jeff Brent    
 




发表回复
账号用户名   密码   登录
内容:url email imgsrc image code quote
范例 Example
bold italic underline linethrough   


 [更多...]