• ベストアンサー

Tomcatのクラスパス

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

  • Java
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • 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

  • サーブレットのクラスパス追加について

    Tomcatを用いたWebアプリケーション作成についてご質問させてください。 Webアプリケーション実行時に読み込まれるクラスパスを任意に追加することは可能でしょうか。標準では{CONTEXT_ROOT}/WEB-INF/classesと{CONTEXT_ROOT}/WEB-INF/libにあるクラスがサーブレット上で実行されるクラスとして読み込まれますよね。これ以外に任意のディレクトリをクラスパスとして追加し、そのディレクトリにあるクラスをサーブレット上で実行したいのですが、可能でしょうか。 環境変数にクラスパスを設定してみたり、{TOMCAT_HOME}/bin/setclaspass.shにクラスパスを追加してみたりもしたのですが、結果は両方ともNoClassFoundExceptionでした。 ご教示お願いいたします。

    • ベストアンサー
    • Java
  • クラスパスの通し方

    いつも楽しく拝見させていただいています。 クラスパスのことで質問があります。宜しくお願いします。 クラスパスの通し方が理解できていなくて、もしEclipse上でクラスパスを通す方法があるのであれば教えていただけないでしょうか?よくパスが通っていなくてstrutsのアクションが動かない場合があるんです…。環境変数上でCLASSPATHを通す方法もあるようですがよくわかりません。以前はクラスパスとは何なのか?ということを質問させて頂いたのですが、実際にクラスパス(俗に言うパスを通す?)はどうやって通すのか教えて頂けたらうれしいです。どうか宜しくお願いします。

    • ベストアンサー
    • Java
  • シェルが実行されません

    WWWユーザから、 Process process = Runtime.getRuntime().exec("java -classpath /xx/xx/xx /export/home/test/B001"); は動くのですが、 Process process = Runtime.getRuntime().exec("java /export/home/test/B001.sh"); のようにシェルを呼び出しても動作しません。 また、hulftのジョブ起動からもシェルが動かないのですが、原因は何が考えられますでしょうか? シェルのパーミッションは755なのですが・・

  • Eclipseでのクラスパス設定について

    Eclipseでのクラスパスについて教えてください。 データベースにアクセスするJavaプログラムを勉強中です。 Windowsの環境変数『path』や『CLASSPATH』を設定し、コマンドプロンプトではコンパイルも実行もできるようになったのですが、同じプログラムをEclipseで実行するとJDBCドライバのクラスが見つからないエラーとなってしまいます。 Eclipseでのクラスパスの設定方法について教えてください。 思いっきりJava初心者です。 よろしくお願いします。 《環境》 WinXP HomeEdition JDK1.5.0 + Eclipse3.1 + PostgreSQL8.0

    • ベストアンサー
    • Java
  • Tomcatのpropertiesファイルの読み込みについて

    Tomcat4.1でWEB-INF/classes/resource/a.propertiesというリソースファイルを <a.class>.getResourceAsStream("/resource/a.properties"); と記述して読み込もうとしています。実際この記述でサーバ(Solaris)上ではうまく読み込めているのですが同じソースにもかかわらずローカルの開発環境(All-In-One EclipseのTomcat)ではうまくいきません。 eclipseのTomcatのクラスパス周りの設定だとは思っていますがどこを設定していいかわかりません。 WEB-INF/classes/配下は特に設定が必要ないのでは?とも思いますし・・。 ちなみにサーブレット・その他のクラスなどは問題なく動いてるようです。 初めての質問ですのでちょっとわかりにくいかも知れませんが もしわかる方がいらっしゃればご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • TOMCATサーブレットの呼び出し方について

    こんにちわ!yukimura1024です。 tomcat5.0.27でサーブレットをやっているのですが、 web.xmlでurl-patternを定義したのもはブラウザでアドレスを入力しても サーブレット内からrequest.getRequestDispatcherで呼び出しても見つかるのですが、 それ以外の、web.xmlでurl-patternを定義していないサーブレットは 同じディレクトリにおいてあるサーブレットでもまったく呼び出せません(TT サーブレットの数だけweb.xmlにurl-patternを定義しなくてはならないのでしょうか? 昔は特に設定しなくても呼び出せていた気がします。。。 この辺についてわかる方、教えていただけると幸いです。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • クラスパスがとおりません。

    クラスパスがどおしてもとおりません。 # javac JdbcAccessTest.java # java JdbcAccessTest.class Exception in thread "main" java.lang.NoClassDefFoundError: JdbcAccessTest/class 以下のようにパスを通しているのですが。。 # pwd /export/home/test/webapp/sample/WEB-INF/classes # env CLASSPATH=/export/home/test/webapp/sample/WEB-INF/classes ・環境はSolarisです。よろしくお願いします。

    • ベストアンサー
    • Java
  • tomcatのエラー内容について

    前回Tomcatについて起動ができなく質問をしました。 設定は一通り終えています。(Autoexec.batの記述やstartupの起動など) アドレス入力後(localhost:8080)ウェブ画面で以下の内容でエラー表示がでます。 ホームページ英和翻訳 エラー: 接続タイムアウト URL指定されたアドレスに接続できません。URLをもう一度確認してください このエラーの原因として、以下のような理由が考えられます: 正しくないURLを指定 有効でないリンクをたどった ネットワーク接続、あるいはインターネット通信上の問題 ウェブサーバーのロード・エラー と表示されます。 MS-DOSプロント上でstartupを記述すると別の画面が出てきて直ぐに消えてしまいますからTomcatが正常に起動していないと思います。 次にまたMS-DOSプロント上でTomcat runと記述すると以下の内容が表示されました Unable to set classpath dynamically. Note;To set classpath dynamically on Win9x systems only8.3 names may be used in Tomcat_home setting your classpath statically. 環境変数のための領域がたりません。 環境変数のための領域がたりません。 環境変数のための領域がたりません。 Exception in thrsed "main" java.lang.NoClassDefFoundError:org/apache/tomcat/start/tomcat です。環境変数のための領域がたりません。と表示されているのですが、Startup での環境変数は3042に設定しています。にもかかわらず領域が足りないとは他の原因があるのでしょうか。アドバイスをお願いします。

    • ベストアンサー
    • Java
  • tomcatについて

    tomcatを用いてJSPが出来るようにしたいのですが、 HTTPステータス 404 - /myApp/mathexp.jsp The requested resource (/myApp/mathexp.jsp) is not available. というエラーが出てしまい、全くの手詰まり状態です。 お約束のHelloWorldさえ表示できません。 servletのみは動くのですが・・・ web.xmlは <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>myApp</display-name> <description> deply examples </description> </web-app> です。 OS:windowsXP tomcat:Tomcat 6.0.14 環境変数 JAVA_HOME:C:\Program Files\Java\jdk1.5.0_13 JRE_HOME:C:\Program Files\Java\jdk1.5.0_13\jre CATALINA_HOME:C:\tomcat\tomcat-6 ファイル C |tomcat ||tomcat-6 |||webapps ||||myApp ....HelloWorld.jsp |||||WEB-INF .....web.xml 原因はおそらくmyAppフォルダ内にあるHelloWorldが.jspで保存してもなぜかテキストファイルとなってしまう事にあるとおもうのですが、なぜこのようになるのかが分かりません。 詳しい方、ご回答よろしくお願いいたします。

    • ベストアンサー
    • Java
  • TOMCAT_HOMEって?

     以前質問させていただいたところ、環境変数JAVA_HOMEは、Tomcatがサーブレットなどをコンパイルする時にそれを、手がかりにservlet.jarを見つける為に設定すると聞きました。それ以外の役目もあると思いますが、  では、TOMCAT_HOMEは何が、どのように使うんでしょうか? 誰か知っている人がいたら、教えてください。よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう