2009-09-16 42 views
3

我有一个运行的春分osgi框架与一堆已启动的包。现在我通过'update'更新一个使用osgi控制台的软件包。 (或使用提供的方法:bundle.update(url));Equinox:框架重新启动后丢失的包的更新

一切工作完美...但如果我完全重新启动osgi框架之前更新的捆绑包再次处于原始状态(因为它是在更新之前)。

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

有人可以给我一个提示,我失踪了吗?

感谢, 迈克尔满庚

回答

1

你是如何开始春分?你是否开始使用-clean(会消灭所有更新)?

请注意,'udpate'只是更新内存中运行的副本,而不是更改磁盘上原始JAR上的任何位。如果你启动了春分,并通过旧包(但不是新包),那么它可能会回到旧状态。

P2在一定程度上假设一旦你切割了一个包的位,然后它保持不变 - 换句话说,P2有效地打破了bundle.update()的地位。但是,您可能应该管理磁盘上的位,以便即使某人确实执行了清理操作,您也可以获得正确的数据。

+1

嗨!不,我不开始用 - 清洁。目前我使用的是equinox 3.2,因为我从未换到更高版本。 也许问题是,我认为bundle.update(...)将捆绑包的上传版本存储在配置区域中(这是为一系列捆绑包完成的......当jar包不知道规则时存储在那里,当不存在时)。 如果是这种情况..我会更改我的代码,以便上传文件首先将文件存储到文件系统,然后删除旧版本。 如果这是对应的方法。 伤心,我不能在这种情况下使用bundle.update(InputStream in)。 你觉得怎么样? – 2009-09-20 08:35:35

+1

OSGi规范没有说明重启后应该发生什么事情。只是它应该把它带回来。我不认为更新本身会更新持久包 - 特别是对于基于文件的包。我不确定如果从远程URL安装捆绑软件并执行更新会发生什么情况。 无论如何,在这种情况下,该规范的这个区域是未定义的:-) 请注意,如果需要,仍然可以使用bundle.update(InputStream)。但是,您必须安排将位更新到正确的位置,然后(之后)调用update()。 – AlBlue 2009-09-20 09:30:31

+0

我会改变我的impl,使其取代原来的基于文件的捆绑。 感谢您的帮助! – 2009-09-21 09:02:29

相关问题