はじめまして。
使用ツール: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で質問しましょう!
似たような質問が見つかりました
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- JavaScript Javascriptを使ってQRコード読み取り、取得した情報をPOSTしたいと思っています。 1 2023/04/28 15:18
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(法律) 職場の上司が、私の保有個人情報を勝手に、警察に提出していました。 これは違法ですか? 初めまして。行 3 2022/11/07 20:38
- 弁護士・行政書士・司法書士・社会保険労務士 ★行政書士試験の民法についての質問になります。 物権変動についての質問になります。 問 不動産の取得 1 2023/05/24 19:36
- 不動産鑑定士・土地家屋調査士 合筆された地積測量図の取得(登記情報提供サービス) 1 2022/07/13 00:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
アコーディオンメニューをアン...
-
データ未入力時のエラー処理が...
-
スレッド
-
ファイルの排他
-
ブラウザを閉じた後のサーバ側...
-
onBlurとonFocusの処理順序につ...
-
switch文の中に、throws new Ex...
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
c++,ある関数のクラスから別の...
-
private static という変数の修飾
-
3年間同じクラスになる確率
-
配列の重複する値とその個数を...
-
コマンドプロンプト実行後に画...
-
変数名の付け方
-
ワイルドカード<?>と型パラメー...
-
JSPで<SELECT>の中にDBから持っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
数値の定数を付ける時
-
Javaでのデバッグコード削除
-
C#で別スレッドの終了を知りたい
-
[Java] while(true)の意味
-
Javaプログラムからポップアッ...
-
Tomcatのスレッドを破棄する方法
-
ラジオボタンの選択判定
-
JavaScriptからJAVAクラスを呼...
-
素数判定を再帰処理で
-
PHPでDB処理中にプログレスバー...
-
Javaアプリケーション実行の返...
-
WPF C#でF10のイベント取得方法...
-
doGetとdoPostの違い
-
switch文の中に、throws new Ex...
-
Tomcat高負荷時の設定について
-
ラベルの表示までが異常に遅い...
-
ExcelVBA で文字列の特定の文字...
-
JDBCでテーブルUPDATE後の再検...
-
SwingUtilities.invokeLater(ne...
おすすめ情報