Linuxで使う本格的アプリケーションサーバ

IBM WebSphere Application Server V2.03 Linux

竹内 仁 (tht@ijk.com)


 近頃のIBMはJavaに関してかなりのパワーを投入しており、Java 開発環境VisualAgeやアプリケーションサーバWebSphereなどをAI X、Solaris、Windows NTなどの多種多様なプラットフォームへ提供 しています。
 こんな中、昨年末にVisualAge、WebSphereのLinux用β版がリリースされ、IBMのWebサイトからダウンロード可能になりました。
 本稿では、今後Webベースのアプリケーション開発において、重要な位置を占めることが予測される、アプリケーションサーバWebSpere for Linux V2.03を、Vine Linux1.1へインストールし、サーブレットの実行環境を構築するまでの手順と、アプリケーションサーバとしてのWebSphere for Linuxの試用感を紹介します。


IBMのLinux戦略

 今年の7月21日に幕張メッセ国際会議場で行われたLinux Exhibition'99の基調講演で、Linux戦略担当者Richard J.Sullivan氏が、以下のような発表を行っています。

 これらのことからも、LinuxはIBMが推進するe-businessにおけるソリューションの一つとして認知 されていることがわかります。


IBM WebSphere Application Serverとは

 WebSphere は最近様々なベンダが相次いでリリースしているアリケーションサーバの一つで、以下の特徴があります。

 WebSphereの製品構成としてはスタンダード版、アドバンスド版、 エンタープライズ版の3種類あり、本稿の執筆時点(平成12年1月)ではV3.0が発売されています。
 上記機能はスタンダード版でもサポートしており、アドバンスド版ではそれらに加え、EJB(Enterprise JavaBeans)を、エンタープライズ版ではIBMのトランザクションモニタTXSeriesや、CORBAをサポートした分散コンポーネント技術であるComponent Brokerなどが統合されます。

 現在、IBMのWebサイトでは以下のトライアル版をダウンロードすることができます。

 残念ながら、Linuxではまだ最新バージョンであるV3.0を試用することはできませんが、Linux用のトライアル版は期間や機能的な制約が一切ありません。
 これにより、試用期間を気にすることなく、WebSphereの持つ機能やパフォーマンスについて、評価することが出来るでしょう。

 WebSphereに限らず、アプリケーションサーバは、今後特にWebベースのアプリケーション分野で重要な位置を占めることが予測されますので、Linuxで試用できるWebSphere V2.0.3 for Linuxは、今のうちにチェックしておく必要がありそうです。

 そこで本稿では、Vine Linux 1.1上にWebSphere 2.0.3 for LinuxとBladkdownJDK 1.1.7v3をインストールし、今後の Webベースアプリケーションを構築するための、コア・テクノロジーになるであろうサーブレットの開発・実行環境を整えるまでの手順、及びWebSphereの試用感について紹介したいと思います。


サポートしているプラットホーム

 WebSphere 2.0.3 for Linuxで正式にサポートしているプラットームは以下の通りです。

(1)Red Hat 6.0 (カーネル 2.2.5 または 2.2.10 以上)
 IBM HTTP Server 1.3.6
 Apache 1.3.6
 Blackdown JDK 1.1.7v3 (グリーン・スレッドのみ)
 IBM AlphaWorks JDK 1.1.6 (ネイティブ・スレッドのみ)

(2) Red Hat 5.2 (カーネル 2.0.37 以上)
 IBM HTTP Server 1.3.6
 Apache 1.3.6
 Blackdown JDK 1.1.7v3 (グリーン&ネイティブ・スレッド)

(3) Caldera 2.2
 IBM HTTP Server 1.3.6
 Apache 1.3.6
 Blackdown JDK 1.1.7v3 (グリーン・スレッドのみ)
 IBM AlphaWorks JDK 1.1.6 (ネイティブ・スレッドのみ)

 VineLinux 1.1はRed Hat 5.2をベースにしており、(2)に近い構成になります。ただし、Vine Linux 1.1のカーネルは2.0.36なのですが、WebSphereでは2.0.37以上を正式サポートの対象にしています。
 私は2.0.36のままインストールし、今のところ問題はありませんが、WebSphereの正式な導入を検討されている方は、カーネルのバージョンアップをお勧めします。


インストール

 まず、ご参考までに私のマシン環境についてまとめておきます。

 今回は上記の環境へ以下のソフトウェアをインストールします。

  1. Blackdown JDK 1.1.7v3
  2. IBM HTTP Server 1.3.6
  3. IBM WebSphere Application Server V2.03 Linux

Blackdown JDK 1.1.7v3のインストール

 IBM AlphaWorks JDK 1.1.6はglibc 2.1を使用しておりglibc2.0採用しているVine Linux 1.1では使用できません。(独自にglibc 2.1 をインストールすれば別でしょうが)

 よって、ここではBlackdown JDK 1.1.7v3をインストールすることにしましょう。

 JDKはhttp://www.blackdown.org/からjdk1.1.7-v3-glibc-x86.tar.bz2をダウンロードします。
 ダウンロード後はrootで以下のようにしてインストールします。

 # bzip2 -d jdk_1.1.7-v3-glibc-x86.tar.bz2
 # tar xf jdk_1.1.7-v3-glibc-x86.tar
 # cp -r jdk_1.1.7-v3 /usr/local
 # export JAVA_HOME=/usr/local/jdk_1.1.7-v3
 # PATH=$PATH:$JAVA_HOME/bin

 次回以降のログインからJDKを利用できるよう、~/.bash_profile等に以下の行を追加しておくと良いでしょう。(この部分は、ご利用のシェルに応じて変更してください)

 export JAVA_HOME=/usr/local/jdk_1.1.7-v3
 PATH=$PATH:$JAVA_HOME/bin

IBM HTTP Server 1.3.6のインストール

 IBM HTTP Serverは http://www.ibm.co.jp/software/websphere/httpservers/download.htmlから以下のファイルをダウンロードします。
(この他にも SSL用のアーカイブがありますが、今回は使用しませんのでダウンロードしていません)

 HTTPServer.linux.glibc20.admin.tar
 HTTPServer.linux.glibc20.libstdc.tar
 HTTPServer.linux.glibc20.modules.tar
 HTTPServer.linux.glibc20.server.tar

 Vine Linux 1.1ではインストール時の指定によっては、Apahce 1.3.3がインストールされますので、その場合は先にapacheを停止し、アンインストールしておきます。

 # /etc/rc.d/init.d/httpd stop
 # rpm -e apache-1.3.3

 次に以下のようにして、IBM HTTP Serverをインストールします。

 # tar xf HTTPServer.linux.glibc20.admin.tar
 # tar xf HTTPServer.linux.glibc20.libstdc.tar
 # tar xf HTTPServer.linux.glibc20.modules.tar
 # tar xf HTTPServer.linux.glibc20.server.tar
 # cd IHS
 # rpm -i egcs-rhcn-libstdc++-1_1_2-1_i386.rpm
 # rpm -i IBM_HTTP_Server-1.3.6-1.i386.rpm
 # rpm -i IBM_SNMP-1.3.6-1.i386.rpm
 # rpm -i IBM_Admin_Server-1.3.6-1.i386.rpm
 # rpm -i IBM_Admin_Server_Forms-1.3.6-1.i386.rpm

IBM WebSphere Application Server V2.03 Linuxのインストール

 IBM WebSphere Application Server V2.03 Linux はhttp://www-4.ibm.com//software/webservers/appserv/download_linux.html
から以下のファイルをダウンロードします。

 IBMWAS203.tar

 ダウンロード後は以下のようにしてインストールします。

 # tar xf IBMWAS203.tar
 # rpm -i IBMWebAS-core-2.03-1.i386.rpm
 # rpm -i IBMWebAS-ibm-http-2.03-1.i386.rpm

 インストールが終わったら、以下のようにしてHTTP Serverを起動します。

 # /opt/IBMHTTPServer/bin/apachectl start

 ここまで上手くいったら、Netscape Navigatorで以下のURLを参照してみてください。

(1) http://localhost/IBMWebAS/doc/index.html
 IBM WebSphere V2.03のドキュメント(英語)を参照することができます。

(2) http://localhost:9527/
 WebSphereを管理するアプリケーションのログイン画面が表示されます。

(3) http://localhost/servlet/snoop
 サンプルで付いてくるsnoopというサーブレットを実行します。

 ここまで問題無く動作したら、Webサーバ及びServletの実行環境までのインストールは成功しています。


サーブレット動作環境

サーブレットとは

 サーブレットとは Java を用いたWebサーバの拡張技術で、CGI(Common Gateway Interface) と比較して以下の特徴があります。

・プラットホーム非依存
 サーブレットはJava言語により、サーブレットAPIを用いて実装します。このため、Java 言語の最大の特徴であるプラットホーム非依存というメリットを享受することが出来ます。

・迅速な応答時間
 CGIはクライアントからリクエストがある度に新規プロセスとして起動されるため、サーバに高い負荷がかかります。
 一方、サーブレットはサーバ上でスレッドとして起動され、起動後はそのまま常駐しますので、クライアントに対する応答時間の面で有利です。
 ただし、1回目の起動時にはサーブレットのインスタンス化とディスパッチが行われますので、それなりの時間はかかります。

 Java 言語は当初、アプレットに見られるようなクライアントサイドの技術として認知されていましたが、最近ではサーブレット、EJB などのサーバサイドコンポーネントを構築する手段としても注目されています。

関連リソース
 JAVA SERVLET API
  http://java.sun.com/products/servlet/index.html

サーブレットの作成

 それでは、何かサーブレットを作ってみましょう。
 
 HelloWorld を表示するだけでは、ちょっと芸がないので、ここでは、Webブラウザから入力した任意のクラスのスーパークラスを表示するサーブレットを作ってみることにします。(それも芸がないだろ!という話もありますが…)

 まず、Webブラウザからクラス名を入力させて、それをサーブレットに引き渡すためのHTMLを作成します。

<HTML>

<HEAD>
<TITLE>Sample</TITLE>
</HEAD>

<BODY>
<H1>Sample</H1>

<FORM METHOD=POST ACTION="/servlet/ClassInfoServlet">
Class Name: <INPUT TYPE="TEXT" NAME="CLASSNAME" SIZE=50>

<CENTER>
<P><BR>
<INPUT TYPE="submit" VALUE="Submit">
<INPUT TYPE="reset" VALUE="Reset">
<CENTER>

</FORM>
</BODY>

 ホームディレクトリ(私の場合、/home/take)配下にpublic_htmlというディレクトリを作成し、その中にClassInfo.htmlというファイル名で保存します。これ以降、/home/take というディレクトリは、自分のインストールするディレクトリに随時読み替えてください。

 次に、ClassInfo.htmlからPOSTされるクラス名を受け取り、スーパークラスを求めてHTMLを生成するためのサーブレットを作成します。

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

import java.lang.reflect.*;

public
class ClassInfoServlet extends HttpServlet {

	public void doPost(HttpServletRequest req, HttpServletResponse res)
	throws IOException
	{
		PrintWriter out;
		String className[];

		res.setContentType("text/html");
		out = res.getWriter();

		className = req.getParameterValues("CLASSNAME");

		out.println("");
		out.println("<head><title>ClassInfoServlet</title></head>");
		out.println("");
		out.println("<H1>ClassInfoServlet</H1>");

		try {
			Class cls = Class.forName(className[0]);
			Class sup  = cls.getSuperclass();
			
			out.println("Class Name: " + cls.getName());
			out.println("<BR>SuperClass: " + sup.getName());
		}
		catch (SecurityException e) {
			out.println(className[0] + ": Can't access class");
		}
		catch (ClassNotFoundException e) {
			out.println(className[0] +  ": No such class");
		}
		out.flush();
	}
}

 作成したサーブレットは、先ほどのpublic_html配下にservletいうディレクトリを作成し、その中にClassInfoServlet.javaとうファイル名で保存します。

 次に ClassInfoServlet.java をコンパイルします。ただし、Blackdown JDK にはサーブレットを開発するための、JSDK(Java Servlet Development Kit)が含まれていませんので、WebSphereに含まれるJARファイルをCLASSPATHに通しておきましょう。

$ export CLASSPATH=/opt/IBMWebAS/lib/jsdk.jar

 これでサーブレットのコンパイルが可能になりますのでjavacによりコンパイルします。

$ javac ClassInfoServlet.java

 問題なくコンパイルされたら、同じディレクトリにClassInfoServlet.class が作成されているはずです。(通常のクラスと同様ですね)

関連リソース
 〜 Servlet のお庭 〜 Servlet と Servlet Engine の HOW TO 集
  http://www.t3.rim.or.jp/~yoko-k-h/java/servlet/

サーブレットの実行

 では、作成したサーブレットを起動するための設定をしましょう。

 Netscape Navigatorでhttp://localhost:9527/を開きログイン画面でユーザ名、パスワードともにadminを指定し、ログインしてください。
 WebSphereが参照するクラスパスを設定するために、左側のフレームの中にあるメニューからSetup-JavaEngineを選択してください。

 以下のような画面が表示されますので、Reloadable Servlet Classpath に/home/take/sample/servlet を追加し、OKボタンを押してください。(パスは:で区切って指定します)

図4

 設定を有効にするために、HTTP Serverを再起動しましょう。

# /opt/IBMHTTPServer/bin/apachectl restart

 以上でサンプルサーブレットを動作させるための準備は完了です。
Netscape Navigator から http://localhost/~take/ClassInfo.html を開くと、以下のような画面が表示されるはずです。

図5

 試しに、Class Nameに javax.servlet.http.HttpServlet を入力し、Submit ボタンを押してみましょう。

図6

 先ほど作成した Servlet により HttpServlet のスーパークラスは GenericServlet が求まり、ブラウザに表示されています。


試用感

メモリ容量について

 WebSphereのドキュメントによると動作に必要なメモリ容量は、256MBから512MBとあります。
 Windowsと比較して少ないリソースで動作するLinux上でも、WebSphere、X Window、Netscape Navigator、HTTP Serverという大物を同時に動作させると、さすがに実メモリ128MBの環境ではスワップに出ていました。
 リレーショナルデータベースと連携したWebアプリケーションを単一サーバで実現するような場合は、512MBでもやや心細いかもしれません。

管理インタフェースについて

 WebSphereではサーブレット、JavaVM、データベースコネクションプール、セッションなどの設定を全てWebブラウザ上から、GUIを用いて行うことが可能です。
 また、JavaVMのヒープ領域、データベースのコネクションなどの状況をリアルタイムに監視することも可能であり、実運用時のトラブルシューティングに有用だと思います。
 ただ、筆者が使用している限りでは、やや管理インタフェースアプリケーションの安定性に何がある感を受けました。これは、Linux上で使用したNetscape Navigatorのアプレット実行環境の問題かもしれませんが、改善の余地がありそうです。

ドキュメントについて

 HTMLで提供されるドキュメントは全て英語です。ベータ版ですからやむを得ないのかもしれませんが、製品として日本での発売を行う際には、製品の性格上、やはり日本語のドキュメントが望まれるところです。

バージョンについて

 冒頭でも記しましたが、AIX、Solaris、WindowsNTは既にV3.0がリリースされています。Java(SDK、JSP、サーブレット)周りの技術は進化が早いため、Linuxに関しても他OSと同様のバージョンを使用できることが望まれます(市場のパイを考えると、Linux用のプロダクトをリリースするだけでも大変だと思いますが)


おわりに

 商用データベースの雄Oracleを始めとした、メジャーな製品が次々にLinux上へ移植され始めています。
 Linuxがクライアント環境としてのWindowsの牙城を崩すのは、一朝一夕には難しいと思いますが、サーバ用途としてはその安定度、コストの面で他の商用UNIXやWindows NTなどと十分対抗できるレベルになりつつあるということを実感します。

 今後もLinux上で本格的なアプリケーションを開発するための製品がリリースされることを期待したいと思います。


竹内 仁 (tht@ijk.com)