我有一个要求,如果由于某些内部状态问题导致一个捆绑包无法启动,则整个应用程序不应该运行,因此应关闭平台(bundleCtx.getBundle(0).stop()
)。
由于OSGi的模块化程度很好等等,其他捆绑包可能已经启动了。
如果捆绑在不同的地方调用bundleCtx.getBundle(0).stop()
(或System.exit(nn)
,如果发生BundleException
)感觉有点错误。
有没有一种通用的方法来实现它?一种方法可能是声明式服务,但只有在给定组件启动时才会通知,对吧?它无法判断某些事情是否失败(AFAIK)。
答案 0 :(得分:0)
我有一个引导程序包,负责启动我的应用程序中的所有其他程序包。它使用START_TRANSIENT
执行此操作。
我可以将逻辑放入此捆绑包中以执行某些操作,具体取决于哪个捆绑包失败。
答案 1 :(得分:0)
因此,一个想法就是有一个捆绑包来检查是否所有需要的服务和捆绑包都出现了。如果缺少一个或多个服务或者捆绑包没有启动,它可以停止框架。这将允许在一个地方集中检查逻辑。