SOA案例研究二:服务创建案例研究简介JKHLEnterprises(JKHLE)正在进行一系列的基本业务变更,期望最终能够获得最大收益。JKHLE已决定采用SOA来解决其面临的业务和IT挑战。JKHLE团队的工作重点是,如何在各个销售渠道中以一致的方式解决因创建新客户帐户而带来的难题。此SOA采用计划被称为帐户开立项目(AccountOpenProject)。使用SOA方法有利于在未来业务发生变化时进行更快的实现和提供更大的灵活性。我们在本文中介绍的案例研究包括以下人员和角色:SandyOsbourne-Archer,首席技术架构师EdmundSmythe-Barrett,企业架构师KaiBuser,集成架构师WillyShengDuoLi(也叫WillyLi),应用程序开发员UrsulaDeBarry,软件架构师和服务设计主管EugeneTestrite,质量工程师经理帐户开立项目的挑战我们在本文中定义的帐户开立项目挑战与重用作为服务公开的现有应用程序组件、创建新服务和使用服务相关。WillyLi是一位应用程序开发员,在其职业生涯之初的前一份工作中,积累了大约两年的COBOL编程经验。后来,WillyLi继续着他的事业,并在C、C++、Microsoft®C#和.Net方面锤炼了自己的编程技巧。最近,他又开始了Java™编程工作。他从未想到以前的COBOL经验会对他当前的工作大有帮助。在WillyLi以前的工作中,他完成了对JavaWeb服务的试验并研究过SOA的基本原理。WillyLi深信,在今后的几年中,整个行业将转向SOA,所以他准备将职业重点放在SOA上。遗憾的是,由于政治原因,他以前雇主那里的SOA开发搁浅了,因此,他又去寻找其他的机会。在了解到JKHLE中SOA的采用情况后,WillyLi加入了JKHLE。WillyLi被分配到了新组建的帐户开立项目中,该项目由首席技术架构师SandyOsbourne-Archer领导。Sandy最近派WillyLi主持工作,负责服务创建的开发和对现有应用程序的重用。JKHLE有许多应用程序运行在现有的系统上,如CICS®和IMS™。因此有必要利用现有系统中的这些资产,以便缩短时间、降低成本。Wily当时非常担心对他的工作要求。WillyLi坦言,“我对CICS和IMS一窍不通,对COBOL的了解也是很久以前的事”。Sandy劝他说:“别担心,大多数情况下,我们不需要修改COBOL。在某些情况下,当现有的代码与业务功能不匹配时,这时我们才需要重构代码”。在重构现有代码方面,可以使用IBM®WebSphereStudioAssetAnalyzer加强对现有应用程序和资产的理解。当进行重构时,可以像我们在以下部分中介绍的那样,启用应用程序的业务功能。IBM将为CICS和IMS同时提供适配器,并且新版本支持将现有的应用程序作为服务公开。这些访问方法可以在一定程度上提供屏蔽,使您不受COBOL和后端系统的影响。Sandy向WillyLi解释说,WillyLi对SOA的背景和理解对该项目非常有用。此外,企业架构师EdmundSmythe-Barrett和其他架构师还将提供有关SOA采用的全局方案。在初次会面之后,各团队领导以非正式方式讨论了他们新分配的任务。Edmund将讨论他针对企业服务总线(ESB)和服务注册中心的计划,并提供对整个基础结构中已计划服务的访问。由于WillyLi曾经在前一雇主那里做过Web服务试验方面的工作,因此他能够很快看出,与直接链接这些服务的刻板方法相比,使用ESB的服务可以提高灵活性。UrsulaDeBarry是一名软件架构师和服务设计主管,负责设计用于访问和处理信息的服务接口。Ursula解释,服务设计团队需要一些时间为所需的服务定义准备规范。根据帐户开立项目制定的计划,WillyLi已经急切希望尽快开始工作,并能做出一些成果出来。WillyLi决定,他将通过为后端系统所需的每个访问方法开发服务原型来缩短学习过程。WillyLi知道,当服务设计团队公布其服务设计规范时,需要更改其原型服务。帐户开立项目的要求WillyLi安排与Edmund会面,以审核和讨论该原型实现的要求。WillyLi尽力确保这些要求体现出公开和使用帐户开立项目服务所需的访问方法。REQ-01:使用外部服务帐户开立应用包括的流程需要使用外部第三方服务(如地址验证服务)。REQ-02:创建新服务这些服务接口将以Web服务描述语言(WSDL)文件的形式提供。WSDL将为所有服务提供一个通用描述形式,实质上对服务使用者隐藏了实现细节。WillyLi计划根据WSDL文档创建一些新服务。REQ-03:将CICS应用直接作为服务公开将CICSTransactionServerv3.1托管的COBOL应用程序作为服务公开。WillyLi了解到CICSv3.1包括对Web服务的本机支持和工具,这简化了该要求,因此,将很少需要甚至不需要编程。REQ-04:将CICS应用间接作为服务组件公开WillyLi了解到,一些旧的COBOL应用程序仍由CICSTransactionServerv2.3托管,它不包括直接启用Web服务的本机功能。此外,JKHLE需要通过Java代码、CICS适配器和CICSTransactionGateway(CTG)来公开由CICSTransactionServerv2.3托管的COBOL应用程序还有其他一些原因。这将使JKHLE内部系统和外部合作伙伴能够将该应用程序作为一项服务来使用。REQ-05:使WebSphereMessageBroker流支持服务作为支持电子业务的一部分,JKHLE在WebSphere®MessageBroker上进行了一些投资。它是一个企业应用程序集成基础架构,用于连接IMS、SAP®和Siebel®应用程序。JKHLE想通过使WebSphereMessageBroker流(该流提供与基础结构相关的服务)支持服务来使用和重用在WebSphereMessageBroker中进行的投资。REQ-06:使IMS事务支持服务使IMS事务支持服务可将这些事务作为服务使用。JKHLE公司想利用他们在WebSphereApplicationServer和WebSphereMessageBroker中的现有投资。中间层服务将用来与IMS后端系统通信。将SOA场景模式应用于案例研究本部分描述了如何使用“面向服务的体系结构中的服务创建场景”实现模式来解决与帐户开立项目案例研究相关的业务和IT挑战。使用外部服务创建新服务将现有应用程序作为服务直接公开将现有应用程序作为服务间接公开使WebSphereMessageBroker流支持服务使IMS事务支持服务使用外部服务注意:使用外部服务非常方便,并且很少需要甚至不需要编码,特别是当服务符合WS-I.org概要时。还有其他一些注意事项(如,当所选服务临时不可用时提供备用服务),多数情况下使用ESB很容易解决。还需要为其他管理域中提供的服务进行一些计划。帐户开立流程应用程序需要对新的帐户拥有者进行地址验证。JKHLE组织确定,使用外部服务提供商来验证地址比构建和维护内部应用程序要好得多。WillyLi将进行调查,并作为原型使用AddressesInc.com外部服务中的VerifyAddress服务进行地址验证。建议的解决方案WillyLi通过将WSDL描述导入IBMRationalApplicationDeveloper中预览了AddressesInc.com中的VerifyAddress服务,他以前使用IBMRationalApplicationDeveloper生成了一个带有简单用户界面的Web服务客户端应用程序,该界面不但简单好用而且比较对于用户来说感觉比较熟悉。在创建原型时,WillyLi遇到了几个难题。一个问题是,VerifyAddress的正式版本需要使用安全套接字层(SSL)。JKHLE还希望避免直接链接到任何服务,以免导致不灵活的基础结构。因此,JKHLE将ESB用于与所有服务的交互,并将通过使用IBMWebSphereMessageBroker来实现ESB功能。WillyLi与Edmund会面,计划在JKHLE的业务流程中使用此外部服务。Edmund说,他们需要做的就是更新ESB服务注册中心(通过使用IBMWebSphereServiceRegistryandRepository来实现),将一个入口添加到此外部服务,然后这项服务就可以使用了。还需要更新服务注册中心,以便包含该服务的元数据。由于JKHLE和AddressesInc.com在不同的管理域中,可能需要进行一些计划或协商,以确保达到JKHLE所需的可用性和吞吐量。AddressesInc.com是一家具有良好声誉的可靠提供商,但是,由于此服务对于业务流程非常关键,所以计划服务在不可用的时间非常重要,即使这种可能性未必存在也需要进行计划。Edmund解释说ESB将有效地虚拟化该服务。当一个服务使用者向ESB发送请求时,该服务使用者将得到一个回应。必要时,ESB可以在运行时决定是否使用备用提供商。当备用服务具有不同的消息schema时,ESB可以将该请求转换为所需的schema,代表使用者发出请求,并将该响应转换回用户所需的形式。整个流程对请求者应用程序(如业务流程)是透明的。Edmund和WillyLi对使用外部服务的ESB方法非常满意。工作方式图1描述了外部服务的使用方式。JKHLE计划通过ESB从业务流程中调用该服务。WSDL是进行该调用所需的一切要件。IBMRational®ApplicationDeveloper可以读取该WSDL,生成一个服务代理对象,并测试该应用程序,从而使Java开发人员将重点放在业务逻辑而非XML细节上。ESB接收该请求并使用IBMWebSphereServiceRegistryandRepository来查找适当的提供商。ESB使用HTTP或MQ协议来接受该请求和执行协议转化,以便在该提供商需要该服务时通过SSL调用它。如果使用备用提供商,ESB可以在需要时向使用者应用程序或业务流程透明地转换该请求消息。图1使用外部服务AddressesInc.com或备用提供商以期望的形式接收该请求、处理该请求并发送响应。如果需要,ESB将转换该响应消息并使用适当的协议将其路由到该服务使用者。使用外部服务的注意事项有时,一些业务合作伙伴可以更好、更快、更便宜地为您完成某些工作。JKHLE没有地址验证业务,它发现维护自己的服务要比使用由AddressesInc.com提供的服务昂贵得多。创建新服务尽管AccountEligibility服务并没有完全设计好,WillyLi还是访问了记录以前讨论的文档,这为他提供了有关所需接口的一些好的想法。该服务的基本功能是根据记帐数据(如过期未付余额日、拒付款和最终结帐日)决定是否需要信用报告。适当性决策将应用于帐户验证业务流程中。虽然JKHLE业务要求与在CICS上托管的现有COBOL中的此功能有某些相似之处,但它已有了相当大的发展。根据服务设计团队提供的建议和WillyLi本人的经验,他决定,最好创建一个新的基于Java的Web服务。建议的解决方案WillyLi从以前的经验中得出,IBMRationalApplicationDeveloper中包含的工具和测试环境可以使其创建新服务的工作变得更加轻松。为了解这些服务设计方面的知识,WillyLi决定使用IBMRationalSoftwareArchitect,该体系结构包括RationalApplicationDeveloper功能和用于设计的建模工具。WillyLi将从创建一个新的UML设计开始,这包括协议、有效负载格式、非功能性需求等。在过去,WillyLi采取自底向上的方法,即创建一种Java方法,然后生成与该方法参数和类型匹配的WSDL接口。对于原型,他决定使用自顶向下的方法,这样,他可以先在Ration