- ベストアンサー
ServletからバックグラウンドでJavaを走らせたい
Javaのバッチをコマンドラインからでなく、Servletから非同期で走らせたいのですが、うまくいきません。 多数サイトを見ましたが引数なしの場合でも、JavaをServletのバックグラウンドで走らせる事はできませんでした。5時間はまっています(T_T) Process process = Runtime.getRuntime().exec("java C:\\java\\src\\batch\\testJava argv01 argv02"); ■環境は、JDK1.4.1、Tomoat4.1.6、Windos2000で、 javaを打ち間違えたら、例外が発生したのでjavaだけはとりあえずパスがとおっているようです。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
クラスパスを java -classpath C:\\java\\src\\batch argv01 argv02 のように指定するとどうなりますか?
その他の回答 (2)
- run_away
- ベストアンサー率42% (8/19)
スレッドつくってその中ではしらせてはいかがでしょう。割と簡単だし、DOSコマンドを叩くよりも拡張性も高くていいように思いますが。 まぁ、現在の問題もどうしてそうなったのか知っておいた方がいいですね。今度は (XO)「ServletからバックグラウンドでVBのEXEを走らせたい」という質問を投げることになりかねませんよ。 (XO)は困った顔のつもり。。。
お礼
別案ありがとうございます。 今回はスレッドを使用しませんでしたが、 習得する時間がある時に試してみようと思います。 ありがとうございました。
Javaに限らず、どんな言語でも「うまくいきません」「できません」「はまっています(T_T)」では半永久的に動きませんよ。 具体的に「どういう現象になってしまうのか」「動作条件を変えればどうなるのか」を挙げないと。それがデバッグというものです。 たとえば "java C:\\java\\src\\batch\\testJava argv01 argv02" ですが、これはコマンドラインから叩けば動くのですか。バッチ自体には間違いはないのですか。argv01, argv02を変えるとどうなりますか。バッチではなく、exeファイルだったら動きますか。などなど。 「うまく動かなかったけど、適当にいじったら何となく動くようになったよラッキー♪」なプログラムは、お客さんにはとても納品できません。
お礼
お返事ありがとうございます。 バッチ自体は間違いないのですが、 "java C:\\java\\src\\batch\\testJava argv01 argv02" を、コマンドラインでたたくと、 ClassNotFoundになってしまいました。 C:\java\src\batchへ移動し、 testJava argv01 argv02では動作するので、 パスの設定と思われますが、環境変数classpath には、C:\java\src\batchを書いています。 JavaはCGIなどに比べるとパス関係が難しいです。。
お礼
yujiさん。ありがとうございます。 とりあえずバッチを他のディレクトリから、 コマンドラインで実行できるようになりました(;_;) あとは、 Servletからの実行ですが取り急ぎお礼申し上げます。