servlet環境構築に関するメモ
Win32環境(Apache)の場合
JakartaプロジェクトのTomcatを利用する。http://jakarta.apache.org/
Tomcat 4.04について
servlet2.3,JSP1.2をサポートしている
新しいインプリメンテーションのservletコンテナ(Catalina)をベースにしている。
旧バージョン3.3.x(servlet2.2,JSP1.1)に対して完全な互換性を持っている(はず)。
Tomcat 4.1.3beta
4.0.xに対して以下の拡張が行われている。
- JMX based administration features
- JSP and Struts based administration web application
- New Coyote connector (HTTP/1.1, AJP 1.3 and JNI support)
- Rewritten Jasper JSP page compiler
- Performance and memory efficiency improvements
- Enhanced manager application support for integration with development tools
- Custom Ant tasks to interact with the manager application directly from build.xml
scripts
バイナリパッケージのインストール
4.1系列がベータの色合いが濃いため4.0.4を選択。
4.0.4についてはインストーラにて普通にインストール、特に問題なし。
Apacheとの連携
mod_webappがないためコンパイルの必要あり。
mod_webappのコンパイル
ソースは4.0.4のtomcat-connectorのソースに含まれている。
cygwin上でautoconfからの流れではWin版のソース(.zip)ではうまく出来ない。
Unix版のソースを使ってもconfigureまでは正しく出来るがその先がNG
antを使用してもbuild.xmlでエラーが発生する。
Win32用のプロジェクトファイルが存在しない。
tomcatのコンパイル
ANTを使うらしいので1.4.1をインストール
コンパイルしたがWindows用のバイナリは出来ない。
mod_jkのコンパイル
Tomcat-4.0とapache2.0の連携についてサーチをかけたところ、mod_jkについての記述があったので試してみる。
とりあえずantを使って出来ないか試行錯誤してみたが、一通りのjarファイルは出来るがWin32用のバイナリは出来なかった。
native配下にVC++用のプロジェクトファイルがあったので試行錯誤(プロジェクトファイルの改行コード変換、
APACHE2_HOMEの環境変数の設定)の末、コンパイルに成功。
前出のページからさらにサーチして設定方法を見つけ出しそれに従ってTomcatとApacheの設定をして動作確認。
Apache側ではもともとポートを変更して使用していたので、追加したJK機能に関する記述には仮想ホストのポートを設定する必要があった。
以上までについてはjkのパスの中にあったドキュメントに全部書いてあった。情けな。
webappと違ってTomcat側のサーバ機能をオフにするとapacheとの連携が働かないようだ。
再びmod_webappのコンパイル
mod_jkにならって、VC++用のプロジェクトファイルを作成。
コンパイルしたところapr_filename_of_pathnameのリンクが出来ない
エラーが発生、関数定義でエラーが出ていたので、apr_lib.hをインク
ルードするように修正してコンパイル成功。出来上がったのは.dll。
さて、セットアップできるだろうか??
httpd.confとserver.xmlを変更して動作の確認を行った。
動作自体はしたがmod_webappに実装上の問題があるとのことなので当面凍結。
jk_nt_serviceのコンパイル
jkの中に含まれていたのとりあえずコンパイル。要改行コード変更。どのように使うのだろうか?
どうやらTomcat3.xの時代にTomcatをNTサービス化するためのツール だったようだ。
4.xではセットアップで自動的にサービス化されるので不要だろう。
mod_jk2のコンパイル
jk2の方がmod_jkより設定が単純化され、またmod_webappより使い勝手が良いとのことなので選択。
cygwinを使用してbuildconfig.shを実行して出来たconfigureを実行。
作成された.dspのincludeパスとlibパスを修正。
リンク時にjk_jni_aprImpl_registerNativesがないとエラーが出るので、.dspにjni\jk_jni_aprImpl.cを追加してコンパイル成功。
Tomcatのhttpサーバ機能停止
mod_jk2の設定が完了したので、server.xmlを編集してTomcatのhttpサーバ機能を停止。
JK2ではサーバ機能を停止しても問題なく動作できることを確認。
データベースの利用に関してのメモ
JDBCドライバのコンパイル
Postgres7.2.1のソースを展開し、configure --with-java、makeを実行したが、どうやってもコンパイルできない。
http://jdbc.postgresql.org/によると、2002.8.14現在Postgres7.2.1がJ2SDK1.4.0ではコンパイルできない
とのことなので同サイトで提供されてるバイナリpgjdbc2.jarをダウンロードしてTomcatのservlet.jarのある場所に置く。
JDBCドライバの利用
javacコンパイラにpgjdbc2.jarを認識させるためCLASSPATHに追加。
日本語の問題
(1) ソースファイルをEUC_JPで作成。
(2) ソース中でservletの応答書式をEUC_JPとする。
response.setContentType("text/html; charset=EUC_JP");
(3) コンパイル時に日本語エンコードを支持するため、javac -encoding EUC_JPとする。
運用に際してのメモ
サーバーアプリのパスを追加する方法
jk2を使用する場合、server.xmlにContextを追加
<Context path="/java/ex"
docBase="D:/home/kazu-h/ApacheGroup/Apache2/htdocs.kazu/java/ex"
debug="0"
reloadable="true">
</Context>
workers2.propertiesにurlを登録
[uri:/java/ex/*]
info=Map the test webapp
サーブレットを追加する場所
追加したContextパスの下のWEB-INF\classes配下がサーブレットの置き場所になる。
サブディレクトリ配下にする場合は、サブディレクトリにおいたソースの先頭にpackage XXX; (XXXがディレクトリ名)を記述する。
さらにサブディレクトリを使用する場合はpackage XXX.YYY;となる。
呼び出しは http://www.server.host/context-path/servlet/XXX.YYY.ClassName と記述する。
サーブレットのコンパイル
基本的なことだが、サーブレットのコンパイルにはサーブレット用のクラスライブラリが必要となる。
少なくとも、CLASSPATHにTomcat配下のcommon/lib/servlet.jarを追加する必要がある。
運用中のトラブル事例
2003.4.4
症状
cygwinのインストール場所を変更したら、IPC-DEAMONやPostmasterサービスが起動しなくなった。
原因
windowsの環境変数でcygwinのbinへのパスが通ってなかった。
症状
NTFSのシステムでPostmasterの起動ユーザを変更したら、Postmasterが起動しなくなった。
原因
NTFSでは変更前のユーザ所有のログファイルやipc作業ファイルが削除できないため。
cygwinのコンソールからは削除できるので削除する。
/tmp/cygipc0 , /var/log/postgres.log
また、initdbをシステムアカウントで起動しない限りpostmasterのサービスはシステムアカウントで起動するように変更することはできない。
2002.7.22
症状
Postmasterサービスが起動しない。
原因
ZoneAlarmのセキュリティ設定でinternetに対してサーバを許可していなかったため。
症状
Tomcatサービスが起動しない。
原因
ZoneAlarmのセキュリティ設定でinternetに対してサーバを許可していなかったためか、
あるいはWINDOWS-UPDATEでJAVA関連が変更されたかも知れない。
対処
ZoneAlarmでサーバ接続を許可し、JavaRuntimeEditionを再インストして復帰した模様。
*/