Windows Vista + Tomcat Tips

Windows VistaTomcat を使うときの備忘録です。

  1. Windows VistaTomcat が起動できない。
  2. getRemoteHost() で IPv6 の IP アドレスが返ってくる。

インストーラTomcat をインストールすると、%PROGRAMFILES% (通常は C:\Program Files) 以下にインストールされますが、Windows VistaUAC 機構では、通常は %PROGRAMFILES% 以下への書き込みが制限されています(まず logs, work などに書けないですし、IDE からのファイル操作や deploy も制限されます。)。%PROGRAMFILES% を避け、例えば C:\usr\local\apache-tomcat-5.5 などにインストールします。インストーラではなく zip ファイルを伸張する方が簡単です。UAC 機構を切るのは最悪の回避方法だと思います。

また、システムプロパティで、ログオンしているユーザの環境変数 JAVA_HOME と PATH を設定します。


JAVA_HOME=C:\Program Files\Java\jdk1.6.0_03
PATH=%PATH%;%JAVA_HOME%\bin

setenv.bat ではダメで、システムプロパティで設定するところが注意点です。

これで、ログファイルをまったく吐かずに終了する。conf/tomcat-user.xml のリネームで失敗して終了する。といった状況からは抜け出せます。

作成中の Web サービスのアクセス制限を行うために javax.http.servlet.HttpServletRequest#getRemoteHost() にてアクセス元の IP アドレスを取得してみたところ、


0:0:0:0:0:0:0:1
が返ってきました。ローカルホストからアクセスしていたので、127.0.0.1 を期待していたのですが Windows Vista では、IPv6 のネットワークスタックが有効になっており IPv6 のアドレスが返ってきました(IPv4 よりも優先されているようです。)。

Java システムプロパティの java.net.preferIPv4Stack を true にして、IPv4 のネットワークスタックを強制的に使うことで期待していた動きを得られました。


JAVA_OPTS="-Djava.net.preferIPv4Stack=true"

IP アドレスの正規表現がドット区切りというのも、そろそろ気をつけないといけない時期に入ってきました。

森田::