启动时更新OSGi包

Phi*_*ipp 5 osgi

我有几个OSGi包,每个包都可以从OSGi Bundle Repository更新.当我启动我的OSGi框架(Apache Felix)时,我希望第一个包启动并检查所有已安装捆绑包的更新.如果有可用的更新,则应更新每个更新(包括其自身),然后继续启动(或可能关闭,操作系统将重新启动应用程序).

如何以符合OSGi的方式完成这项工作?

第一个捆绑包应该如何更新?它可以在启动时更新吗?

Mar*_*ans 4

您应该做几件事:

  1. 确保您有一个捆绑包(规范中通常称为“管理代理”)首先在框架(重新)启动时启动,方法是为其提供比所有其他捆绑包更低的启动级别。还要确保告诉系统以与管理代理相同的启动级别启动。这样,该捆绑包将能够在框架中的所有其他捆绑包实际开始之前更新它们。只有在管理代理完成更新后,它才会刷新所有包并进入下一个启动级别,从而有效地启动所有其他包。

  2. 要更新管理代理,最好的方法是临时安装实际执行更新的第二个捆绑包。在管理代理中生成线程并不是最好的解决方案,因为一旦捆绑包停止,这些线程就不应该继续运行,不遵守这一规定可能会给您带来难以解决的问题。第二个捆绑包实际上会更新,如果更新失败甚至可能会回滚。

可以在 Apache ACE 中找到可以自我更新的管理代理示例。它有一个代理,可以通过代码安装第二个包,以从远程位置更新自身。该项目相关部分的一些提示: