2011-09-22 11 views
5

OSGiフレームワーク(Equinox)をメインメソッドで実行しようとしています。 フレームワークを起動するたびに、BundleContext.getBundles().lengthを印刷すると、フレームワークにバンドルが1つしかインストールされていないことが示されます(これは確かにシステムバンドルです)。 最初のバンドルをインストールすると、バンドルIDは最後のセッションから続行されます。最後のセッションで4バンドルがあったとします(システムバンドルを停止する前にそれらをすべて停止してアンインストールした場合)、最初のバンドルIDは5に設定されています。 ここで、フレームワークがバンドルIDをどのように選択するのか知りたいですか?どうしてフレームワークはすべてのバンドルをアンインストールしたのに最後のセッションを覚えていますか?それはバンドルキャッシュのためですか?それがそうであれば、キャッシュをクリアするにはどうしたらいいですか?OSGiフレームワークはどのようにバンドルIDを設定しますか?

答えて

6

フレームワークでは、最後に使用されたバンドルIDが、管理する永続ストアのどこかにあります。このストアがどのように見えるかは、フレームワーク実装の詳細です。フレームワークを起動するときに、org.osgi.framework.storage.cleanフレームワーク構成プロパティーを指定できます。これにより、インストールされているすべてのバンドルがクリアされますが、最後に使用されたバンドルIDをリセットするかどうかはわかりません。

+0

それはナンバリングをリセットします:

有効なバンドルIDを持つbundleコマンドはequinox/org.eclipse.osgiフォルダの絶対パスを表示することができます。 – palacsint

+0

@palacsint - あなたの答えで述べた 'equinox/org.eclipse.osgi'フォルダを削除しますか? – Reza

+0

削除すると思います。 (私は 'equinox/org.eclipse.osgi'フォルダ内に空のディレクトリを作成しましたが、' clean = true'を使ってフレームワークを開始した後には消えてしまいました) – palacsint

2

equinox/org.eclipse.osgiフォルダを削除すると、番号がリセットされます。削除する前に、バンドルにこのフォルダの下に重要なデータがないことを確認してください。

osgi> bundle 7 
slf4j.api_1.6.1 [7] 
    Id=7, Status=ACTIVE  Data Root=D:\temp\test\equinox\org.eclipse.osgi\bundles\7\data 
... 
+0

このパスにはどのような種類のデータが格納できますか?重要ですか? – Reza

+1

あなたのバンドルには永続的なデータが格納されていることがあります。彼らがそこに何かを残さないなら、それについて心配することは何もありません。これは主にバンドルによって異なります。もう一つの可能​​性は構成マネージャーの設定ですが、私はあまり気にしません。永続的なデータをこのディレクトリの外に保存します。 – palacsint

関連する問題