アプリケーション全体を停止することなく、古い機能のjarファイルを新しい機能のjarファイルに置き換える方法を探しています。私はこのために少し(Unloading classes in java?、Dynamically loadable and unloadable application modules in Java - how?)をGoogleで検索しており、3つの可能な解決策を発見した:私の目的のためにあまりにも複雑に見えますTomcat:Tomcatはクラスを内部的にどのようにアンロードしますか?
- OSGI、:クラスアンロードは、私はこの強力な仕様から必要な唯一のものです。
- 独自のClassloaderの作成、jarsのヘルプのロード、そしてjar-expose ClassloaderインスタンスをGCに却下し、GCがロードされたすべてのjarファイルを一緒に削除することを望む場合。
- スタッフのアプリケーションサーバーをコピー:)それは私の質問の目的です。
Tomcatがクラス(戦争)をアンロードする方法についての説明はありますか?私のアプリケーションでこれを再利用することは可能ですか?
PS 私は2つの奇妙なアイデアが頭に入ってきたこの記事を書いていただけながら:
- たちは瓶の新しいセットを使用してアプリケーションの別のインスタンスを起動し、入力データと出力データを切り替えることができかもしれから流れ古いものから新しいものへ状態を保持する場所がある場合は、完全再起動よりも速くなる場合があります。
- 春になるかもしれませんか?これは動的に豆を登録することができますが、これはやや醜い解決策のように見えますが、とにかくそれらをアンロードすることはできません。おそらく、春のブートが役立つかもしれない?
OSGiは、多くのコーナーケースを処理する必要があるため、複雑に見えることがあります。あなたがルート2または3に行くなら、あなたはOSGiのかなりの部分を再実装することになりそうです--1829年の経験の恩恵なしで:-) –