【问题标题】:Can OSGi install/deploy bundles hosted on a URL?OSGi 可以安装/部署托管在 URL 上的包吗?
【发布时间】:2013-09-20 10:14:21
【问题描述】:

我想知道我是否可以通过任何网络机制(RMI, HTTP、URLClassLoader 等)?

理想情况下,我可以随时将我的捆绑包的新版本部署到这个远程仓库,并以某种方式触发 OSGi 容器“下载”(安装/部署)远程捆绑包并热部署它们同一捆绑包的旧版本。

这可能吗?如果是这样,怎么做?提前致谢!

【问题讨论】:

    标签: java url osgi apache-karaf osgi-bundle


    【解决方案1】:

    OSGi 有一个 API,用于在每个捆绑激活器接收的 BundleContext 上管理 OSGi 框架。此 API 允许您通过 URL 或 InputStream 安装/更新包。

    由于这是一个标准化的 API,因此有很多人制作捆绑包,以提供围绕此部署过程的政策。原型是 Apache FileInstall,它监视一个目录并自动安装在该目录中找到的每个包,并在包消失时卸载它。这适用于例如 Dropbox。它还支持通过配置管理服务进行配置。另一方面,您会发现提供远程管理系统的 Apache Ace。

    要找到最佳解决方案,请尝试满足您的要求。一两个系统还是一百万?本地或远程慢线?

    有一点是肯定的,您会发现一些项目或提供商能够为您提供一个 OSGi 包来实现您所需的管理策略。

    【讨论】:

    • 感谢@Peter Kriens (+1) - 我想我喜欢 Apache FileInstall 解决方案。但它是哪种方式:我是否将 OSGi 容器和 FileInstall 安装在同一台服务器上,并将 FileInstall 配置为监视/监视远程 URL 目录,并将该远程目录中的捆绑包部署到本地 OSGi 容器?或者我是否在一台服务器上设置 FileInstall,并将其配置为将捆绑包部署到远程服务器上的 OSGi 容器?再次感谢!
    • FileInstall 作为捆绑包安装到 OSGi 框架中。所以它在同一个“服务器”上。它监视文件系统目录。为了使捆绑包来自远程某个地方,您需要将其与 Dropbox、BitTorrent Sync 或 NFS 等一起使用。
    • FileInstall 有很好的文档:felix.apache.org/site/apache-felix-file-install.html
    【解决方案2】:

    我们使用 Apache Felix 并维护 an OBR repository。设置完成后,您可以从 OSGi shell 部署新版本。这确实需要您手动登录并输入命令,例如deploy com.example.foo

    您也可以直接从网址安装,例如install http://example.com/bundles/bundle.jar

    您的最后一个要求(自动部署)比较棘手。您也许可以在您的 OSGi 容器上启用远程 shell,并作为构建的一部分通过 telnet 推送命令。

    【讨论】:

    • 感谢@merlijn (+1) - 但是我有点困惑。一开始您提到可以直接从 URL 安装包,但随后您继续说自动部署“更棘手”。这两个概念有何不同(安装和自动部署)?安装捆绑包不会部署它吗?再次感谢!
    • 也许我误解了问题的那一部分。在我们的设置中部署一个新包需要两个步骤: 1. 将其安装到 obr 存储库。 2. 登录 OSGi 容器并运行 deploy 命令。我们还没有自动化第二步,但这对我们来说不是一个紧迫的问题。
    【解决方案3】:

    我建议查看 documentation for provisioning 的 Karaf 配置。 您可以使用 maven url、http 或文件引用来部署捆绑包。或者,您可以将您的捆绑包集部署为功能定义(从 maven 存储库加载所有必需和使用的捆绑包)或通过部署 kar 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 2013-11-27
      • 2014-04-08
      • 2020-12-28
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多