0

我正在设计一个外壳来管理应用程序。计划让下一个应用程序版本使用 OSGi,但 OSGi 平台(Felix、Equinox、...)尚未确定。如果我们也可以用我们的 shell 来管理 OSGi,那就太好了。

如何以独立于平台的方式管理 OSGi?你能指点我的示例代码吗?

谢谢,乌尔里希

4

3 回答 3

1

事实上,您不仅可以使用 karaf 的控制台。您可以简单地使用 Apache Karaf 作为您的服务器。只需一个配置设置,它就可以从 Felix 切换到 Equinox。如果你对它在实践中的工作方式感兴趣,我做了一个关于 Karaf 的教程系列。http://www.liquid-reality.de/display/liquid/Karaf+Tutorials

于 2012-06-05T11:35:26.843 回答
1

您可以签出例如 Apache Karaf 的控制台实现。它是功能齐全的 OSGi 运行时。这是命令的概述,您可能只选择子集。

您也可以使用运行时并使用您的命令扩展控制台:http: //karaf.apache.org/manual/latest-2.2.x/developers-guide/extending-console.html

于 2012-06-05T09:46:48.253 回答
0

是的,当然可以以独立于平台的方式管理 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。

于 2012-06-05T11:10:30.573 回答