
はじめまして。
使用ツール:Tomcat 6.0
前提条件:Tomcatのserver.xmlでmaxThreads="1"と記述し、同時にスレッドが1つしか動作しないようにしている
質問:
ブラウザでDBに登録されている全ての情報を取得し表示する時の動作。
ブラウザ(情報取得ボタン押下)
↓
サーブレット:DB(情報取得)
↓
ブラウザ(結果出力)
DBからの情報取得の処理が多少時間がかかってしまうため、その間にブラウザの中止ボタンが押下されてしまう場合があります。
その場合、ブラウザ⇔HTTPサーバ(Tomcat)でのセッションは切れているのですが、サーブレットの処理は継続して行われています。
再度、情報取得ボタンが押下されると、前提条件でスレッドが1つしか作成しないようにしているため、前の処理が終了するまで待機しするという形になっています。
この場合、中止→取得→中止→取得と何度も繰り返される(IEの場合取得ボタンを連打でも可)と、さらに結果の出力が遅くなるということがおきてしまいます。
これを解決するために、Tomcatが新しいリクエストを受け取った場合、現在のスレッドを破棄するといった形にできればと考えています。
上記の考えで調査を行っているのですが、良い情報を見つけることが出来ません。
実際にTomcatが現在実行中のスレッドを破棄し、新しいリクエストを受付けて処理を実行するといったようなことはできるのでしょうか?
ご存知の方がいらっしゃったら、どうか助言をよろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
多分というか間違いなく(少なくとも質問者が望む内容の)回答がつかないと思うので、何の回答にもなっていないのを承知で少しだけお話を。
> 実際にTomcatが現在実行中のスレッドを破棄し、新しいリクエストを受付けて処理を実行するといったようなことはできるのでしょうか?
仮にこんな事が発生したらそんなWebサーバー誰も使わんよね。正直HTTPサーバーとしてというかサーバー(サービスを提供する側)としてありえない動作だよね。新しい客が来たら今の客を放り出すって言ってんだから。なのでそんな機能は絶対に実装されていないと思います。
リスナーとかフィルターとか使っても多分無理だよね。フィルターの手前でブロックされると思う。
Tomcatの中身(スレッドプールを管理しているあたり)をがりがりいじればできるかも知れませんが、そんな事はしたくないですよね?
・・・・今これを書いてて思いついたんだけど、maxThreads="2"にしておいて、スレッドが一つ動いている最中にもう一つのスレッドが来た時、フィルターやサーブレットの先頭で自前でブロックしておくというのはどうかな。後はその2つのスレッド間で同期を取ってやればひょっとしたらなんとかできるかも知れない。
お早い解答をありがとうございます
>仮にこんな事が発生したらそんなWebサーバー誰も使わんよね。正直HTTPサーバーとしてというかサーバー(サービスを提供する側)としてありえない動作だよね。新しい客が来たら今の客を放り出すって言ってんだから。なのでそんな機能は絶対に実装されていないと思います。
確かに複数人の処理を扱うサーバとしてはおかしな動きですね。
ご指摘を受けるまで1人の人の動作という観点で考えていたので、前の処理を破棄するのが妥当かな?と考えておりました。
後の指示を待たせないように処理する場合、Tomcatでスレッドを1つに制限するという行為自体がおかしいということなのでしょうか?
maxThreads="2"に関しては試行してみますね
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptからJAVAクラスを呼...
-
tryの終了
-
表示待ち時間に「処理中...」の...
-
vba Sleep関数について教えてく...
-
「タイプ初期化子が例外をスロ...
-
eclipse-Tomcatでのデバッグに...
-
関数内の変数に<summary>コメン...
-
エクセルVBAで、条件に一致する...
-
中学のクラス数
-
javascriptからjavaを呼び出したい
-
【sendkeysメソッドが動かずに...
-
Excelで =EMBED("Acrobat Docu...
-
引数で日付を2つ与え、その間の...
-
サーブレットコンテキストの意...
-
UMLのクラス図はmain()も含むん...
-
リフレクション
-
0歳児の指しゃぶりに関して
-
final修飾子を使っているのに、...
-
変数名の付け方
-
ウィンドウを最前面にできません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaプログラムからポップアッ...
-
Javaでのデバッグコード削除
-
tryの終了
-
Tomcat高負荷時の設定について
-
SwingUtilities.invokeLater(ne...
-
ラベルの表示までが異常に遅い...
-
vba Sleep関数について教えてく...
-
Delphiのマルチスレッドの割り...
-
ラジオボタンの選択判定
-
アコーディオンメニューをアン...
-
JSP、サーブレットの初期処理
-
ftp 同時複数接続の負荷テスト...
-
[Java] while(true)の意味
-
C#で別スレッドの終了を知りたい
-
switch文の中に、throws new Ex...
-
アロー関数がよくわかりません
-
セル範囲で文字を検索はFor必須?
-
PHP
-
Servlet+JSPを使ったWEBアプリ...
-
Javaプログラムから外部コマン...
おすすめ情報