SSブログ

GAE/J の開発で ant を使うと java.exe プロセスが残る [NT]

Google App Engine の Java 版(ここでは GAE/J と表記する)の話。

GAE/J で Web アプリケーションを開発してサーバにアップロードする前に local で動作確認をすることを考える。

GAE/J では ant スクリプトが用意されていて、ant runserver と記述するとテスト用のサーバが起動する。起動したサーバを停止しようとして「CTRL-C」をタイプすると、ant は終了するが、プロセスを確認すると java.exe が残ったままになる。

この java.exe はサーバプロセスであり、内部的には jetty のようだ。

The Java Development Server - Google App Engine - Google Code によると、Running the Development Web Server 節で、

appengine-java-sdk\bin\dev_appserver.cmd [options] war-location

を実行してサーバを起動して、終了するときは

To stop the web server, press Control-C (on Windows, Mac or Linux).

とある。 Google の資料のように dev_appserver.cmd を利用した場合、CTRL-C でサーバは停止し、java.exe プロセスは残らない。しかし、ant runserver の場合はプロセスが残ってしまう。

もしかして、ant.bat/ant.cmd を実行しているのが問題なのかと思い、ant を java コマンドで起動してみた。ant を java コマンドで起動するには Running Apache Ant の解説を読むと良い。ant を java コマンドで起動した場合であっても runserver すると java.exe プロセスが残ってしまった。

runserver で動作しているサーバは内部的には jetty のようだ。jetty の場合は、Running Jetty-6.1.x - Jetty - Codehaus の Stopping にある操作をすると別のシェルから jetty を停止できる。

java - Java アプリケーション起動ツール などによると、java コマンドの -D オプションは JVM に対して与えるプロパティである。ant runserver から呼び出される ant-macros.xml に jetty の -D オプションを追加したが netstat -a で確認すると、STOP 用のポートは開かれない。

ant-macros.xml を解析すると com.google.appengine.tools.KickStart を呼び出しているので、直接 java コマンドで KickStart と -D オプションを付けてみたりもしたが、やはり STOP 用のポートは開かれない。STOP 用のポートは jetty の start.jar で処理しているのかもしれない。

結局、 dev_appserver を直接呼び出した場合はプロスセスが残らないので、ant との組み合わせの問題か、ant スクリプトの記述方法が問題なのかもしれない。dev_appserver の末端まで CTRL-C が通知できていない気がするんだよね~。

※私は Windows 2000 で動作確認しているので、他の環境では結果が異なるかもしれません。

[追記]このエントリには続きがあります。

 


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。