getLastAccessedTime()

今日、仕事関連で、getLastAccessedTime()というHttpSessionクラスのメソッドの問題にぶち当たった。このメソッドは、最後にそのセッションのクライアントがサーバーをアクセスした時間を返す、というものだ。何が問題かというとServlet2.2以降このメソッドは『The getLastAccessedTime method of the HttpSession interface allows a servlet to determine the last time the session was accessed before the current request.』といった仕様になっていて、いったい、初回の呼び出しでは何が返るのかが定義されていないということだ。あるServletコンテナでは、-1が返った。別のServletコンテナでは現在時刻が返る。つまり、ほんとに最後にアクセスした時間というものをこの戻り値から判断できないということだ。JEE仕様の不備ではないかと思う。
で、もう少し調べたところ、驚いたことに、Servlet2.1(J2EE以前)では、『Returns the last time the client sent a request carrying the identifier assigned to the session, or -1 if the session is new.』となっていて、この初期呼び出しの時には-1が返るということが明示されていた。
なんで、当初分かっていたことが、その後うやむやな仕様になってしまったのだろう。うやむやな仕様は迷惑だ。仕様を勝手に判断してアプリを作る人がいる。そして、そのうやむやな部分(undefinedなところ)の実装が変わったことでアプリがブレークし、そういった作者が怒りだす。気持ちは分かるが、undefinedを勝手に判断したところも悪いのでは?でも、いちばん悪いのはうやむやな仕様だと思う。