在bundle中进行平台级决策的策略

  • 本文关键字:决策 策略 平台 bundle osgi
  • 更新时间 :
  • 英文 :


我有一个要求,如果一个捆绑包由于某些内部状态问题而无法启动,则整个应用程序不应运行,因此平台应关闭(bundleCtx.getBundle(0).stop())。

由于OSGi良好的模块性等等,其他捆绑包可能已经启动得很好了。

捆绑包在不同的地方调用bundleCtx.getBundle(0).stop()(如果出现BundleException,则调用System.exit(nn))感觉有点不对。

有没有一种通用的方法来实现这一点?一种方法可能是声明式服务,但这些服务只有在给定组件启动时才会得到通知,对吧?它无法判断是否有故障(AFAIK)。

啊,这是我刚刚偶然发现的一种可能性。

我有一个引导程序捆绑包,负责启动我的应用程序中的所有其他捆绑包。它使用START_TRANSIENT来实现这一点。

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

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

最新更新