【发布时间】:2013-09-20 10:14:21
【问题描述】:
我想知道我是否可以通过任何网络机制(RMI, HTTP、URLClassLoader 等)?
理想情况下,我可以随时将我的捆绑包的新版本部署到这个远程仓库,并以某种方式触发 OSGi 容器“下载”(安装/部署)远程捆绑包并热部署它们同一捆绑包的旧版本。
这可能吗?如果是这样,怎么做?提前致谢!
【问题讨论】:
标签: java url osgi apache-karaf osgi-bundle
我想知道我是否可以通过任何网络机制(RMI, HTTP、URLClassLoader 等)?
理想情况下,我可以随时将我的捆绑包的新版本部署到这个远程仓库,并以某种方式触发 OSGi 容器“下载”(安装/部署)远程捆绑包并热部署它们同一捆绑包的旧版本。
这可能吗?如果是这样,怎么做?提前致谢!
【问题讨论】:
标签: java url osgi apache-karaf osgi-bundle
OSGi 有一个 API,用于在每个捆绑激活器接收的 BundleContext 上管理 OSGi 框架。此 API 允许您通过 URL 或 InputStream 安装/更新包。
由于这是一个标准化的 API,因此有很多人制作捆绑包,以提供围绕此部署过程的政策。原型是 Apache FileInstall,它监视一个目录并自动安装在该目录中找到的每个包,并在包消失时卸载它。这适用于例如 Dropbox。它还支持通过配置管理服务进行配置。另一方面,您会发现提供远程管理系统的 Apache Ace。
要找到最佳解决方案,请尝试满足您的要求。一两个系统还是一百万?本地或远程慢线?
有一点是肯定的,您会发现一些项目或提供商能够为您提供一个 OSGi 包来实现您所需的管理策略。
【讨论】:
我们使用 Apache Felix 并维护 an OBR repository。设置完成后,您可以从 OSGi shell 部署新版本。这确实需要您手动登录并输入命令,例如deploy com.example.foo。
您也可以直接从网址安装,例如install http://example.com/bundles/bundle.jar。
您的最后一个要求(自动部署)比较棘手。您也许可以在您的 OSGi 容器上启用远程 shell,并作为构建的一部分通过 telnet 推送命令。
【讨论】:
我建议查看 documentation for provisioning 的 Karaf 配置。 您可以使用 maven url、http 或文件引用来部署捆绑包。或者,您可以将您的捆绑包集部署为功能定义(从 maven 存储库加载所有必需和使用的捆绑包)或通过部署 kar 文件。
【讨论】: