2011-08-17 14 views
10

URLと事前定義されたバージョニングスキームが与えられているコード用の「ランチャー」フレームワークを作成します: 1)更新が存在するかどうか確認してください 2)更新をダウンロードする 3)アップデートをインストールする 4)アプリケーションを "再実行する"OSGiを使用して自動更新を実装する

私はこれをすべて既存のJVMの内部で行い、b)プラットフォームに依存しないでください。背の高い注文ですか? OSGiとApache Felixについての私の(限られた)知識に基づいて、私はこれが可能であると確信していますが、実際は細部に迷っています。

更新を確認してダウンロードするのは簡単です。 "古い"バンドルがアンロードされ、 "新しい"バンドルがロードされる原因になっています。私は過去にOSGiの仕事をしてきましたが、これよりもはるかにダイナミックではありませんでした。適切な出発地か、正しい方向への厳しい押し込みが、最も高く評価されます。

私が真剣に空き容量のあるライブラリを使って解決したことがある場合は、これも教えてください。しかし、今まで何も見つかりませんでした。 :-)

答えて

6

ダウンロードが必要な場合でも、アップデートが利用できるかどうかを確認してから、バンドルをアップデートする必要がある場合はBundle.update(InputStream)を呼び出し、一般的にはPackageAdminを呼び出します。後でrefreshPackages()を実行します。

+0

この意志前のバンドルのバインドを解除しますか?更新後(つまり、ハードドライブ上の)既存のバンドルはどうなりますか? – user453385

+0

リチャードの答えは簡潔で正確です。http://www.osgi.org/javadoc/r4v43/org/osgi/framework/Bundle.html#update%28java.io.InputStream%29 - (古い)バンドルの状態が表示されますUNINSTALLEDに変更してください。その場合はもう使用できません。再起動の間バンドルに確実に保持されるフレームワークのそれぞれが何であるかわからないので、アンインストールされたバンドルはガベージコレクションが妨げられない限りJVMから完全に削除されると思います。 OSGiはあなたのニーズに完全に合っています.Mavenリポジトリとpax mvn urlハンドラを使って柔軟に行うことができるのであれば – earcam

+0

リフレッシュによって古いバンドルが "バインド解除"され、ガベージコレクションが可能になります。更新の直後に、他のバンドルが更新されたバンドルに依存していると仮定して、バンドルの2つのリビジョンがハードドライブとメモリにあります。これは、依存するバンドルを新しいリビジョンに切り替える必要があるため、リフレッシュが必要な理由です。リフレッシュが行われると、更新されたバンドルのリビジョンは、メモリまたはディスクに1つだけ存在します。 –

4

あなたは春分の枠組みについて

  1. (、新しいバージョンのダウンロードをチェックし、/更新をインストールする、などを再起動します)の代わりに、あなたのすべてのステップを行うことができ、よく知られたプロビジョニングソリューションを確認することができます。P2 http://www.eclipse.org/equinox/p2/どんなのOSGi R4の枠組みについては
  2. :ApacheのACE http://incubator.apache.org/ace/a-brief-introduction.html

よろしく、 ドミトロ

関連する問題