Osgi 在捆绑包中做出平台级决策的策略

Osgi 在捆绑包中做出平台级决策的策略,osgi,Osgi,我有一个要求,如果一个bundle由于某些内部状态问题而无法启动,那么整个应用程序不应该运行,因此平台应该关闭bundleCtx.getBundle0.stop 由于OSGi良好的模块性等等,其他bundle可能启动得很好 如果BundleException发生在不同的地方,BundleException调用bundleCx.getBundle0.stop或System.exitnn感觉有点不对 有没有一种通用的方法来实现这一点?一种方法可能是声明性服务,但只有在给定组件启动时才会通知这些服务,

我有一个要求,如果一个bundle由于某些内部状态问题而无法启动,那么整个应用程序不应该运行,因此平台应该关闭bundleCtx.getBundle0.stop

由于OSGi良好的模块性等等,其他bundle可能启动得很好

如果BundleException发生在不同的地方,BundleException调用bundleCx.getBundle0.stop或System.exitnn感觉有点不对


有没有一种通用的方法来实现这一点?一种方法可能是声明性服务,但只有在给定组件启动时才会通知这些服务,对吗?它无法判断某件事是否已经失败。

啊,我刚刚偶然发现了一种可能性

我有一个引导包,负责启动我应用程序中的所有其他包。它通过START_瞬态来实现这一点


我可以将逻辑放入这个捆绑包中,根据哪个捆绑包失败来做某些事情。

因此,一个想法是让一个捆绑包检查是否出现了所有需要的服务和捆绑包。然后,如果一个或多个服务丢失或捆绑包没有启动,它可以停止框架。这将允许将检查逻辑集中在一个地方。

但该捆绑包何时执行检查?捆绑包或服务的启动时间没有保证,也没有同步性。我知道我希望它们在应用程序启动时出现,但确切的时间我无法控制。您需要等待服务,并在超时发生时做出反应。我想在时间分辨率上,我们谈论的是秒,这会起作用。