2008年3月20日木曜日

Apache Axis2 Introduction - volume 1

はじめに

Apache Axis2 はApache Software Foundationで作成されているWebサービスエンジン。
実装は開発言語により2種類に分かれていて、それぞれAxis2/Java, Axis2/Cと呼ばれている。

先代にあたるAxis1.xはJavaによるSOAPの参照実装扱いがされていて、各種WebアプリケーションサーバのWebサービスエンジンとして活躍した実績がある。だがなぜわざわざ2を作るのか?Axis2のページにこうある。

The new architecture on which Axis2 is based on is more flexible, efficient and configurable in comparison to Axis 1.x architecture.

つまり、より柔軟で使いやすいWebサービスエンジンを提供するのが目的、というわけ。
実際のところそれが達成できているかは怪しいが、とにかく2なのである。
以下、本家が公称している特徴。
  • SOAP1.1 および SOAP1.2をサポート。RESTもオッケー。
  • スピード
  • 少ないメモリで動く
  • 独自のオブジェクトモデルでメッセージ生成を実装
  • ホットデプロイ可
  • 非同期Webサービスを提供可能
  • MEPサポート
  • POJOアノテーション(JSR-181), SpringFrameworkのサポート、EJBサポート
  • その他WS-*のサポートなど多数
XML=オブジェクトバインディングとかは結構独自路線を行っていて、楽しい感じだ。
個人的にはJAX-WSのサポートとEJBサポートに期待していて、その辺りを検証してみたい。

検証環境

色々書いたりやるまえに環境の紹介。
  • 開発環境:Oracle JDeveloper 10.1.3.3 (Linux版, 付属OC4Jを使用)
  • OS : Debian GNU/Linux (etch, Java 1.5.0_05), もしくは Mac OSX(Java 1.5.0_13)
なんかぐちゃぐちゃ。

Axis2のインストールとサーバの立ち上げ

Axis2は配布形式が複数あって、内容が異なる。
  1. Standard Binary Distribution
  2. WAR Distribution
  3. Documents Distribution
  4. Source Distribution
まぁ基本的には1.-3.があれば大丈夫。4.はソースを見たり、デバッグで使う人用と考える。
実は1.には小型のアプリケーションサーバが同梱されていて、特別TomcatやJBossなどを準備しなくてもAxis2が使えるようになっている。

インストールしたディレクトリをAXIS2_HOMEとすると、$AXIS2_HOME/bin/axis2sever.shを実行するとポート8080を開いてサーバ`SimpleAxisServer'が立ち上がる。

ブラウザでlocalhost:8080にアクセスすると、Axis2のデモ用に準備されているVesionサービスが表示される。リンクをクリックするとWSDLを取得することができる。

このサーバはAxis2プロジェクトが独自に実装しているものであるようなので、実際の開発用にはちょっと向かない。なので開発時はWARディストリビューションを使うほうが良いが、ちょっと触ってみたり試す分には良いかもしれない。




最初のWebサービス作成とデプロイ


Axis2を使ってサービスを公開する手順を追ってみる。
以下、Apache Axis2 Quick Start Guideより一部抜粋。
  1. Axis2 Webアプリケーション(WAR Distributionに含まれるaxis2.war)をデプロイして起動を確認する
    Tomcatのデフォルト設定であれば、http://localhost:8080/axis2/でアクセス可能。
  2. サービス用のクラスを作成する。POJOで良い
  3. Axis2のサービス専用アーカイブ(拡張子.aar, 実際はJAR形式)を作成する
  4. Axis2管理ツールを使ってAARファイルをデプロイする
    管理ページの"Tools" -> "Upload service"でファイルを選択してデプロイ。しばらくすると"System Components" -> "Available Service"の一覧に作成したサービスが表示される。サービス名を選択するとWSDLが自動生成で出力される。
キモは手順3。JAR内のMETA-INFディレクトリにservices.xmlという設定ファイルが必要になる。
例えば2で作成したクラスがcom.battella.axis2.services.CalcServiceというクラスだった場合、AAR内のファイルは以下のようになる。

META-INF/manifest.mf
META-INF/services.xml
com/battella/axis2/services/CalcService.class

かんたーん。これ以外にもBinary Distributionに含まれているツールを使うのもありだが、環境整えるのが面倒なのでこれが一番簡単。クライアントはEclipseやJDeveloperなどの開発環境に付属している、WSDLからクライアント生成を行うツールを利用すると良い(本当はもっと色々できるけど)。

services.xmlは特別複雑な設定ファイルではないので、最初はQuickStartGuideにあるものをコピーして使ってもさほど問題は無いはず。今回はこんな感じにしてみた。

services.xml
<?xml version="1.0" encoding="Shift_JIS" ?>
<service name="CalcService" scope="application">
<description>Calculator Service</description>
<messagereceivers>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messagereceivers>
<parameter name="ServiceClass">
com.battella.axis2.services.CalcService
</parameter>
</service>

というわけで、初回のイントロダクションはここまで。
次回はもうちょっと深くやってみようと思う。

0 件のコメント: