使用Java Web Services来实现SOA(一)

一、使用Java Web Services实现SOA

 现代企业Java应用需要支持SOA原则。大多数SOA应用程序的基础是Web Services。如果你是一名企业级Java开发人员。有可能想掌握包含在J2EE5和J2EE中的Web Services标准。这些标准包括:JAX-WS(其前身是JAX-RPC)[JSR224],JAXB[JSR222],Web Services元数据(WS-Metadata)[JSR181],SOAP with Attachment API for Java(SAAJ)[JSR67],以及Web Services for Java EE(WSEE)[JSR109]。我叫这些标准统称为Java Web Services(JWS)。

SOA应用由松散耦合的Web Services构成,因而,作为企业Java开发人员,我们很自然地会借助JWS工具来创建SOA应用。甚至,一些领先的Java开发商会提供JWS技术作为开发平台来作为SOA应用的选择方案。

JWS标准无疑是很重要的,标准是SOA企业开发的基础。松散耦合的SOA应用对于企业的竞争能力是至关重要的,因为这可以使得业务流程灵活的适应全球市场的快速变化。

1.1 JWS是工具集,而不是应用框架

认识到Web Services固有的难于使用,这使我不得不重新思考我的一些关于JWS规格说明的假设。我不再奢求这些规格说明会变得很简单。我接受他们的复杂性,就像分布式计算问题很自然的表现的很复杂一样。

对于采用SOA风格的开发,我没有把JWS当成一种应用框架,而是把把当成一种工具,一种消费和部署Web Services的工具(Web Services是基于SOA的分布式计算机环境的组件)。用JWS技术来创建SOA应用需要一些训练,还需要对于设计的悟性和理解。

如何激发良好的设计并让程序的编制变得容易一些?一条出路是使用应用程序框架(framework)。举例来说,Struts框架鼓励开发基于Model 2或MVC的Web应用。框架提供在复杂的工具集之上的一层抽象。这层抽象鼓励你以一种确定的方式去设计和编程,通过约束你的设计选择(只使用框架提供的一系列经过验证的模式),框架让你手头工作变得易于理解和容易一些。

应用框架应能激励良好的设计。因此,一种优秀的SOA框架应该鼓励我们使用XML Schema库并推动跨WSDL文档的schema的重用(即,在不同的WSDL的xml文档中,我们可以使用相同的schema)。

应用程序框架不仅要使用JWS工具集,它也要鼓励一种特定的使用工具集的方式。还是拿Struts举例,在Struts框架中,我们要使用诸如servlet,JSP等等的工具集,在这些工具集之上,Struts提供了它自己的框架类(如:Action,ActionMapping)融合使用这些工具集来建立MVC架构的应用。

因为SOA是以WSDL为中心的(WSDL定义了和服务通信的接口),理想地,我们想要一种框架来让我们从事WSDL-centric的开发。但是很不幸,对于Web Service开发,还没有一种象开发MVC架构的Struts那样流行的应用框架。

1.2 Web Services Platform Architecture(Web服务平台结构)

Web Service平台是指一种特定语言编写的一套工具,用这套工具来调用和部署Web Services。平台包含服务端的组件和客户端的组件。服务端的组件通常被打包到某些Container中(如J2EE应用服务器中,或Servlet引擎中:如Tomcat)。客户端的组件通常被打包成工具,以此工具来访问与Web Service绑定的Java接口实例。

任何这样的Web Services平台,不管是Apache Axis、XFire、Systinet Server、 JWS,还是别的什么,都提供了三个核心的子系统:Invocation(调用)、Serialization(序列化)、Deployment(部署)。

1.2.1 Invocation
服务端和客户端都有Invocation机制。对于服务端,Invocation机制的责任如下:
服务端的Invocation
1. 从传输端口(如一个HTTP或一个JMS 端点(endpoint))接受一条SOAP消息.
2. 预处理这条SOAP消息(如,为了可靠的使用目的,持久化这条消息;处理SOAP 头部(Headers))
3. 决定这条消息的目标服务----换句话说,现在要知道这条消息想调用的是WSDL中定义的哪个服务的哪个操作(操    作和服务在WSDL中是以元素的方式定义出的).
4. 给出WSDL中的操作目标,现在要根据WSDL中的操作以及服务元素决定哪个JAVA类/方法要被调用,这又叫作决定Java目标(对象)。决定Java目标这一过程一般被称为Dispatching.
5. 现在把这条SOAP消息交给Serialization子系统去反序列化(deserialize)成Java对象,这些对象可以作为参数来被Java目标使用.
6. 调用Java目标(Java目标使用步骤5中反序列化的对象作为参数),得到Java目标方法返回的Java对象。
7. 现在把步骤6中得到的返回对象交给Serialization子系统去序列化成一个XML元素,该元素遵循WSDL操作目标的返回消息定义.
8. 把需要返回的XML元素包装成与WSDL目标操作一致的SOAP响应(response)消息.
9. 把该消息作为响应透过传输端口返回

 

注:本文是SOA Using Java Web Services一书的节选翻译(根据作者的开发实践,文中加入了作者自己的一些理解)的第一节,转载请注明出处:http://blog.csdn.net/fanfan6621/archive/2008/11/12/3280155.aspx

Cond...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值