使用 Axis2 进行 SOA 开发,第 1 部分: 了解 Axis2 基础
但对于 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 处理程序链相比,使用模块的优势在于,您可以在根本不改变全局配置文件的情况下添加新模块。同时,模块是一个自容器,其中可以包含处理程序、第三方库、模块相关资源和模块配置文件。
|
可以将模块作为存档文件部署,Axis2 为模块采用了一个新扩展文件名 .mar。模块存档文件中最重要的文件是模块配置文件或 module.xml。除非具有 module.xml 文件,否则该模块就是一个错误模块。模块配置文件主要用于指定处理程序及其阶段规则,因此让模块参与系统后,根据阶段规则不同,处理程序将被放置在不同的流上——inflow 或 outflow。
这个思路非常简单。或许您需要支持 WS-Addressing 或 WS-Security。然后您必须下载对应的模块,并将其放置到 Axis2 存储库的 modules 目录中。您可以在部署时通过向 axis2.xml(Axis2 全局配置文件)添加以下条目使模块参与系统,或在运行时通过使用各种方法(如使用 Axis2 Web 管理控制台或 handlerfor exsample)使模块参与到系统中:
<module ref="ModuleName">
异步或非阻塞 Web 服务调用是目前 Web 服务中的一个主要需求。同时,还存在一些以非阻塞方式调用 Web 服务的方法。第一个是客户机编程模型,在此模型中,客户机能在不阻塞其应用程序的情况下以非阻塞方式调用服务。第二个方法是传输级非阻塞调用,其中的调用是在两个传输协议之间发生的。可以是 SMTP 之类的两个单向传输协议,也可以为两个 HTTP 之类的双向传输协议。Axis2 客户机 API 同时支持上述两个非阻塞调用方案。
Axis2 引入了用于调用服务的非常方便的客户机 API,此 API 包含两个类,分别名为 ServiceClient 和 OperationClient。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 的时代了。
- 了解有关 XML Pull 解析的信息。
- 阅读“用 AXIOM 促进 XML 处理”(developerWorks,2005 年 10 月),以获取对使用此方法进行 XML 处理的概述。
- 访问 Apache Software Foundation,以了解有关 Apache Axis2 的信息。
- 访问 W3C,了解最新的 SOAP 版本。
- 请访问 IBM developerWorks 上的 SOA and Web services 专区,以获得数百篇关于如何开发 Web 服务应用程序的文章以及入门级、中级和高级教程,您将大开眼界。
- Sun Developer Network 上的“Service-Oriented Architecture and Web Services: Concepts, Technologies, and Tools”描述了用于 Web 服务和 SOA 的一些工具和技术。
推荐文章 |
