- - PR -
サーブレットのタイムアウトってできますか?
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-12-01 17:05
やりたいこと:
---------------------------------------------------------------------------- ・クライアントのVBアプリケーションからサーブレットにメッセージを送信する ・サーブレットから、メッセージで指定されたビジネスロジックのメソッドを 呼び出す ・メソッドでは、メッセージに従ってOracle9iに対しSELECT/INSERT/UPDATE/DELETE を発行する ・結果をクライアントに返し、表示させる ---------------------------------------------------------------------------- なんですが、 ビジネスロジックの処理時間が一定時間を超えてしまった場合、処理を 中断させ、必要ならばロールバックを行いたいのですが、メソッドの 外から処理を中断させることなんてできるのでしょうか。 いろいろと資料を検索したり、識者に当たってみたりしましたが、よい 解決方法が見つかりませんでした。 よい方法をご存知の方がいらっしゃいましたら、どうかよろしく お教えください。 | ||||||||
|
投稿日時: 2003-12-01 17:21
ただの思いつきですが、Servletの方のロジックで…… 1. トランザクション開始時点のSystem#currentTimeMillis()を取得 2. SQL発行して、結果が返ってきたときに、System#currentTimeMillis()を実行して 経過時間を調査。必要ならばロールバック では、駄目なのでしょうか? #横から割り込む方法はちょっと思い付かなかったので…… ##複数スレッドで同一のConnectionを共有して、横からRollBackしたらどうなるんだろう [ メッセージ編集済み 編集者: 永井和彦 編集日時 2003-12-01 17:25 ] | ||||||||
|
投稿日時: 2003-12-01 17:40
さっそくレスいただきまして有り難うございます。
ん〜やっぱりその方法しかないでしょうか・・・。 他に、ビジネスロジッククラスのインスタンスをあぼーんしてしまう、なんてことができないだろうかと考えてみたりもしたのですが。
それはロールバックかかるかも知れませんね。でもどうやって複数スレを^^; [ メッセージ編集済み 編集者: たーぞう 編集日時 2003-12-01 17:42 ] | ||||||||
|
投稿日時: 2003-12-01 17:55
ビジネスロジックを EJB(SessionBean) に記述していればトランザクションのタイムアウト時にロールバックされます。
| ||||||||
|
投稿日時: 2003-12-01 22:13
エエそれが・・・ EJBで動作させる場合と非EJBで動作させる場合と両方やりたい、という 要求なんです。^^; 非EJBで動作させたいというビジネスロジックが、既に8000本ぐらいあり まして、それをEJBに変換するというのも大変な話なので。 | ||||||||
|
投稿日時: 2003-12-02 07:46
おそらく処理に時間がかかるのはDBMSの処理でしょうからJDBCでタイムアウトするように記述するようにしてはいかがでしょうか。
| ||||||||
|
投稿日時: 2003-12-02 13:24
「ベテラン」と言う表示になってますが・・・結構初心者です・・(・_・;)(汗)
これでいいのか自信がありませんが、 セッションの取得を行い、セッションのタイムアウト時に HttpSessionBindingListenerインターフェースのvalueUnboundメソッドの中に 中断するための処理を記述してはいかかでしょうか? http://www.ingrid.org/jajakarta/servletapi/servletapi-4.0/docs-ja/javax/servlet/http/HttpSessionBindingListener.html | ||||||||
|
投稿日時: 2003-12-02 20:28
>セッションの取得を行い、セッションのタイムアウト時に
>HttpSessionBindingListenerインターフェースのvalueUnboundメソッドの中に >中断するための処理を記述してはいかかでしょうか? リクエストの処理中にセッションがタイムアウトすることはないと思いますので、valueUnbound が呼び出されることはないでしょう。それにセッションのタイムアウトって30分とか、1時間とかいう単位で設定しますから、今回のケースのタイムアウト時間としては長すぎると思います。 Anthyhime さんのおっしゃるようにサーブレットから切り離して考えて、JTA なり JDBC でタイムアウトさせるのが良いかと。 [ メッセージ編集済み 編集者: インギ 編集日時 2003-12-02 22:32 ] | ||||||||
