0

OSGi (Apache Felix 4.2.1) で、バンドルが起動時に更新を自動的にチェックするようにします。

私は次のコードでこれを行います (「管理エージェント」で)。バンドルが更新されたかどうかを確認するにはどうすればよいですか?

Bundle[] bundles = context.getBundles();
for (int i = 0; i < bundles.length; i++) {
  Bundle bundle = bundles[i];
  bundle.update();
}
// which bundle was updated?

バンドルを自動的に ( を使用して) 更新したいのですが、呼び出しFrameworkWiringの 1 つが実際にサーバーからの新しい展開になった場合のみです。.update()

Maven から OBR にデプロイしているため、SNAPSHOT バージョンの番号はすべて同じです。gogo から、Bnd-LastModifiedヘッダーが変更されていることがわかりますが、これを自動化するにはどうすればよいですか?

PS: 自分で更新するよりもうまく更新全体を解決する簡単な解決策があれば、私も興味があります。それは痩せている必要があります。(Apache Karaf?、Apache ACE? その他?)

4

3 に答える 3

3

コードは明らかにそれらすべてを呼び出しているため、それらはすべて更新されupdateています。

おそらく、バンドルを更新する必要があるかどうかを判断する方法です。このために、bundle.getLastModified()メソッドを使用して、ファイルのタイムスタンプと比較できます。ただし、複数のコンピューターで生成されたタイムスタンプがある場合、システムクロックが正確に同期されることはないため、これは危険です。それらがリモート サーバー (HTTP 経由など) から送信されている場合は、無視してください。おそらく、ダウンロード後にファイルの ETag や SHA ハッシュなどを使用する必要があります。

于 2014-04-23T13:13:17.573 に答える
0

リスナーを実装しようとしましたか?

于 2014-04-23T12:02:35.390 に答える