- PR -

検索処理の途中キャンセルについて(JSP+Servlet(apache+tomcat))

投稿者投稿内容
ふく
常連さん
会議室デビュー日: 2005/11/15
投稿数: 25
投稿日時: 2006-01-24 14:50
お世話になります。

現在、JSP+Servletで簡単な検索画面を作成しています。
ここで、検索処理中にPopUpを出し、中止ボタンを押されたら検索処理を中断したいのですが、どのような実装方法が考えられるのでしょうか?

みなさまのご教授をお待ちしています。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-24 15:11
やり方は色々とありそうですが、一番簡単そうなのを一つ。

サーブレット内で処理中に "." 等を書き出しつつ毎回 flush() して、IOException が発生したら中断、というのはどうでしょう。

「簡単な検索画面」であればそのような凝った仕組みはつくらない、というのがお勧めです。
トランザクションタイムアウトなりクエリタイムアウトを設定して人間ではないところでタイムアウトさせるのが良いかと。
ふく
常連さん
会議室デビュー日: 2005/11/15
投稿数: 25
投稿日時: 2006-01-25 14:31
インギさん

レスありがとうございます。

> 「簡単な検索画面」であればそのような凝った仕組みはつくらない、というのがお勧めです。
簡単な検索画面ではあるのですが、お客様がどうしてもPopUp表示で人間が任意にタイムアウトさせたいとのことなのです。^^;
色々調べてみましたが、現在の検索処理を別スレッドにしないたダメなのかな?
という気がしています。。

これだと結構な時間がかかるので、もっと簡単なものがあればいいのですが・・・^^;
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-25 14:43
>色々調べてみましたが、現在の検索処理を別スレッドにしないたダメなのかな?
いやいや、だからスレッドを作らなくて実現できる簡単な方法を提案したつもりなんですが・・・。
読んで頂けましたか?
ふく
常連さん
会議室デビュー日: 2005/11/15
投稿数: 25
投稿日時: 2006-01-26 10:46
インギさん

お返事ありがとうございます。

> いやいや、だからスレッドを作らなくて実現できる簡単な方法を提案したつもりなんですが・・・。
> 読んで頂けましたか?

失礼しました。私の理解力不足です。m(__)m

> 「簡単な検索画面」であればそのような凝った仕組みはつくらない、というのがお勧めです。
と言われていたのでPopUp形式じゃないのかなぁと思いました。(^^;

まだJava始めたばかりの若輩者なのでインギさんのおっしゃった方法とPopUpで中止を押されて中断させるのが頭の中で繋がりません。(-_-;)

PopUpにて"."を書き出し中(ファイル?画面??)にflush()すると、ボタンを押されたタイミングで何故かIOExceptionが走るということですか???

理論というか、どうしてそうなるのかを教えていただけないでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-26 11:20
すいません。説明をはしょりすぎでした。
"."を書き出すのは ServletOutputStream とか、JSPWriter とかです。
クライアントが中止ボタンを押していればそれ以上書き出せないので IOException が発生しますので catch ブロックで中止ボタンの押下を検出できます。
検索処理というのが何らかのループ処理であればそういった仕組みを途中に組み込めるのではないかと思いました。

まず、分からなくても手を動かしてみるだけの材料はあると思うので興味があればやってみてください。

検索処理というのが DB へ問い合わせを行うような性質ですと、タイムアウトするまではスレッドがブロックされてしまいますからマルチスレッドにする必要があります。
未記入
会議室デビュー日: 2006/01/26
投稿数: 1
投稿日時: 2006-01-26 11:54
難しいですよね!

検索処理ということは、DBへの問い合わせを行うような動作なら、
タイムアウトエラー(或いは他の重大のエラー)が発生したまで、
中断できないだと思います。

若し俺の理解間違いないなら、一つのを提案します。
検索画面では、検索ボタンを押すと、POPUP画面を表示して、
「検索中」というメッセージと「中止」ボタンを表示します。
検索請求をサーバーに提出したなので、この時点で、POPUP
画面の「中止」ボタン押しても、サーバー側で実行しているの検索
スレッドを中断できないです。でも、この検索スレッドを捨てて、
よろしいでしょうか?

「中止」ボタンを押すと、JAVASCRIPTで親画面は別の画面を遷移して、
(も一回検索画面をREFRESHもいいよ)、前の処理結果いらない。
これは、例えば:俺たちIEでHOMEPAGEを見るとき、SPEED遅いなら、
画面を完全に表示されてなかったとき、IEの「BACK」ボタンを押して、
前の画面にすぐ戻る と同様だと思います。

備考:俺は日本人じゃないで、日本語を勉強中ですが、上記のが分かりにくいなら、
   すみませんね。(@@)


ふく
常連さん
会議室デビュー日: 2005/11/15
投稿数: 25
投稿日時: 2006-01-26 13:59
インギさん
未記入さん

お返事ありがとうございます。

○インギさん
わかりやすいご解説ありがとうございます。m(__)m
正直、Exceptionをこのように使えるなんて思ってませんでした。(^^;
Exceptionの使い方で非常に勉強になりそうです。
時間のかかる検索処理はファイル操作なので、色々試してみます。

○未記入さん
日本語十分に理解できましたよ。(^^)
JavaScriptで親画面を遷移orリフレッシュですか。
HTML+JavaScriptのみだったら綺麗にできそうですね。
Servletが噛んでるので破棄したあとの挙動に注意しながら試してみます。

お二人とも、貴重なご意見ありがとうございます。m(__)m

スキルアップ/キャリアアップ(JOB@IT)