(続)Webスレッドをタイムアウトさせる方法

前回の同様のエントリを書いてから、その後、いろいろと調べていたものの、結局はストールしてしまった実行スレッドをタイムアウトで強制終了させる方法は見つからなかった。ならば、と思いこの手の機能が非常に充実していると思われる、エンタプライズにフォーカスしているベンダのドキュメントを調べてみた。

実行スレッドの検出動作のチューニング [BEA WebLogic Server のチューニング]より

WebLogic Server は、実行キューのスレッドが「スタック」状態になるとこれを自動的に検出します。スタック スレッドは現在の作業を終了したり新しい作業を承認したりできないため、サーバはスタック スレッドを診断するたびに、メッセージのロギングを行います。実行キューのすべてのスレッドがスタック状態になった場合、サーバは実行キューに基づいて自己の状態を「warning」または「critical」に変更します。

さすが、トランザクションモニタの雄Tuxedoをだしてるベンダだしな、と納得した。しかし、実行スレッドの「スタック状態」を検出するところは、もろ期待通りなのだが、サーバ全体のステータスを変えるというのはちょっと違う。スレッドがスタックしたことを一定の閾値で検出したならば、そのスレッドのみを殺して欲しいのだ。

この機能、特にJavaのようにスレッドプールを多用しているサーバでは非常に重要だと思うのだが、そうではないのだろうか。

追記:J2EE準拠のサーバであれば、ユーザトランザクション(JTA?)が使えるが、それはあくまでJDBCトランザクション(分散トランザクション含む)のためであって、まさか、一般的なビジネスロジックのコンテキストで使う方法が提供されていたりするのだろうか? まさかね。