前回、「Webサービスはクライアント/サーバで稼働する」といいました。すなわち、Webサービスでは、クライアントプログラムがネットワーク経由でサーバプログラムにアクセスしています。そして今回のサンプルプログラムでは、クライアントから渡した文字列「こんにちは」がそのままサーバから戻ってくるアプリケーションになっています。
次に、コマンド(1)クライアントプログラム(Client)はJavaアプリケーションですので、JavaVM上で動いていることが分かります。そしてコマンドをよく見ると、コマンド(2)(3)は、コマンド(1)とは異なるプログラム(AdminClient)です。すなわち、このサンプルプログラムでは2種類のクライアント/サーバプログラムが動いていることになります。
また、これまでの環境設定で分かっているとおり、AxisエンジンはTomcat上で動いています。そして、Servletにアクセスしているということは、HTTP通信であることも分かります。
さて、「?」の調査です。なぜ、コマンド(2)(3)を実行すると動いたり動かなかったりしたのでしょうか?
それを知るためにコマンド(2)指定した「deploy.wsdd」ファイルを確認してみましょう。
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="MyService" provider="java:RPC"> <parameter name="className" value="samples.userguide.example3.MyService"/> <parameter name="allowedMethods" value="*"/> </service> </deployment>
このファイルには、サーバ上の「サービス」がどのような名前(MyService)の何のサービス(java:RPC)で、何のクラス(samples.userguide.example3.MyService)で提供されていて、何のメソッド(「*」→すべてという意味)が利用できるかが記述されています。
このファイルを「配置記述ファイル」(Deployment Descriptorファイル)といいます。AdminClientはこの配置記述ファイルをAxisエンジンに転送します。するとAxisエンジンはこの定義を自分の設定ファイルであるserver-config.wsdd*1に書き込みます。これは、サービスをAxisエンジン上に配置し、利用できるようにする操作であり、「配置」(Deploy)といいます。この配置を行う前にクラスファイル(この場合、samples.userguide.example3.MyService.classファイル)をAxisエンジンが読み込めるパス(CLASSPATH)に保存してある必要があります。
これで分かるように、AdminClientはAxisエンジンの設定を行うための管理用クライアントです。同様にコマンド(3)では、undeploy.wsddファイルを転送しています。これは、配置したサービスをAxisエンジンから取り除く操作をしています。
*1: Axisをインストールした直後にはserver-config.wsddファイルありません。そのため、コマンド(1)-1(第1回のコマンドを参照)のような結果になります。しかし一度AdminClientでdeploy.wsddを送り込むと自動的にserver-config.wsddファイルが作成されるため、コマンド(1)-1のような結果は最初の1回だけであり、以降、deployされていないサービスにアクセスしたときはコマンド(1)-3のような結果になります。
さて、核心に入っていきましょう。実は、Axisエンジンには2つのServletが提供されています。これは、今回の最初に解説した「Axisエンジンの管理機能」の「Axisエンジンの始動/停止」「Axisエンジンのサービス一覧確認」のURLをよく見ると分かります。それぞれ別のServletにアクセスしていたはずです。
1つはClientプログラムが通信をしている「AxisServlet」です。Webサービス・クライアントからの要求はこのAxisServletがコントロールしています。このAxisServlet上で提供される「サービス」こそClientプログラムが通信している相手になり、クライアント/サーバ形式で動作します。AxisServlet上で提供されているサービスには「MyService」という名前が付けられています。そして、このMyServiceサービスは配置記述ファイルから読み取れるように「samples.userguide.example3.MyService」というJavaクラスのインスタンスであることが分かります。
そしてもう1つのServletが、AdminClientと通信をし、DeployやUndeployを行う「AdminServlet」です。このAdminServletはAxisServletの状態を管理しています。deploy.wsddファイルをAdminClient経由でAdminServletがserver-config.wsddファイルに書き込みます。このserver-config.wsddファイルに従ってAxisServletは動作を変えていきます。
これらは、ClientクラスやAdminClientクラスのソースコードで確認することができます。
そして、この「Client − AxisServlet」や「AdminClient − AdminServlet」の間の通信プロトコルとして「SOAP」が利用されています。やっとSOAPが見えてきましたが、では、一体SOAPは何をやっているのでしょうか?
COLUMN Axisのなりたち
Axisは、Apache XML Projectで開発されているSOAPの実行/開発環境です。Apacheではすでに「Apache SOAP」という実行環境がリリースされていますが、この次バージョンとしてAxisが開発されています。Apache SOAP Ver.3.0ともいえるAxisは2002年8月現在、Beta3までがリリースされ、正式バージョンの発表までもう少しのところまできています。Apache SOAPは、すでにWebサービスの基盤ソフトウェアとしてさまざまな商用アプリケーション・サーバに利用されてきました。同様にAxisも今後のWebサービスの基盤ソフトウェアとして多くのアプリケーション・サーバで利用されることが予想されます。
Axisは、Apache SOAPの単なるバージョンアップではなく、大きな変更が行われています。例えば、SOAPはXML技術をベースにしているため、XML解析/操作が重要な動作になります。この解析(パース)作業に、Apache SOAPではDOM APIを利用していましたが、Axisではより高速な処理を行うためにSAX APIを利用するようになっています。
また、もともとSOAPの仕様ではHTTP上で利用するだけでなく、SMTPやFTPなどさまざまなプロトコルに対応できるようになっています。Axisでは、これを実現できるようなデザインになっており、SOAPを幅広い環境に適応させられるようになっています。
このようにAxisはWebサービスの実行/開発環境として第2段階のソフトウェアであるといえるでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.