停止在启动时使用Felix Dependency Manager创建的OSGi Bundle

停止在启动时使用Felix Dependency Manager创建的OSGi Bundle

问题描述:

我们使用Felix作为我们的OSGi框架和Felix Dependency Manager来管理我们的OSGi组件。我们有一种情况,我们在组件的启动方法中加载和验证XML。如果根据模式对XML进行验证失败,我们想停止捆绑。我们停止在启动时使用Felix Dependency Manager创建的OSGi Bundle

  • 试图扔在start方法例外,但束变得活跃仍然
  • 称为丛的启动方法停止方法,但是这台捆绑在一个不稳定的(停止)州。

      FrameworkUtil.getBundle(this.getClass()).stop(); 
    

什么是实现这一要求,即如果起动方法有一个致命的问题捆应保持停止的正确方法?

如果您希望某个包在某人尝试启动后不能激活,您必须抛出BundleActivator的start方法的异常。这是告诉框架出现问题并且你的包不能启动​​的最好方法。

您尝试从组件的start方法抛出异常。在那一刻,捆绑已经变得活跃,所以你太迟了。

我会建议在您覆盖从DependencyActivatorBasestart方法这种情况下:

  1. 加载和验证XML(如果失败,抛出一个异常)。
  2. 调用超类的start方法,所以DM可以完成它的工作。

这暗示着你不能使用基于注释的DM版本来处理这个包,所以如果你使用了这个版本,你必须将它转换为一个使用代码来声明它的组件和依赖关系的包。

+0

工作。谢谢Marcel – Hari