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