クラスローダを使用して自動リロード

google:クラスローダ 自動リロード
google:classloader autoreload


http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=12&topic=25089

自動でのリロードを行わせるには、

コード:

in = new BufferedInputStream(new FileInputStream("prop.properties"));

ではなく、

コード:

ClassLoader loader = Thread.currentThread().getContextClassLoader();
in = new BufferedInputStream(loader.getResourceAsStream("prop.properties"));

という様に、クラスローダでロードさせます。

余談になりますが、Strutsでも同様な方法でstruts-config.xmlの更新時に
自動リロードが可能になります。

通常struts-config.xmlは、FileInputStreamで読み込まれているので
自動リロードの対象となりませんが、
ActionServletのinitメソッドをオーバーライドして、
ClassLoaderから1度だけgetResourceで参照してしまいましょう。
更新するとリロードが行われます。

クラスパスのルートより上でも、../等で参照ができます。

これってservletAPIの仕様?
servlet,getContextClassLoader(), コンテキストクラスローダー,
再読み込み間隔 ,reload などで検索掛けると コンテナ依存な情報は出てくるが…