以编程方式识别Karaf中的OSGI捆绑包故障

以编程方式识别Karaf中的OSGI捆绑包故障,osgi,apache-karaf,osgi-bundle,Osgi,Apache Karaf,Osgi Bundle,我们使用Karaf-4作为OSGI容器。我们有几个与功能相关联的包。当某个特性中的任何捆绑包失败时,我们希望以编程方式标识。我们尝试了BundleTracker和BundleListener,但当捆绑包在“GracePeriod”状态下等待后失败时,我们没有收到通知 我们可以在karaf控制台中使用“list”命令查看故障包的状态。我们希望通过通知以编程方式实现这一点,而不是在karaf控制台中执行“list”命令。您可以将作为OSGi服务使用。getInfo方法为您提供了bundleEstat

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

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

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


实际上,这是命令在内部执行的操作。

谢谢您的回复。我知道我们可以使用BundleService获取特定捆绑包的详细信息。我的要求是,假设我有10个捆绑包作为功能的一部分安装,其中一个捆绑包失败,我是否可以通过侦听器/通知机制知道失败的捆绑包名称/id,而不是定期轮询所有10个捆绑包并检查其状态。您可以查看blueprintstate模块的源。它从blueprint extender接收事件以查找失败的捆绑包。还有一些捆绑事件,也许它们可以帮助解决低级别故障。非常感谢,它很有效。我还有一个问题。我已注册JMX FeatureMBean以通知功能安装状态。在我的功能中,我有10个捆绑包,其中一个捆绑包失败,但我的功能状态仍然显示为“已安装”。我希望它处于“卸载”或“失败”状态。功能安装只符合捆绑包清单中所写的OSGi要求和功能。它只是决定安装哪些捆绑包,而不检查捆绑包是否全部出现。特别是在blueprint的情况下,这将很困难,因为blueprint extender在bundle上异步工作。感谢您的解释。