`
FengShen_Xia
  • 浏览: 282114 次
  • 性别: Icon_minigender_1
  • 来自: 东方水城
社区版块
存档分类
最新评论

Web服务和SOA(一) 上

    博客分类:
  • Web
阅读更多

翻译自<<Service Oriented Architecture with Java>>(使用Java开发面向服务的架构)一书之第二章

 

本章我们将详细讲述SOA的实现,并开始我们的Web服务实践之旅。在本章中,我们将会看到,为什么在企业交互的环境中,XML是消息交换的正确选择。接下来我们开始定义一个示例的Web服务,采用自顶向下的方法来开发我们第一个Web服务。然后我们再采用颇为通用的两种传输协议改进我们的程序。

通过对Web服务两种风格(RPCDocument)的比较,我们可以看到采用Document风格的Web服务更加完善,并被广泛使用。在本章的最后,我们将简单介绍一下最流行的几种Web服务实现框架。

 

SOA的实施方法

 

实施SOA的第一步其实很简单,即:确定您的应用所包含的业务功能。下面我们就仔细分析这句话的含义:

(1)     确定:就是要找到软件组成的独立模块,这些模块是自包含的,并且从功能上说,它们是不可分割的(具有功能上的原子性)。这就要求我们在设计时,要把您的问题域按照软件调用规范切分成良好定义的模块,同时也要确定这些模块的边界。对业务模块调用者而言,他们要按照契约式软件规范来正确调用这些模块。在软件设计时,请牢记一条,在多个环境(项目)中都能使用的一个模块就是软件开发中的金块。从某种意义上说,确定出软件中的业务功能,就是一种更高层次的抽象,它将我们以前对“接口”的抽象提高到业务层面上。

 

(2)     业务功能:这个词是指在SOA实践中,我们将专注于业务层(MVC概念中的M),而不是表示层和控制层(MVC模式中的VC)。我们在这里只讨论服务,而良好设计的服务应该和表示层相互独立,服务对表现它们的表示层一无所知。

 

(3)     应用所包含的:应用程序可能包含许多软件层,但我们这里的应用程序强调的是多个而非仅仅一个应用程序。这是SOA实施方法的一个“大跃进”,它超越了我们现在正在进行的项目,我们只需做少量的工作,就可以让SOA中的业务组件超越单一项目,它们可以非常容易地使用在以后的应用程序中。

现在,假定我们按照上面的设计方法设计出了我们所需的服务,下一步我们该做什么呢,我们又如何实现它们呢?

我们不妨先举一个服务的例子,这个例子将返回所有的客户列表,它不需要输入参数,并返回一串对象列表。

服务的消费者(例如用户界面)如何能调用到该服务,并得到它所请求的对象列表呢?这可以通过多种方式实现,下面是其中最为流行的几种:

(1)     使用本地调用:就Java而言,本地调用可以通过RMI(远程方法调用)SocketsServletsJMS来实现;

(2)     使用分布式对象交换中间层:例如服务消费者可使用CORBADCOM来调用服务;

(3)     使用基于文本的交换协议来调用服务:服务消费者可以发送基于文本流的请求,然后可获得包含数据的应答文本。这是Web服务实现的基础。

 

第一种方法非常直接,当它有一些缺陷,它必须依赖于一种语言,服务及其消费者都必须使用同一种语言,比如Java.Net等,并且,服务及其消费者交换对象的版本还必须相同;否则,对象传输就会失败。

分布式对象传输在相当长的时间内非常成功,尤其是CORBA的跨平台特性为后来的可互操作性提供了奠定了良好的基础。

 

第三种基于文本交换的实现方法表明,在客户端和服务器端都需要进行序列化和反序列化操作。但客户端发送请求时,需要将对象序列化成文本格式,然后发送;但服务器收到请求后,它需要将文本经过序列化转换成对象。同样的过程也发送在服务应答的流程中。序列化和反序列化貌似增加了对象交换的复杂性,其实不然,请想想这样做的优势:软件能完全独立于技术,实现了软件之间的松散耦合。

将数据嵌入到文本中最自然的方法莫过于通过XML来实现。

 

XML的优点和不足

 

XML语言由W3C1998年为了数据交换的目的而设计的。对着时间的推移,该语言的魅力也开始显现。XML的主要优点有以下四个方面:

                具有结构化特性
               
是可移动的
               
具可扩展性
               
具文本格式

 

XML的不足

 

以树型结构组织的XML语言优势可能有一些缺点。例如,XML在表示共享的对象应用方面有些不足,所以人们通常争论,XML是否是表示一个任意对象的最佳选择。想想我们前面举的例子,假设您在伦敦有许多客户,使用XML表示这些客户列表时,就会产生数据冗余。这是因为在客户这个XML实体中,其城市属性值都相同。这是人们所不能接受的。其实,这个例子恰恰反证了人们对于XML的误用。在上例中,城市这个属性应该算作一个实体而非属性。这个问题的更好的解决方法是,向关系数据库学习,把重复的数据搬移到主要对象之外,在主要对象中只应用这些重复对象的ID号即可。

客户端可以使用有状态方法(Stateful Approach),首先得到城市这个实体的列表。当它调用getAllCustomers服务时,服务器返回的客户列表的城市属性只需ID即可,而不需完整的城市名,返回的示例客户列表如清单1所示:

程序清单1—有状态方法(Stateful Approach)

 

 

<Customers>

<customer>

          <id>4</id>

<name>Smith Ltd</name>

<location>

<address>39, Kensington Rd.</address>
<city>LND</city>

</location>

</customer>

<customer>

          <id>7</id>

<name> Merkx & Co.</name>

<location>

<address>39, Venice Blvd.</address>
<city>LAX</city>

</location>

</customer> <id>7</id>

...

</Customers>

 

而且,我们还可以采用无状态方法(Stateless Approach),实现自包含的服务,即在我们的XML应答中,嵌入所需要的所有数据对象。示例代码如清单2所示:

程序清单2—无状态方法(Stateless Approach)

<Entireresponse>

<cities>

<city>

<id>LND</id>

<name>London</name>

<country>UK</country>

</city>

<city>

<id>LAX</id>

<name>Los Angeles</name>

<country>USA</country>

</city>

</cities>

<customers>

<customer>

<id>4</id>

...

<location>

...

<city>LND</city>

</location>

</customer>

<customer>

<id>7</id>

...

<location>

...
<city>LAX</city>

</location>

</customer>

...

</customers>

</Entireresponse>

 

 

分享到:
评论

相关推荐

    使用Java Web服务构建SOA

    Java Web服务(Java Web Services, JWS)是Java平台上的一个关键技术,用于构建Service-Oriented Architecture (SOA)。SOA是一种设计模式,它提倡通过独立的、可互操作的服务来构建分布式应用程序。这些服务能够以...

    SOA与Web服务SOA与Web服务

    SOA与Web服务SOA与Web服务SOA与Web服务SOA与Web服务

    使用Java Web服务构建SOA 中文版 part3

    使用Java Web服务构建SOA 中文版 part3

    认识Web2.0下的Web服务和SOA

    通过标准化的通信协议和服务接口,开发者可以构建出灵活、可扩展的系统,满足日益复杂和多样的业务需求。同时,服务的松散耦合确保了系统的稳定性,使得服务的升级和维护不影响消费者的使用体验。随着技术的不断发展...

    web服务与SOA架构

    web服务与SOA架构的一些简单的关系和一些联系!

    用于实现Web服务的SOA编程模型.

    在SOA中,SOAP消息用于在服务提供者和服务消费者之间传递请求和响应。Java中,可以使用JAX-WS(Java API for XML Web Services)来创建和消费SOAP Web服务。 **3. WSDL(Web Service Description Language)** WSDL...

    使用Java Web服务构建SOA源代码

    JAX-WS提供了一套工具和API,使得开发人员能够轻松地实现服务端点和服务客户端。 4. **JAXB(Java Architecture for XML Binding)**:JAXB是一个用于在Java对象和XML之间进行映射的标准API。它可以自动将Java对象...

    用于实现Web服务的SOA编程模型

    ( 用于实现Web服务的SOA编程模型.pdf )

    使用Java Web服务构建SOA 中文版 part1

    使用Java Web服务构建SOA 中文版 part1

    SOA, Web Services

    Web 服务则是实现 SOA 的一种重要技术手段,主要通过 XML 和 SOAP 协议来提供、定位和调用网络上的服务。 #### 服务导向企业 (SOE) 在 Alec Palmer 于 2000 年的演讲《SOA, Web 服务与全球交付模式》中,他提出了...

    XML与Web服务和SOA有何关联.docx

    SOAP是一种基于XML的消息协议,它规定了消息的结构和交换规则,允许服务消费者和服务提供者之间进行安全、可靠的信息交换。例如,在清单2中展示的例子中,SOAP消息包含了一个信封,信封内封装了服务请求的具体内容,...

    使用Java Web服务构建SOA pdf 电子书

    SOA是一种软件设计方法,它将应用程序的不同功能单元通过定义良好的接口和服务边界进行分离,以促进重用和互操作性。Java Web服务在SOA中扮演着关键角色,因为它们提供了标准的、平台无关的方式来暴露和消费这些服务...

    使用Java Web服务构建SOA.part3

    本书是一本方便的开发指南,可以帮助你在当前Java EE5和Java SE6平台上实现Web服务和面向服务的架构(SOA),介绍了如何创建、部署、以及调用Web服力,再将这些服务组合成松散耦合的SOA应用程序,并介绍了一个精心...

    soa.rar_SOA_java soa _web services in soa

    Java Enterprise Edition(Java EE)提供了一系列API和服务,如JAX-WS(Java API for XML Web Services),用于创建和部署Web服务。Java的EJB(Enterprise JavaBeans)和JSF(JavaServer Faces)等技术则支持企业级...

    《Understanding SOA with Web Services中文版》webservice.

    - **快速应用集成**:SOA 的一个显著优点是能够快速集成现有的应用程序和服务,从而加速新应用的开发过程。 - **自动化业务流程**:通过SOA,可以将多个服务组合起来形成自动化的业务流程,减少人为干预,提高效率。...

    语义网Web服务SOA

    【语义网Web服务SOA】是信息技术领域中...综上所述,语义网Web服务SOA是互联网技术发展的重要方向,它将推动信息处理和自动化服务的革命,使互联网从一个信息展示平台转变为一个能够理解、处理和执行任务的智能网络。

    面向服务架构SOA与web资料源码

    5. 服务总线(Service Bus):作为服务之间的通信基础设施,它处理消息路由、事务管理、安全性和服务质量控制等问题。 Web服务是SOA的一种实现形式,使用HTTP协议来交换数据,这使得Web服务能够跨越防火墙,广泛...

    使用Java Web服务构建SOA.part4

    本书是一本方便的开发指南,可以帮助你在当前Java EE5和Java SE6平台上实现Web服务和面向服务的架构(SOA),介绍了如何创建、部署、以及调用Web服力,再将这些服务组合成松散耦合的SOA应用程序,并介绍了一个精心...

    使用Java Web服务构建SOA.part2

    本书是一本方便的开发指南,可以帮助你在当前Java EE5和Java SE6平台上实现Web服务和面向服务的架构(SOA),介绍了如何创建、部署、以及调用Web服力,再将这些服务组合成松散耦合的SOA应用程序,并介绍了一个精心...

Global site tag (gtag.js) - Google Analytics