• ベストアンサー

Tomcatのクラスパス

OSの環境変数で指定したclasspathと Tomcatのクラスパスは違うようですが、 Tomcatの場合web.xmlに記述するのでしょうか? 1つのjavaクラスを、サーブレットから、 Runtime.getRuntime().exec() で実行したい場合、Tomcatのweb.xmlなどにクラスパスを指定するのでなく、-classpathを指定した方が良いのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sasadora
  • ベストアンサー率68% (59/86)
回答No.3

>10分ぐらいかかるbatch処理を動かしたいのですが、 >ブラウザを砂時計にしたくない為、非同期にバックグラウンドでbatch処理を動かそうと思いRuntime.exec()を使用しようと思ったのですが、 Threadを使って別スレッドで処理をするのが普通だと思います。 Runtime.exec()を使うのも一つの手ではありますが、 リクエストの度にプロセスが生成されてしまうので、 サーバに負荷がかかります。 ServletのdoGetやdoPostなどで、スレッドを生成して、生成されたThreadの中で、時間のかかる処理を 行なえば、良いと思います。

matchori
質問者

お礼

今回は頻度が少ないので大丈夫かと思いますが、 普通はTheredということで勉強してみます。 ありがとうございました。

その他の回答 (2)

  • Harry_
  • ベストアンサー率55% (36/65)
回答No.2

> 1つのjavaクラスを、サーブレットから、 > Runtime.getRuntime().exec() > で実行したい この設計自体を考え直すことができれば それが一番良いと思うのですが、 どうしてもやりたい、または一応やり方を知りたい、 というのであれば、 Runtime.exec() で実行可能なクラスは、 どこか場所を決めて、そこに配置するようにして、 Runtime.exec() を実行するクラスを コンテキストのクラスローダを親とする 新しいクラスローダによってロードし、 リフレクションでブートする、 というのがきれいな気がします。

matchori
質問者

お礼

>> 1つのjavaクラスを、サーブレットから、 >> Runtime.getRuntime().exec() >> で実行したい >この設計自体を考え直すことができれば >それが一番良いと思うのですが、 ご忠告ありがとうございます。設計変更は可能ですがどうすれば良いでしょうか?

matchori
質問者

補足

やりたいことは、ブラウザで送信ボタンを押し、 10分ぐらいかかるbatch処理を動かしたいのですが、 ブラウザを砂時計にしたくない為、非同期にバックグラウンドでbatch処理を動かそうと思いRuntime.exec()を使用しようと思ったのですが、一般的な手法ではないのでしょうか?

  • ssj
  • ベストアンサー率73% (11/15)
回答No.1

Tomcatのバージョンが分かりませんが、参考URLにあるような形 でクラスパスが参照されます。 ちなみに、web.xmlにはクラスパスは指定しません。 具体的には 1.WEBアプリケーション用クラスパス  WEB-INF/classとWEB-INF/lib 2.Sharedディレクトリ  Tomcatインストールディレクトリ/server/classes  Tomcatインストールディレクトリ/server/lib 3.Commonディレクトリ  Tomcatインストールディレクトリ/common/classes  Tomcatインストールディレクトリ/common/lib 4.System用クラスパス  CLASSPATH環境変数で指定されるディレクトリ 5.Bootstrapクラスパス  JAVA_HOME/jre/lib/ext の順番でクラスが検索されます。 なお、System用クラスパスですが、Tomcatインストールディレクトリ の中のsetclasspath.batというバッチが実行されるので、 Tomcatの起動時に、環境変数に指定している値は上書き されてしまいます。 もし、Runtime.getRuntime().exec() でJavaを起動するので あれば、このsetclasspath.batを修正しないと駄目ではないでしょうか?

参考URL:
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/class-loader-howto.html
matchori
質問者

お礼

Tomcatは4.1.16を使っています。 setclasspath.bat の存在は知りませんでしたので、 デフォルトではCLASSPATH環境変数は 上書きされてしまうようですね。 クラスパス検索順も参考になりました。 ありがとうございます。

関連するQ&A