网站首页 新闻首页 网页设计图形动画软件编程网站开发办公软件操作系统数据库网络技术认证考试范文资料黑客攻防 书籍教程 进入论坛

使用 Axis2 进行 SOA 开发,第 1 部分: 了解 Axis2 基础

http://www.diybl.com/ 2008-1-31  网络 点击:  [ 评论 ]
文章搜索:    【点击打包该文章】

但对于 Apache Axis 则是一个新特性。因此开发了 Axis2 来提供进行“热”部署的空间。

热部署:在系统启动并运行时部署服务的功能。系统可用性在实时系统或业务环境中非常重要。如果系统停机(即使很短的时间),损失会很大,可能会影响业务的生存期。不过,会同时需要向系统添加新服务,如果可以在不关闭服务器的情况下完成,则是一个极大的进步。因此 Axis2 对此问题进行了处理,提供了 Web 服务热部署功能,可以在不必关闭系统的情况下部署新 Web 服务。所需要进行的工作就是,将所需的 Web 服务存档放入到存储库的 services 目录中。然后,部署模型将自动部署服务,并进行提供。

热更新:在不必关闭系统的情况下对现有 Web 服务进行更改的能力。这是一个重要的特性,是测试环境中需要的一个功能。不过,在实时系统中使用热更新并不明智,因为热更新可能导致系统进入未知状态。此外,还可能丢失该服务的现有服务数据。为了防止发生这种情况,Axis2 的热更新参数缺省设置为 false

模块体系结构

正如上面提到的,Axis2 也具有处理程序的概念,但与 Axis 1.x 相比,指定和部署处理程序的方式有一些变化。在 Axis 1.x 中,要添加处理程序,需要首先更改全局配置文件,然后需要重新启动系统,并没有在运行时更改处理程序链的动态方法。

为了克服这个问题和增加新特性,Axis2 引入了 Web 服务扩展或模块的概念;其中模块的主要工作是对核心功能进行扩展。在 Axis 1.x 中,可以通过向处理程序链添加处理程序来实现此目标。与 Axis 1.x 处理程序链相比,使用模块的优势在于,您可以在根本不改变全局配置文件的情况下添加新模块。同时,模块是一个自容器,其中可以包含处理程序、第三方库、模块相关资源和模块配置文件。

模块的状态
模块具有两个状态:availableengaged。将模块放入存储库中,此模块就为 available 状态,而它的处理程序都不在处理程序链中。模块可以随时参与到系统中。参与就是将其处理程序添加到处理程序链(或流),因此一旦使模块参与系统,它就处于 engaged 状态了。

可以将模块作为存档文件部署,Axis2 为模块采用了一个新扩展文件名 .mar。模块存档文件中最重要的文件是模块配置文件或 module.xml。除非具有 module.xml 文件,否则该模块就是一个错误模块。模块配置文件主要用于指定处理程序及其阶段规则,因此让模块参与系统后,根据阶段规则不同,处理程序将被放置在不同的流上——inflow 或 outflow。

这个思路非常简单。或许您需要支持 WS-Addressing 或 WS-Security。然后您必须下载对应的模块,并将其放置到 Axis2 存储库的 modules 目录中。您可以在部署时通过向 axis2.xml(Axis2 全局配置文件)添加以下条目使模块参与系统,或在运行时通过使用各种方法(如使用 Axis2 Web 管理控制台或 handlerfor exsample)使模块参与到系统中:

<module ref="ModuleName">

新客户机 API

异步或非阻塞 Web 服务调用是目前 Web 服务中的一个主要需求。同时,还存在一些以非阻塞方式调用 Web 服务的方法。第一个是客户机编程模型,在此模型中,客户机能在不阻塞其应用程序的情况下以非阻塞方式调用服务。第二个方法是传输级非阻塞调用,其中的调用是在两个传输协议之间发生的。可以是 SMTP 之类的两个单向传输协议,也可以为两个 HTTP 之类的双向传输协议。Axis2 客户机 API 同时支持上述两个非阻塞调用方案。

Axis2 引入了用于调用服务的非常方便的客户机 API,此 API 包含两个类,分别名为 ServiceClientOperationClient。ServiceClient API 专门用于只需要发送和接收 XML 的普通用户,而 OperationClient 旨在供希望处理 SOAP Header 和其他一些高级任务的高级用户使用。通过使用 ServiceClient,您只能访问 SOAP 主体或有效负载。当然,可以添加 SOAP Header,但无法从服务客户机检索 SOAP Header。为了实现此操作,您将需要使用 OperationClient。

ServiceClient 具有以下用于调用服务的 API:

  • sendRobust
  • fireAndForget
  • sendReceive
  • sendReceiveNonBlocking

sendRobust:此 API 的思路是将 XML 块发送给 Web 服务,而不考虑其响应。不过,如果出现了错误,您将也需要知道此情况。因此,此 API 用于调用并不返回值但可能引发异常的服务。

fireAndForget:此 API 只用于发送 XML 块,但并不考虑响应或异常,因此这是调用仅传入的 MEP。

sendReceive:调用具有返回值的服务。这是最常用的 API 之一,可以用于调用传入-传出 MEP。

sendReceiveNonBlocking:以非阻塞方式调用服务。服务具有返回值时,可以使用此方法。为了使用此方法,您必须传递一个回调对象,将在调用完成后立即调用回调对象。

正如前面提到的,OperationClient 用于高级用户,使用 OperationClient 要求您对 Axis2 有良好的了解。在 ServiceClient 中,您并不需要知道有关 SOAP 信封或消息上下文的任何信息,但对于 OperationClient,您必须在调用服务前自己创建它。使用 OperationClient 创建和调用服务涉及到以下步骤:

  • 创建服务客户机
  • 然后使用创建的服务客户机创建操作客户机
  • 创建 SOAP 信封
  • 创建消息上下文
  • 将 SOAP 信封添加到消息上下文
  • 将操作上下文添加到操作客户机
  • 调用操作客户机
  • 如果有响应,则从操作客户机获取响应消息上下文

总结

Axis2 将不会对 Web 服务概念进行验证,而将提供更好的 SOAP 处理模型,且与 Axis 1.x 及其他现有 Web 服务引擎相比,其速度和内容方面的性能都得到很大的提高。此外,它还为用户提供了方便的 API,用于部署服务、扩展核心功能和新客户机编程模型。现在已经进入了 Axis2 的时代了。



参考资料



[1] [2]
如果图片或页面不能正常显示请点击这里 站内搜索:   

文章评论

请您留言