ほげにっき

hogedigoの日記

怖いソース解答編

リクエストがあったので解答編。

http://d.hatena.ne.jp/digo/20060719#1153294756
で、どこが怖いのか。

まあ、そんなに大した話ではないのですが・・・。

例えばこのユーティリティーがどう使われるのかを想像すると、getYear、getMonth、getDayの各メソッドが単体で使用されるとはあまり考えにくく、おそらく以下のように一緒に使われると思います。

String today = getYear()+"/"+getMonth()+"/"+getDay();

問題は、各メソッドの間にタイムラグがあることです。極端な例を出すと、例えばgetYearとgetMonthの間に、2006/12/31から2007/1/1に日付が変わった場合・・・もうおわかりね。todayには"2007/1/1"と格納されてしまいます。


確かに上記は極端な例ですが・・・あり得ないことではないです。
ちなみに実際の怖いソースには年月日だけでなくミリ秒まで取得メソッドが用意されていましたので、分秒単位の不整合なら結構起きるかも。このユーティリティを使用してoptimistic lock checkとかしてると、タイミングによってはいらんエラーが起きちゃったり。


ちょっとコワイ話。