ちょっと理解できていない現象に遭遇しているのだけど、ウェブアプリで次のようなクラスとインターフェースを作成する。
public interface TestOne {
public final static String KEY = "1234";
}
public class TestTwo implements TestOne {
...(KEYを使う)
}
で、インターフェースの TestOne を WEB-INF/classes に、クラスの TestTwo を WEB-INF/lib/hoge.jar に入れる。そして、Tomcat を起動して、普通に KEY にアクセスできることを確認する。そして、Tomcat を止めて、TestOne の KEY の値を変更して、コンパイルして、WEB-INF/classes に置く。それから、Tomcat を起動する。っで、TestTwoでKEYを使うと前のまま。はてなぜだろう・・・。流れをまとめると、
- Tomcat を起動
 - KEYを確認
 - Tomcat を停止
 - TestOne を更新、コンパイル、上書き
 - Tomcat を起動
 - KEYを確認(でも、前のまま)
 
っていう感じなのだけど。TestTwo がある hoge.jar を更新すると有効になるみたい。Java本体なのか、Tomcatなのか、よくわからないけど、キャッシュみたいのをしているのかね・・・。何が原因かはわからないけど、面白い現象だな。
という感じで、理解できていないので、とりあえず、Java Language SpecificationのCHAPTER 12 Executionあたりを読んで、基礎を再学習中・・・。