私はTomcatで実行している既存のJava Webアプリケーションを持っています。これには基本的なClojureサポートが追加されています。当面は、クラスパス上のリソースとしてClojureソースファイルをインクルードし、clojure.lang.RT
を呼び出しています。原始的ですが、うまく動作します。TomcatでのClojureコードの再ロード
しかし、私は、TomcatのWebappClassLoader
キャッシュリソースが、getResourceAsInputStream()
によって取得され、ソースコードの取得とコンパイルにClojureが使用することに気付きました。つまり、(require 'my-ns :reload)
を実行すると、更新されたファイルがディスク上で利用可能であっても、キャッシュされたバージョンのファイルがリロードされます。このClojureファイルのキャッシュを回避または回避する方法はありますか?
多くの無駄なグーグルの後に私が考えたのは、WebappClassLoader.resourceEntries
からの入力を手動で削除するために反射を使用することです。awfulです。
私は何かが欠けているはずです。
「Jetty/Glassfish/JBossを使用する」、「Tomcatを再起動する」などの回答は、私が探しているものではありません。
ありがとうございました。私はこれについて少し考えなければならない。 'lib'に物を入れるのはそれほど便利ではありません。 '* use-context-classloader *'が他のものを壊さずに影響を与えるかどうか疑問です。 –
@DaveRay '* use-context-classloader *'はデフォルトでtrueです。これをfalseに設定すると、Clojure自体をロードしたClassLoaderを経由してロードされます(ClojureがWebアプリケーションからロードされた場合)、または破損を引き起こす(つまり、$ CATALINA_HOME/libにclojure.jarを入れた場合) 'しかし、Webアプリケーションからコードを読み込もうとする)。 Q:WebアプリケーションからREPLサーバーを起動し、接続してコードをロードするのはなぜですか? – cemerick
ありがとうございます。たぶん私はちょうど私はこのためのREPLサーバーを使用する方法で十分な創造的ではない:)ディスク上のいくつかのファイルに渡ってコードの束を持っていると言う。私は、レプリケートサーバーが稼働しているTomcatを起動します。 –