【问题标题】:Equinox: Update of bundle lost after framework restartEquinox:框架重新启动后丢失的包更新
【发布时间】:2009-09-16 08:41:29
【问题描述】:

我有一个正在运行的 Equinox osgi 框架,其中包含一堆已启动的捆绑包。现在我通过 'update 使用 osgi 控制台更新一个包。 (或使用提供的方法:bundle.update(url));

一切正常...但是如果我完全重新启动 osgi 框架,之前更新的包将再次处于原始状态(就像更新之前一样)。

我正在使用 eclipse 的 update.configurator 搜索插件目录中的所有捆绑包并安装它们,但我认为它可以识别捆绑包是否已更新。

有人可以告诉我我错过了什么吗?

谢谢, 迈克尔·芒庚

【问题讨论】:

    标签: java osgi


    【解决方案1】:

    你们是如何开始 Equinox 的?您是否从 -clean 开始(这会清除任何更新)?

    请注意,“udpate”只是更新内存中的运行副本,而不是更改磁盘上原始 JAR 上的任何位。如果您正在启动 Equinox 并传入旧包(但不是新包),那么它可能会以旧状态返回。

    P2 有点妨碍假设,一旦你剪切了一个包的部分,那么它就保持不变 - 换句话说,P2 首先有效地中断了 bundle.update() 。但是,您可能应该管理磁盘上的位,以便即使有人执行了 -clean,您也可以获得正确的数据。

    【讨论】:

    • 嗨!不,我不以-clean 开头。目前我使用的是Equinox 3.2,因为我从未换过更高的版本。也许问题是我认为 bundle.update(...) 将上传的捆绑包版本存储在配置区域中(这是为一系列捆绑包完成的...不知道存储jar时的规则在那里和不在那里)。如果是这种情况.. 我将更改我的代码,以便上传首先将文件存储到文件系统,然后删除旧版本。如果这是正确的方法。很遗憾在这种情况下我不能使用 bundle.update(InputStream in) 。你怎么看?
    • OSGi 规范没有说明重启后应该持续发生什么;只是它应该把它带回来。我认为更新本身不会更新持久包 - 特别是对于基于文件的包。我不确定如果您从远程 URL 安装捆绑包并进行更新会发生什么。无论如何,在这种情况下,规范的这个区域是未定义的 :-) 请注意,如果需要,您仍然可以使用 bundle.update(InputStream) ;但是,您必须安排在正确位置就地更新这些位,然后(之后)调用 update()。
    • 我将更改我的 impl 以使其替换原始的基于文件的捆绑包。谢谢你的帮助!
    猜你喜欢
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2020-08-23
    • 2015-04-30
    • 2018-11-16
    • 2019-03-27
    • 2016-12-25
    相关资源
    最近更新 更多