【问题标题】:How to monitor and manage (start, stop, install, uninstall, update) OSGi bundles through a program如何通过程序监控和管理(启动、停止、安装、卸载、更新)OSGi 包
【发布时间】:2012-07-14 17:16:50
【问题描述】:

我正在从事一个项目,该项目需要使用预编程指令在基于 OSGi 的应用程序中监视和管理(启动、停止、安装、卸载、更新)OSGi 包,类似于 java 反射,OSGi 应用程序可以反映通过监控自身及其上下文,它可以更新或删除某些包,也可以添加(安装和启动)新包。

例如,有一个使用 OSGi 包开发的聊天应用程序。为了给它添加自我管理特性,需要有一种机制来自动监控和管理(安装/卸载、启动/停止、更新)OSGi 捆绑包(无需人工干预或尽可能少的人工参与)。知道如何实现吗?

我试图解释问题,但如果您不理解我的问题,请随时提出。

附:我正在使用 OSGi Equinox 框架。

问候。

【问题讨论】:

  • 这可能取决于您使用的 OSGi 框架。你用的是哪一个?
  • 对不起,我忘了说,它是 Equinox。
  • 到底为什么使用什么框架会有所不同???

标签: reflection osgi


【解决方案1】:

OSGi 框架已经包含了这样的机制,让您可以使用最基本的 OSGi 接口完全控制包的生命周期。

如果你想从一个 OSGi 包中控制它,我们称它为管理代理包,你可以使用这个包的 BundleContext 来:

org.osgi.framework.BundleContext

installBundle(java.lang.String 位置) 从指定的位置标识符安装包。 获取捆绑包() 返回所有已安装捆绑包的列表。 getBundle(长ID) 返回具有指定标识符的包。

一旦你有了 Bundle 对象,你就可以查找关于这个包的所有内容,比如名称、导入的包等;并启动、停止、更新捆绑包。因此,您可以在那里实现您的零管理策略状态的任何逻辑(例如,在发生错误时重新启动所有插件包,或搜索合适的插件并在必须呈现新内容时安装它,或其他)

现在,如果您想从“外部”OSGi 执行所有这些操作,则必须在管理代理包中为外部发布某种接口。一种可能是网页(OSGi 包含一个简单的嵌入式 Web 服务器,请检查 HTTPService)。还有很多其他的,这取决于您想要实现的目标。

希望这会有所帮助:)

【讨论】:

  • 非常感谢您的详细解释 :)。是的,这肯定有助于了解解决我的问题的可能方法。再次感谢。
  • @ندیم عباس 如果此贡献回答了您的问题,您应该接受它以表明(1)您的回答令人满意(2)这个问题不需要进一步关注,以及(3)奖励分享他/她的知识以帮助您的用户
【解决方案2】:

看看org.osgi.frameworkjavadoc。从您的捆绑包的bundle context,您可以安装和获取捆绑包。 bundle API 允许您停止、启动和更新捆绑包。

【讨论】:

  • 感谢您的帮助,它绝对指明了前进的方向。
【解决方案3】:

BundleListener 类也可能对您有用,它会通知您任何包开始或停止。

【讨论】:

  • 感谢亲爱的建议,它帮助我前进:)
  • 不要使用 BundleListener,有一个更容易使用的 BundleTracker。
【解决方案4】:

您可能想查看 Apache Felix FileInstall 源代码。它可能是最简单的“管理代理”,可用于完全管理 OSGi 框架(包括非常重要的配置管理)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2013-01-06
    相关资源
    最近更新 更多