2003年12月3日,ついに Tomcat Version 5(以降,Tomcat5と呼ぶ) が正式リリースされた。

 注目の新機能は最新の サーブレット/JSP仕様への対応と,クラスタリング時のセッション複製機能だ。また,アプリケーション開発ツールも提供され,JSPのプリコンパイルやアプリケーションのデプロイ(サーバーへの配備)が簡単に行えるようになった。

Tomcatはサーブレット/JSPのリファレンス実装

 Tomcatは,説明するまでもないがThe Apache Jakarta Projectが開発しているWebコンテナである(Tomcat自身はサーブレット/JSP コンテナと名乗っている)。Apache Software Licenceに基づいて配布されており,オープンソース,完全無料である。

 Tomcatはオープンソースのソフトウエアであるが,その機能の充実ぶりや安定性からWebコンテナでは絶対的なシェアを占めている。また,サーブレット/JSP仕様を非常にニュートラルに実装しており,米Sun Microsystems公認のWebコンテナのリファレンス実装(基準となるソフトウエア)となっている(参考)。

 また,Sun自身が配布している Sun ONE Application ServerのWebコンテナにはTomcatが使われており,その信頼度がうかがえる。Tomcat5開発プロジェクトでもサーブレット/JSPの仕様に完全準拠することが最優先目標として開発が進められてきた。

サーブレット2.4/JSP 2.0に対応

 今回リリースされたTomcat5は,いままでのメジャー・バージョンであるTomcat4とは,対応するサーブレット/JSP仕様が大きく異なる。各メジャー・バージョンの安定リリース・バージョンと,それぞれに対応したServelt/JSP仕様のバージョンを表にしたものを表1に示す。

表1●Tomcatのバージョンとサーブレット/JSP仕様バージョンの対応

サーブレット/JSP仕様Tomcatバージョン
2.4/2.05.0.16
2.3/1.24.1.29
2.2/1.13.3.1a

 表からもわかるように,Tomcatは,対応するサーブレット/JSP仕様ごとにメジャー・バージョンを変更している。今回は,サーブレット2.4/JSP2.0に対応しており,J2EE 1.4に準拠したことになる。

オープンソースの力が育てたTomcat

 今でこそWebコンテナのリファレンス実装となったTomcatだが,その歴史は非常に興味深い,まさにオープンソースの力を感じるものである。

 そもそもサーブレットは,Sun Microsystemsがサーブレット・テクノロジの公開のためにJava Web Server(以降,JWSと呼ぶ)という,今でいうWebコンテナ(当時はJSPというテクノロジおよび,コンテナという概念もなく,サーブレット・エンジンと呼ばれていた)をリリースしたことから始まる。

 このJWSは筆者も研究用アプリケーションに利用したが,堅牢性やパフォーマンスの面でとても実用レベルにあるものではなかった。しかし,当時WebアプリケーションはCGIを用いて書くものという常識を覆し,「JavaでWebアプリケーションを書くことの有効性と可能性」を示すには十分に役目を果たしていた。その証拠に,Apache Sofware Foundationでは,Apache Webサーバーと連携して動作するサーブレット・エンジンJServを開発しリリースした。JServは,当時(現在も)のWebサーバーのデファクトであった Apache Webサーバーと連携する機能や,オープンソースであることが受け入れられ,ある程度の広がりをみせていた。

 その後,SunはJWSをApache Sofware Foundationに寄贈した。これをうけて,JServとJWSは統合され,Tomcatプロジェクトが発足し,Tomcat Version 3が誕生した。TomcatはWebアプリケーションにおける,J2EEの利用普及とオープンソースであることの手軽さから爆発的に利用者が増え,その開発プロジェクトであるThe Apache Jakarta Projectの名と共に世界中に広まった。その後,コードベースをJWSから刷新したTomcat4をリリースし,先日リリースした Tomcat5へと至っている。Tomcat4は,前述のように,Sun One ApplicationのWebコンテナとして組み込まれた。

 Sunがオープンソースに寄贈したJWSが,オープンソースの力によって,より良いものになって,Sun自身が利用している。SunもJWSを寄贈した時点では想像もしなかったであろう展開となっている(もし,予測していたのであれば恐ろしい先見性だ)。

 以下,Tomcat5の主だった機能を紹介する。

Client Deployer Packageでデプロイが容易に

 Client Deployer Packageは,コンパイルと検証,JSPのプリコンパイル,クライアントからのデプロイ(配備)をするツールである。Tomcat5とは別に単体のパッケージとしてリリースされている。パッケージはアプリケーション開発環境で,Webアプリケーションの検証(構成検証)とデプロイ,JSPのプリコンパイルを行うAntのタスクが用意されており,典型的なWebアプリケーションを開発するためのAntのビルド・ファイル(build.xml)も付属している。

 このパッケージを利用してWebアプリケーションを開発すると,今まで煩雑だったTomcat用のJSPプリコンパイル(デプロイ前にJSPをコンパイルしてしまい,初回アクセス時のコンパイルオーバーヘッドを無くす処理)が簡単に行える。

 また,デプロイ機能により,別のマシンで動作しているTomcatに対するデプロイが簡単に行えるようになる。クラスタ構成時のWebアプリケーションのデプロイが非常に便利になる。これらAntのタスクは,jarファイルにまとめられており,既存の開発環境への利用も可能である。

クラスタ構成時のセッション複製でフェールオーバーが可能に

図1●HttpSessionオブジェクト
図2●負荷分散クラスタリング
図3●HttpSessionオブジェクト複製によるフェールオーバー
写真1●AdministrationTool
写真2●WebApplicationManager
 これまでのTomcatが,商用のWebアプリケーション・サーバーに劣っていた機能の1つとして,クラスタリング機能があげられていた。これまでも,ロードバランス機能をもつソフトウエアやハードウエアとの連携によるクラスタリングは可能だったが,あくまで負荷分散を主目的としてしか利用できなかった。

 Webアプリケーションでは,ユーザーごとのアプリケーションの状態やデータはHttpSessionオブジェクトに保存するのが一般的である(HttpSessionオブジェクトはユーザーごとに生成される)。このHttpSessionオブジェクトは,アプリケーション・サーバー(Webコンテナ)が管理し,リクエストを処理したアプリケーション・サーバー内にしか存在しない(図1[拡大表示])。

 このままでは,例えクラスタ構成であっても,HttpSessionオブジェクトを保持していたアプリケーション・サーバーがクラッシュした場合には,他のアプリケーション・サーバーでは処理を継続することができない(図2[拡大表示])。

 多くの商用アプリケーション・サーバーでは,このような場合でも処理が継続できるよう,HttpSessionオブジェクトをクラスタ内の複数のアプリケーション・サーバーに複製することができる。この機能がいままでのTomcatにはなかったのである。正確には,データベースやファイルを用いることで実現できたが,実用的ではなかった。この差が運用時における商用アプリケーション・サーバーとTomcatの決定的な違いとなっていた。

 しかし,Tomcat5ではこのセッション・レプリケーション機能が正式にサポートされた。今回サポートされたのは,All-to-Allと呼ばれる方式で,すべてのHttpSessionオブジェクトをネットワーク経由で複製し,クラスタ内のすべてのサーバーがメモリ中に保持する(図3[拡大表示])。

 この方式の利点はクラスタ内のどのサーバーがクラッシュしても即座に処理を継続できるという点であるが,すべてのHttpSessionオブジェクトを,すべてのサーバーへ毎回複製するので非常にオーバヘッドがかかるという欠点もある。少ない台数のクラスタ構成の場合には有効だが,大規模クラスタ構成での利用には問題がある。

 この点はTomcatの開発チームも考慮しており,次以降のリリースではプライマリ-セカンダリ・セッション・レプリケーションという方式のサポートを予定している。この方式は,HttpSessionオブジェクトのバックアップ用サーバーを選択指定してセッションの複製を行う方式で,All-to-All 方式に比べオーバーヘッドが軽減される。もはや,クラスタリング構成時の機能は,商用アプリケーション・サーバーとの決定的な差ではなくなりつつあるのだ。

日本語化されたWebベースの管理ツールとデプロイ・ツール

 Administration Toolは,Tomcat4から同梱されているWebベースの管理ツールだ。Data Sourceの管理やユーザーの権限に関する管理が行える(写真1[拡大表示])。このツールは,Ja-Jakartaプロジェクトが日本語化を行ったため,メニューやメッセージは日本語で表示される。

 WebApplicationManagerはWebベースのデプロイ・ツールで,こちらもTomcat4から同梱されている。Webアプリケーションのデプロイやアンデプロイ,起動・停止が行える。また,各アプリケーションへのセッション数なども参照できる。このツールも,日本語で表示される(写真2[拡大表示])。

商用アプリケーション・サーバーと遜色のないソフトウエアに

 TomcatはWebコンテナであり,EJBコンテナではない。しかし,紹介したようにクラスタリング機能も管理ツールも提供されている。EJBを利用しない場合や,大規模なクラスタ構成を必要としない場合には,是非利用を検討されてみてはいかがだろうか。また,EJBを用いる場合でもオープンソースのEJBコンテナと組み合わせることで,商用のアプリケーション・サーバーと遜色のないソフトウエアとなることに気付くだろう。

 なお,Ja-Jakartaプロジェクトでは現在,Tomcat5のドキュメントの日本語化作業を急ピッチで行っている。興味のある方はぜひ参加していただきたい。

黒住幸光(Kurozumi Yukimitsu)

■著者紹介
黒住幸光(くろずみ ゆきみつ)氏
株式会社アークシステム シニアコンサルタント。1989年,スーパー・コンピュータ向け言語処理環境の研究中に,生まれて間もないJavaと出会い,Javaに専念するため転職を決意。現在,株式会社アークシステムにてオープンソース・ソフトウエアを用いたWWWシステムの構築,コンサルティングを行うかたわら,雑誌への執筆,StrutsユーザーMLの管理,Ja-JakartaプロジェクトTurbine翻訳の取りまとめなど幅広く活動中。メール・アドレスは,yukimi_2@yahooo.co.jp