« Lambda Probeの4つの権限 | Main | Teeda Extensionでパスから"view"を除去する »

2007.08.29

S2.4のHotdeployFilter

 自分で記述した処理の排他制御が正しく行われているかどうかを確かめるため、以下のようなテストを行うことが多いです(Eclipse&Tomcat)。

1.確認したい処理の直前のところにブレークポイントをセット。
2.1つ目のリクエストを投げつける -> ブレークポイントで停止。
3.2つ目のリクエストを投げつける -> ブレークポイントで停止。
4.ブレークポイントで止まった2つのスレッドに対して、交互にF6でステップ実行を行い、排他制御(待ちを発生させている)ところで正しく停止するかどうかを確認。

 DBのselect for update等の部分の動作確認に使用することが多いわけですが・・・

Teedaで同様のことを行おうとすると、そもそも、2つ目のリクエストの処理がブレークポイントのところまでたどり着きません。

 調べてみると、HOT deployの場合にそのような状態になり、COOL deployなら問題ないようです。で、さらに調べてみると、org.seasar.framework.container.hotdeploy.HotdeployFilterにおいて、filterChain#doFilterを実行する部分がsynchronizedブロックの中に入っていました。そりゃ、1つ目のリクエストが完了しない限り、2つ目のリクエストが飛んでこないわけです(なので、こういった検証を行うときだけCOOL deployに切り替えて対応)。

 もっとも、HOT deployはその性質上、このようにしておかなければ別のややこしい問題がいろいろと発生してくるから、こういう風になっているんだとは思いますが(WARM deployがWebアプリケーション環境には適していない(http://ml.seasar.org/archives/seasar-user/2007-June/010430.html)のと同様だと思います)。

#タイトル修正しました。

|

« Lambda Probeの4つの権限 | Main | Teeda Extensionでパスから"view"を除去する »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference S2.4のHotdeployFilter:

« Lambda Probeの4つの権限 | Main | Teeda Extensionでパスから"view"を除去する »