- PR -

マルチスレッド:必要のなくなった別スレッドで実行中のDBへのSQL実行を中止するには?

1
投稿者投稿内容
くえるぼ
会議室デビュー日: 2004/12/15
投稿数: 16
投稿日時: 2005-11-27 18:20
こんばんは、Java初心者のくえるぼと申します

ユーザー側でしてされた条件で、データベースに対してSQLを
実行し、帰ってきた結果をクライアント側にテキストファイルで
ダイアログボックスにて返すプログラムを構築しております。

現状データベースに対して問い合わせを行うとSQLの処理が
終わるまで10分〜20分くらいかかってしまいますので、
ダウンロード用の画面を表示する処理とデータベースに問い合わせを
する処理を別スレッドにして処理を行っております。
ただし、データベースに問い合わせをした結果は、ブラウザから
ダイアログボックスとして返さなければいけないので、responseは
同一のものを使用しています。

このプログラムを作成していて気がついたのですが、以下の条件の時に
スレッド(DBへSQL文を問い合わせしているもの)が走りっぱなしに
なってしまっています。
今回の問い合わせの主目的はこの”走りっぱなしになっているSQL文の
問い合わせを、実行する必要がなくなった場合に正しく停止したい”
ということになります。

【走りっぱなしになるケース】
1.DBに問い合わせをしたが、結果が帰ってくる前にログアウトをした場合
2.DBに問い合わせをしたが、結果が帰ってくる前にブラウザをクローズした場合
3.DBに問い合わせをしたが、結果が帰ってくる前に異なるメニュー(サーブレット)を
押して、レスポンスが変ってしまった場合

1.に関してはログアウトする際に、Threadが存在した場合(isAlive?)、スレッドを
解放(null)するだけで、DBに問い合わせをしたSQL文の実行が停止しますでしょうか?

2.に関しては、ブラウザが閉じられたというイベントを関知する方法などはあるのでしょうか?セッションのタイムアウト時間で対応するしかないのでしょうか?
また、セッションがタイムアウトしたときには、DBに問い合わせしたSQL文は停止
しますでしょうか?

3.結果を返すべき画面(レスポンス?)が変ったと言うことを検知することは
できますでしょうか?

Javaに関しては本当に勉強中で稚拙な質問で恐縮ですが、アドバイスいただければ
幸いです。
どうぞヨロシクお願いいたします。m(_ _)m
1

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