No.3ベストアンサー
- 回答日時:
>10分ぐらいかかるbatch処理を動かしたいのですが、
>ブラウザを砂時計にしたくない為、非同期にバックグラウンドでbatch処理を動かそうと思いRuntime.exec()を使用しようと思ったのですが、
Threadを使って別スレッドで処理をするのが普通だと思います。
Runtime.exec()を使うのも一つの手ではありますが、
リクエストの度にプロセスが生成されてしまうので、
サーバに負荷がかかります。
ServletのdoGetやdoPostなどで、スレッドを生成して、生成されたThreadの中で、時間のかかる処理を
行なえば、良いと思います。
No.2
- 回答日時:
> 1つのjavaクラスを、サーブレットから、
> Runtime.getRuntime().exec()
> で実行したい
この設計自体を考え直すことができれば
それが一番良いと思うのですが、
どうしてもやりたい、または一応やり方を知りたい、
というのであれば、
Runtime.exec() で実行可能なクラスは、
どこか場所を決めて、そこに配置するようにして、
Runtime.exec() を実行するクラスを
コンテキストのクラスローダを親とする
新しいクラスローダによってロードし、
リフレクションでブートする、
というのがきれいな気がします。
この回答への補足
やりたいことは、ブラウザで送信ボタンを押し、
10分ぐらいかかるbatch処理を動かしたいのですが、
ブラウザを砂時計にしたくない為、非同期にバックグラウンドでbatch処理を動かそうと思いRuntime.exec()を使用しようと思ったのですが、一般的な手法ではないのでしょうか?
>> 1つのjavaクラスを、サーブレットから、
>> Runtime.getRuntime().exec()
>> で実行したい
>この設計自体を考え直すことができれば
>それが一番良いと思うのですが、
ご忠告ありがとうございます。設計変更は可能ですがどうすれば良いでしょうか?
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/ …
Tomcatは4.1.16を使っています。
setclasspath.bat
の存在は知りませんでしたので、
デフォルトではCLASSPATH環境変数は
上書きされてしまうようですね。
クラスパス検索順も参考になりました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じクラスにならない確率を教...
-
javaのコンパイルができません...
-
河合塾のクラス分けについて
-
同じパッケージ、クラス名が含...
-
voidは型? それとも修飾子? ...
-
プリミティブ以外のデータ型が...
-
自作のクラスファイルがインポ...
-
エクセルVBAでのwitheventsにつ...
-
「天声人語」をインターネット...
-
main()を持つクラスが2つ以上...
-
Java「デフォルトのパッケージ...
-
VBAもしくはVB6:クラスの中で...
-
オブジェクト指向について
-
A・B・Cクラスとは?
-
SQLです教えてくださいお願いし...
-
UMLのクラス図はmain()も含むん...
-
eclipseのパッケージって何?
-
フレームとウィンドウの違いに...
-
同一パッケージにあるクラスが...
-
サブネットマスクの必要性について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java eclipse 型に解決できません
-
配列の重複する値とその個数を...
-
どこからも呼ばれていない無意...
-
同一パッケージにあるクラスが...
-
A・B・Cクラスとは?
-
同じクラスにならない確率を教...
-
dllと同じプロジェクトにする方法
-
IPアドレスのクラスAを取得して...
-
eclipse でクラスに色
-
main()を持つクラスが2つ以上...
-
コンボボックスのマウスホイー...
-
3年間同じクラスになる確率
-
自作のクラスファイルがインポ...
-
共通で使う関数を集めたクラス...
-
VBAもしくはVB6:クラスの中で...
-
重複エラーを解決するには
-
複数のクラスで共通した関数を...
-
「天声人語」をインターネット...
-
string formatについて
-
1 つのヘッダファイルに複数の...
おすすめ情報