停止在启动时使用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
方法抛出异常。在那一刻,捆绑已经变得活跃,所以你太迟了。
我会建议在您覆盖从DependencyActivatorBase
和start
方法这种情况下:
- 加载和验证XML(如果失败,抛出一个异常)。
- 调用超类的
start
方法,所以DM可以完成它的工作。
这暗示着你不能使用基于注释的DM版本来处理这个包,所以如果你使用了这个版本,你必须将它转换为一个使用代码来声明它的组件和依赖关系的包。
工作。谢谢Marcel – Hari