SOAPの3つの機能パソコンで試してわかるWebサービス(2)(4/6 ページ)

» 2002年09月05日 00時00分 公開
[イチロー樋口研究室監修]

Webサービスはクライアント/サーバ型アプリケーション

 前回、「Webサービスはクライアント/サーバで稼働する」といいました。すなわち、Webサービスでは、クライアントプログラムがネットワーク経由でサーバプログラムにアクセスしています。そして今回のサンプルプログラムでは、クライアントから渡した文字列「こんにちは」がそのままサーバから戻ってくるアプリケーションになっています。

図5 Webサービスはクライアント/サーバで稼働する 図5 Webサービスはクライアント/サーバで稼働する

 次に、コマンド(1)クライアントプログラム(Client)はJavaアプリケーションですので、JavaVM上で動いていることが分かります。そしてコマンドをよく見ると、コマンド(2)(3)は、コマンド(1)とは異なるプログラム(AdminClient)です。すなわち、このサンプルプログラムでは2種類のクライアント/サーバプログラムが動いていることになります。

 また、これまでの環境設定で分かっているとおり、AxisエンジンはTomcat上で動いています。そして、Servletにアクセスしているということは、HTTP通信であることも分かります。

図6 ClinetとAdmin Clientというクライアントアプリケーションとサーバアプリケーションがある。つまり、2種類のクライアント/サーバプログラムが動いている 図6 ClinetとAdmin Clientというクライアントアプリケーションとサーバアプリケーションがある。つまり、2種類のクライアント/サーバプログラムが動いている

配置記述ファイルの秘密

 さて、「?」の調査です。なぜ、コマンド(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エンジンの正体

 さて、核心に入っていきましょう。実は、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クラスのソースコードで確認することができます。

図7 通信プロトコルとして「SOAP」が利用されている 図7 通信プロトコルとして「SOAP」が利用されている

 そして、この「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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。