Monday, August 27, 2007

Windows に Active Perl, Apache, Tomcat のセットアップ

仕事でローカルマシンに HTTP サーバを立て、そこでテスト用 CGI を実行する必要があったためセットアップした。この CGI はリクエストを受けると、別のサーバにリクエストを送信し、結果を整形して返すということをする。この別のサーバにアクセスするためにはローカルマシン上で VPN クライアントを実行してトンネリングする必要があるため、この作業が必要になった。

Active Perl

ActiveState 社 のサイトからインストーラをダウンロードして実行すればいい。PATH の設定も自動でなされるので、DOS 窓から普通に実行できる。Cygwin を入れていれば Perl は元から入っているだろうが、当然、その Perl は Active Perl とは別のものだ。-v オプション付きで双方を実行すれば分かる。


Apache

http://www.y2sunlight.com/ground/?Apache2 を参考にセットアップ。インストーラをダウンロードして実行するだけでいい。個人的な実験用であり、サービスとして起動する必要はないなら、8080 ポートで手動実行という選択をすればいい。

スタートメニューの 『すべてのプログラム』 から Apache HTTP Server をたどっていき、Start Apache in Console をクリックすれば Apache が起動する。ブラウザで localhost:8080 にアクセスして起動を確認する。

CGI を動かすには、conf/httpd.confScriptAlias ディレクティブの設定が有効になっていなくてはならない。localhost:8080/cgi-bin/$APACHE_HOME/cgi-bin/ の中にある CGI スクリプトにアクセス、実行できるようになっているはず。

CGI が Perl で記述されているなら、冒頭にある Perl へのパスを次のように、インストールした ActivePerl にあわせて設定する。


#!c:/Perl/bin/perl.exe


テスト用 CGI もこのようにしてうまく動かすことができた。


Tomcat

Windows で Tomcat で 5.5 をインストール済み。CGI を有効にするには、少々追加設定が必要なようで、次のページを参考にさせてもらった。

http://muimi.com/j/jakarta/tomcat55/
http://www005.upp.so-net.ne.jp/burubon/epc/java-homepage/015.html

しかし、テスト用 CGI を実行することはできなかった。どうやら、CGI がサーバにリクエストを出すのに失敗しているようだった。Apache ではうまくいったから、Tomcat の問題なのだろう。

ちなみに、Tomcat インストール後に Java をアップグレードすると起動に失敗してしまうことがある。原因は、Tomcat に指定していた JVM のパスが変わってしまったことによる。Monitor Tomcat を起動し、それの Configure をクリックし、Java タブで JVM のパスを指定しなおせばいい。たとえば、次のように。


C:\Program Files\Java\jre1.5.0_11\bin\client\jvm.dll


これは JDK1.4 から 1.5 にアップグレードしたので、このように変更した。

Sunday, August 26, 2007

SonicMQ 7.0 インストール

Sonic の CD にある setup.sh を実行してインストール。root 権限は必要ない(むろん、インストールする場所による)。インストールに X-Window は必須。ライセンスキーを入力し、ほぼデフォルトのままインストールしてよい。

管理コンソールを使うこともできるが、$SONIC_MQ_HOME/bin/startcontainer.sh を実行すればすぐ使うことができる。screen で実行しておき、止めたくなったら Ctl-C で終了させてもいい。

SonicMQ を起動すると、デフォルトでは 2506 ポートをオープンしてクライアントを待つ。クライアントは、


progress.message.jclient.TopicConnectionFactory conFactory = new progress.message.jclient.TopicConnectionFactory();

conFactory.setConnectionURLs("<ホスト名 or IP アドレス>:2506");
conFactory.setFaultTolerant(true);

TopicConnection connection = conFactory.createTopicConnection();


のようにすれば TopicConnection を作成できる。TopicConnectionFactoryTopicConnection 同様に javax.jms パッケージで定義されているインターフェースだが、setConnectionURLssetFaultTolerant は Sonic 固有のメソッドだ。

冗長化構成をとることもできるが、これは調査中。

Tomcat5.5 で Web アプリケーションの配備

Web アプリケーションを配備するために、$CATALINA_HOME/webapps/ に war ファイル(ベース名はコンテクストルート名になる)をおくか、コンテクストルートそのものを置く。もしくは、$CATALINA_HOME/conf/server.xml に次のような XML を記述してもいい。


<Context path="/LoaderSide" docBase="/home/kazu/ContextCommunication/LoaderSide/build/war/loader.war"
debug="0" privileged="true" crossContext="true">
</Context>

<Context path="/StoreSide" docBase="/home/kazu/ContextCommunication/StoreSide/build/war/store.war"
debug="0" privileged="true" crossContext="false">
</Context>


ここでは、コンテクストルート名が LoaderSideStoreSide という2つの Web アプリケーションを配備している。LoaderSide は crossContext 属性を true に設定しており、他の Web アプリケーションのコンテクスト情報にアクセスすることができるようになっている(Web アプリケーションにおけるコンテクスト間通信)。

ここまでは、Tomcat4 と同じ。だが、Tomcat4 では可能だった、コンテクストフラグメント XML を $CATALINA_HOME/webapps/ に置く方法はうまくいかなくなった。

Tomcat5 では、コンテクストフラグメント XML ファイルのベース名をコンテクストルート名と同じにして(4 ではベース名は何でもよかった)、$CATALINA_HOME/conf/Catalina/localhost/ に置かないといけない。先の例だと、LoaderSide.xml と SoreSide.xml ファイルをそれぞれ作って、配備してやることになる。path 属性はあってもいいが、XML ファイルのベース名に指定したコンテクストルート名と食い違っているとまずいから、書かない方がいいだろう。