【问题标题】:Identify OSGI Bundle failure in Karaf programmatically以编程方式识别 Karaf 中的 OSGI Bundle 失败
【发布时间】:2018-07-26 15:01:42
【问题描述】:

我们使用 Karaf-4 作为 OSGI 容器。我们有几个与一个功能相关的捆绑包。当任何捆绑包的功能失败时,我们希望以编程方式识别。我们尝试了 BundleTracker 和 BundleListener,但是当包在“GracePeriod”状态等待后失败时,我们没有收到通知。

我们可以在 karaf 控制台中使用“list”命令查看失败包的状态。我们希望通过通知以编程方式实现这一点,而不是在 karaf 控制台中执行“list”命令。

【问题讨论】:

    标签: osgi apache-karaf osgi-bundle


    【解决方案1】:

    您可以将BundleService 用作OSGi 服务。 getInfo 方法为您提供了 BundleState 等信息。对于失败的捆绑包,您可以调用 getDiag 以获取详细状态。

    其实这就是diag命令在内部做的事情。

    【讨论】:

    • 感谢您的回复。我知道我们可以使用 BundleService 来获取特定捆绑包的详细信息。我的要求是,假设我安装了 10 个捆绑包作为功能的一部分,其中一个捆绑包失败了,我是否可以通过侦听器/通知机制知道失败的捆绑包名称/ID,而不是我定期轮询所有 10 个捆绑包并检查它们的状态。
    • 可以查看blueprintstate模块的源码。它从蓝图扩展器接收事件以查找失败的捆绑包。还有一些捆绑事件,也许它们可以帮助解决低级故障。
    • 非常感谢,它有效。我还有一个疑问。我已注册 JMX FeatureMBean 以通知功能安装状态。在我的功能中,我有 10 个捆绑包,其中一个捆绑包失败,但我的功能状态仍然显示“已安装”。我期待它处于“卸载”或“失败”状态
    • 功能安装仅符合捆绑包清单中所写的 OSGi 要求和功能。它只是决定要安装哪些捆绑包,而不检查捆绑包是否全部出现。尤其是在蓝图的情况下,这会很困难,因为蓝图扩展器在捆绑包上异步工作。
    • 感谢您的解释。
    猜你喜欢
    • 2015-07-03
    • 1970-01-01
    • 2017-07-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多