我将实现一个应该远程更新客户端软件的服务器应用程序。客户端大多使用拉机制来接收更新的软件。
作为初学者,我正在寻找实现此应用程序的架构。而且我知道 OSGi 的生命周期层会提供这样的服务。
我想知道是否有任何其他架构可以为客户提供类似的服务?
1 回答
如果您正在编写基于 Eclipse 的应用程序,那么 p2 可能是最简单的方法。但是,如果您的应用程序是 maven 构建的,或者您打算更通用地在其他 OSGi 容器(Karaf、Felix 等)上运行,那么您应该考虑使用 OSGi Bundle Repository(参见标准规范),例如Felix 实现。如果 OBR 不能完全满足您的要求,那么 API 会被公开,以便您可以对其进行操作。
您提到的 OSGi 生命周期将为您提供真正的热部署(以及模块化的其他“好处”),但自动更新功能更高级别,而不是框架核心的一部分(容器不必实现符合远程更新机制)。
在我工作的地方,我们使用的是作为 maven 构建的一部分创建的Karaf XML 特性(构成功能或整个应用程序的版本化包集)。在 OSGi shell 中,我们可以使用命令来指示 OSGi 容器查找并安装这些功能。从受控部署的角度来看,这确实很简洁,但是如果您想要全自动更新,那么 OBR 就是您想要的。
如果您的问题将 OSGi 的替代品作为更新机制的基础,那么您正在查看 webstart (JNLP) 等内容 - 它只会在启动时为您提供更新。
IMO OSGi 值得研究,因为它的编码和部署非常愉快。作为一种更新/插件机制,它无法真正被击败,您可以轻松嵌入框架或自定义它。