我正在设计一个外壳来管理应用程序。计划让下一个应用程序版本使用 OSGi,但 OSGi 平台(Felix、Equinox、...)尚未确定。如果我们也可以用我们的 shell 来管理 OSGi,那就太好了。
如何以独立于平台的方式管理 OSGi?你能指点我的示例代码吗?
谢谢,乌尔里希
我正在设计一个外壳来管理应用程序。计划让下一个应用程序版本使用 OSGi,但 OSGi 平台(Felix、Equinox、...)尚未确定。如果我们也可以用我们的 shell 来管理 OSGi,那就太好了。
如何以独立于平台的方式管理 OSGi?你能指点我的示例代码吗?
谢谢,乌尔里希
事实上,您不仅可以使用 karaf 的控制台。您可以简单地使用 Apache Karaf 作为您的服务器。只需一个配置设置,它就可以从 Felix 切换到 Equinox。如果你对它在实践中的工作方式感兴趣,我做了一个关于 Karaf 的教程系列。http://www.liquid-reality.de/display/liquid/Karaf+Tutorials
您可以签出例如 Apache Karaf 的控制台实现。它是功能齐全的 OSGi 运行时。这是命令的概述,您可能只选择子集。
您也可以使用运行时并使用您的命令扩展控制台:http: //karaf.apache.org/manual/latest-2.2.x/developers-guide/extending-console.html
是的,当然可以以独立于平台的方式管理 OSGi。这完全取决于您准备自己实施多少管理。
OSGi API 让您可以访问所有内容,您只需要设计/选择您的外壳、命令格式等。
您想要一个基于命令提示符的命令提示符、基于 Web 的命令提示符还是远程管理协议与某个后端管理服务器一起使用?
1)让我们从功能开始。你的 shell 将作为一个包本身来实现。您可以使用此捆绑包的 BundleContext 来访问其他捆绑包对象。通过它们,您可以:
BundleContext.installBundle(String)
– 从指定的位置字符串(应该是 URL)安装包。
BundleContext.getBundles( )
Bundle.start()
Bundle.update( InputStream input )
检查捆绑包、捆绑包版本、导出/导入包、注册服务
从 OSGi 服务注册表中,您可以获得 ConfigurationAdmin 服务,通过它您可以列出捆绑包的配置,并更改它们
您还可以从注册表中获取 LogService,以读取日志
从 StartLevel 服务中,您可以控制启动 fw 时捆绑包的启动顺序
等等等等
2)您希望如何使上述信息可访问?如果你想要一个基于命令的控制台,你可以写一个,使用系统输出。你可以检查这个实现的想法
如果您想要一个基于 Web 的服务,那么保持平台独立性的最简单方法是编写一个标准 servlet 并将其注册到标准 OSGi HTTP 服务中。然后相关的网页会调用上面的函数。
如果您想要一个远程管理协议,您可以映射到许多不同的可能性。例如,检查映射到 OMA DM 规范的 OSGi DMT 服务,该规范很容易映射到 TR-069 管理协议。有现有的实现。
所有这些都完全独立于 Felix、Equinox 等,并且适用于其中任何一个,以及任何其他 OSGi fw。