本文介绍如何使用服务组件体系结构(Service Component Architecture,SCA)和IBM WebSphere Integration Developer以各种组件为基础构建垂直集成解决方案。
引言
在本系列的第1部分,我们引入了服务组件体系结构作为编程模型来构建和组装集成解决方案,简要介绍了什么是SCA,以及一些相关术语的定义。在第2部分,我们讨论了引用和限定符,并说明了如何将各种组件连接到一起以创建SCA模块。在第3部分,我们将深入了解构建SCA模块的主要好处之一,即能以各种组件为基础垂直构建集成解决方案。
随着系统不断发展而变得更为复杂,有必要将各种解决方案进行水平集成;组织中的不同部门可能需要构建自己的解决方案并稍后将其集成到一起,或者可能不同的业务合作伙伴将需要通过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
关闭编辑器。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
谁知道阿里云河南服务中心是干什么的?
一直接到阿里云服务中心的电话,说是阿里云的授权中心,主要提供阿里云的区域服务的?请问其他地方也有阿里云的服务中 […]
-
来之不易的0.1秒 只为离梦想更进一步
0.1秒可以做什么?弹指一挥间,什么也做不了。我们甚至感受不到它的存在。然而对于云端筑梦的人来说,0.1秒的差距,结局也许就是天壤之别。
-
如何透过业务和技术看SOA的发展
随着SOA发展的深入,各种SOA相关技术标准也随之发展和完善。面对庞大而复杂的SOA相关技术标准,我们如何来有选择的使用它们呢?
-
SOA架构下补偿模型驱动的安全苛求软件开发
随着我国高速铁路的快速发展,传统的计算机联锁软件开发方法在灵活性、可维护性、安全性以及开发效率上都显露出不足,怎样才能弥补这一不足呢?