2011-09-22 76 views
5

我想在主要方法中运行OSGi框架(Equinox)。 每次我启动框架,当我打印BundleContext.getBundles().length时,它表示框架上只安装了1个Bundle(这当然是系统捆绑包)。 当我安装我的第一个捆绑包时,捆绑ID将从最后一个会话继续。假设我最后一次使用了4个bundle(并且在停止系统包之前我已经停止并卸载了所有这些包),那么首先设置Bundle ID为5. 现在,我想知道框架如何选择bundle ID?为什么以及框架如何记住上一次会话,即使我已经卸载了所有的捆绑包?是否因为Bundle Cache?如果是这样,我如何清除缓存(重新从1开始编号)?OSGi框架如何设置Bundle ID?

回答

6

该框架在其管理的持久性存储中的某处存在最后使用的捆绑ID。这个商店看起来像是一个框架实现细节。当您启动框架时,您可以指定org.osgi.framework.storage.clean框架配置属性。这将清除所有已安装的软件包,但我不确定它是否会重置上次使用的软件包ID。

+0

它重置编号。 – palacsint

+0

@palacsint - 这个配置是否删除你在答案中提到的'equinox/org.eclipse.osgi'文件夹? – Reza

+0

我认为它删除。 (我在'equinox/org.eclipse.osgi'文件夹中创建了一个空目录,在我用'clean = true'启动框架后它就消失了。) – palacsint

2

删除equinox/org.eclipse.osgi文件夹将重置编号。在删除之前,请确保您的软件包在此文件夹下没有任何重要数据。

bundle命令有效的捆绑ID可以显示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