URLと事前定義されたバージョニングスキームが与えられているコード用の「ランチャー」フレームワークを作成します: 1)更新が存在するかどうか確認してください 2)更新をダウンロードする 3)アップデートをインストールする 4)アプリケーションを "再実行する"OSGiを使用して自動更新を実装する
私はこれをすべて既存のJVMの内部で行い、b)プラットフォームに依存しないでください。背の高い注文ですか? OSGiとApache Felixについての私の(限られた)知識に基づいて、私はこれが可能であると確信していますが、実際は細部に迷っています。
更新を確認してダウンロードするのは簡単です。 "古い"バンドルがアンロードされ、 "新しい"バンドルがロードされる原因になっています。私は過去にOSGiの仕事をしてきましたが、これよりもはるかにダイナミックではありませんでした。適切な出発地か、正しい方向への厳しい押し込みが、最も高く評価されます。
私が真剣に空き容量のあるライブラリを使って解決したことがある場合は、これも教えてください。しかし、今まで何も見つかりませんでした。 :-)
この意志前のバンドルのバインドを解除しますか?更新後(つまり、ハードドライブ上の)既存のバンドルはどうなりますか? – user453385
リチャードの答えは簡潔で正確です。http://www.osgi.org/javadoc/r4v43/org/osgi/framework/Bundle.html#update%28java.io.InputStream%29 - (古い)バンドルの状態が表示されますUNINSTALLEDに変更してください。その場合はもう使用できません。再起動の間バンドルに確実に保持されるフレームワークのそれぞれが何であるかわからないので、アンインストールされたバンドルはガベージコレクションが妨げられない限りJVMから完全に削除されると思います。 OSGiはあなたのニーズに完全に合っています.Mavenリポジトリとpax mvn urlハンドラを使って柔軟に行うことができるのであれば – earcam
リフレッシュによって古いバンドルが "バインド解除"され、ガベージコレクションが可能になります。更新の直後に、他のバンドルが更新されたバンドルに依存していると仮定して、バンドルの2つのリビジョンがハードドライブとメモリにあります。これは、依存するバンドルを新しいリビジョンに切り替える必要があるため、リフレッシュが必要な理由です。リフレッシュが行われると、更新されたバンドルのリビジョンは、メモリまたはディスクに1つだけ存在します。 –