共享社区

首页 » 编程技巧共享 » JAVA编程技巧共享 » 基于服务的企业集成模式轻松入门,第 3 部分: Web services 和注册中心
java - 2008-6-12 22:54:00
2008 年  5 月  26 日
系列第 1 部分第 2 部分讲述了开发基于服务的集成模式所需的基本概念。本文(即本系列的第 3 部分)和即将发布的第 4 部分将进一步完善这些思想,使基于服务的集成模式成为全面的基于服务的模式。本文特别阐述了通常被总称为 Web services 的一些组件,这些服务最初是针对可以通过 Internet 访问的服务设计的。您还将看到,许多 Web services 组件可用于不使用 Internet 而仅需要一个网络连接的服务。
            引言
            在本系列的前两篇文章中,您已经掌握了一些基本概念。现在,您将了解 Web services,这些服务定义了处理异构问题 的标准。此问题是指这样一种事实,在典型的大型企业的 IT 基础结构中,通常使用不止一种技术来集成应用程序,在此类环境中,一般无法实施企业范围的统一标准。
            在大型企业中,通常有几种不同类型的技术异构性,其中包括:
                        另一个常见问题是,每当软件提供者提供了软件的新版本时,,就必须修改使用者的应用程序以适应提供者应用程序中的更改。针对此问题的解决方案是需要找到一些方法来允许扩展这些服务,例如,在不中断以前版本的使用者应用程序的情况下添加更多的参数
            这种多样性和可扩展性一部分是通过制定标准得到了解决的,而另一部分是通过进一步发展技术得到了解决。本文主要涉及有关标准方面的问题。(第 4部分将主要着眼于技术方面的发展和开发。)这些标准集中了由主要市场参与者制定和接受的规范、规则和指南,并且独立于实现细节。这些标准奠定了公用性的基础,并通过互操作性被广泛接受。这些标准的示例包括:
                        技术开发示例包括:
           
XML
            XML已作为进行数据和文档交换的独立于中间件的标准格式而被广泛采用。XML 基本上是 IT 行业认同的最小通用标准。与 CORBA IDL 或Java 接口不同,XML 不与任何特定的技术或中间件标准绑定,目前经常作为跨不同的大部分不兼容的中间件平台处理数据的临时格式使用。XML可以免费使用,并附带了可以在许多不同平台上使用的大量工具,其中包括不同的开源分析 API,如 Simple API for XML (SAX)和 Document Object Model (DOM)。这些工具支持处理和管理 XML 文档。XML的另一个优点是,它在数据传输过程中可以保留数据的结构。XML 还非常具有灵活性,这使它成为解决中间件和应用程序异构问题的最合适的标准。




SOAP
            虽然采用 XML 是满足解决异构和可扩展性要求的一个重要步骤,但仅用 XML还不足以让双方(服务提供者应用程序和服务使用者应用程序)正确通信。为了高效通信,双方必须能够根据协商一致的格式交换消息。SOAP就是这样一个协议;它为服务提供了通用的消息格式。
            SOAP是一种基于文本的消息传递格式,使用一种基于 XML 的数据编码格式。SOAP既独立于编程语言,又独立于操作平台。它在端点不需要任何特定的技术,因此完全不需要知道所用的供应商、平台和技术。其文本格式还使 SOAP成为防火墙友好的协议。虽然 SOAP 最初在设计上仅与 HTTP 一起使用,但任何传输协议或消息传递中间件都可用来传送 SOAP 消息。
            SOAP消息是一个完整的 XML 文档,顶级元素是信封元素。信封元素包含一个 body 元素和一个可选的 header 元素。该 body元素通常携带接收者所使用的实际消息。该 header 元素通常用于中间处理器,以提供高级功能。清单 1 中显示了一个 SOAP请求获取股票报价的简单而完整的示例。该清单显示了如何使用 XML 编码 SOAP 消息,介绍了一些 SOAP 元素和属性。
            清单 1 显示,SOAP 中的顶级元素必须是 envelope 元素,该元素包括以下两个命名空间:命名空间 SOAP:encodingStyle 表示 SOAP 编码,另一个命名空间表示 SOAP 信封。虽然 header 元素是可选的,但是,当其出现时,它必须是 envelope 元素的第一个直接子元素。如果 body 元素出现,它必须出现在所有 SOAP 消息中,并且必须跟在 header 元素之后。该 body 通常包含实际消息的规范。在清单 1 中,该消息包含该方法的名称 (GetLastTradePrice) 和输入参数值 (IBM)。
           
清单 1. SOAP 消息示例
               
<soap:envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' 
    soap:encodingStyle='http:/schemas.xmlsoap.org/soap/encoding/'/>
<soap:header>
</soap:header>
<soap:body>
  <m:GetLastTradePrice  xmlns:m='http://example.org/Tradeprice'  >
    <tickerSymbol> IBM </tickerSymbol>
  </m:GetLastTradePrice>
  </soap:body>

Web services 描述语言
            解决上面提到的基于服务的集成模式中异构问题的第二个 XML 应用在通过使用 WSDL 声明的服务接口。由于具有上一段落中概括的 XML优势,所以大多数情况下都选择它。此外,还添加了解决企业的异构问题的新功能。这包括指定访问该服务所需的传输协议的规定,声明同步和异步服务的更明确的方法。最后,但也是同样重要的一点是,新方法允许在不停用以前版本的客户端软件的情况下扩展服务。
            看一个 WSDL 文档示例会对您很有启发。清单 2 中显示了部分 WSDL 文档,这部分文档声明了一项获取天气信息的服务。
           
清单 2. WSDL 示例
               
<?xml version='1.0' encoding='UTF-8'?>
<definitions name ='WeatherWebService
          targetNamespace='urn:WeatherWebService'
          xmlns:tns='urn:WeatherWebService'
          xmlns='http:/schemas.xmlsoap.org/wsdl/'
          xmlns:xsd='http://www.w3.org/2001/XMLSchema'
          xmlns:soap='http://schemas.xml.soap.org/wsdl/soap/'
<types/>
<message name='WeatherService_getWeather'>
  <part name='City' type='xsd:string'/>
</message>
<message name='WeatherService_getWeatherResponse'>
  <part name='result' type='xsd:string'/>
</message>
<portType name='WeatherService'>
  <operation name='getWeather' parameterOrder='City'>
  <input message='tns:WeatherService_getWeather'/>
  <output message='WeatherService_getWeatherResponse/>
  </operation>
</portType>
<binding name='WeatherServiceBinding' type='tns:WeatherService'>
  <operation name='getWeather'>
    <input>
    <soap:body use='literal'  namespace='urn:WeatherWebService'/>
    </input>
    <output>
    <soap:body use:literal namespace='urn:WeatherWebService'/>
    </output>
    <soap:operation soapAction=''/>
  </operation>
  <soap:binding transport='http://schemas.xmlsoap.ord/soap/http'  style='rpc'/>
</binding>
<service name='WeatherWebService'>
  <port name='WeatherServicePort' binding='tns:WeatherServiceBinding'>
    <soap:address location=http://mycompany.com/weatherservice'/>
  </port>
</service>


            正如清单 2 所示,完整的 WSDL 包括一套定义,这些定义以 root 定义元素开头,后跟六个介绍服务的具体元素定义——types、message、portType、binding、port 和 service。下面让我们更详细地分析一下这些元素:
                       
</soap:envelope>


注册中心和 UDDI
            除服务接口声明(在此示例中是 WSDL)和 SOAP 消息传递标准外,大型企业还需要一个中心位置,以便服务提供者可以使用 WSDL 发布其服务,服务使用者可以发现现有服务。这主要是因为,在大型企业中,开发人员资源在地理位置上可能是分散的。此类中心位置被称为注册中心。注册中心就像一个图书馆的卡片目录,用来记录新书和其他媒体的入库情况并查找现有的项目。它还像电话系统的黄页,服务提供者用该页发布服务,服务使用者用该页查找服务。当使用者找到某项服务时,该注册中心在服务提供者与服务使用者之间将不起任何作用。
            UDDI规范定义注册、注销和查找服务的标准方法。图 1 显示了 UDDI 如何对服务启用动态描述、发现和集成。服务提供者首先使用 UDDI注册中心注册服务。服务使用者然后在 UDDI 注册中心中查找所需的服务,当它发现需要的服务时,使用者将直接与提供者绑定来使用该服务。
                           
图 1. 通过使用 UDDI 的注册中心的基本工作原理
                           
            在通过使用注册中心发现服务之后,对于特定的服务有三种绑定类别:
           
结束语
            在本系列文章的这一部分中,您学习了构成 Web services 的最常见的几种标准。这些标准包括 XML、WSDL、SOAP 和UDDI。使用这些标准可以解决大型企业中的许多异构问题。但是,还有其他一些异构问题尚未解决。例如,在服务使用者与服务提供者所使用的传输协议之间可能存在不匹配的问题。此类问题的解决方案需要更进一步的技术开发,这些内容将在本系列的第 4 部分中讲述。
       

参考资料
学习

获得产品和技术

讨论


关于作者

WaseemRoshen 博士是俄亥俄州哥伦布市 IBM Global Business Services Enterprise Architectureand Technology Center of Excellence 的一位 IT 架构师。他致力于企业体系结构和集成方面的工作。他还是一位Sun 认证的 J2EE 架构师,已经发表了 60 篇文章,并获得了 24 项专利。
1
查看完整版本: 基于服务的企业集成模式轻松入门,第 3 部分: Web services 和注册中心