我们使用Felix作为我们的OSGi框架,使用Felix Dependency Manager来管理我们的OSGi组件。我们有一种情况,我们在组件的start方法中加载和验证XML。如果针对模式的XML验证失败,我们希望停止捆绑。我们有
在start方法中调用了Bundle的stop方法,但这会将bundle设置为不稳定(停止)状态。
FrameworkUtil.getBundle(this.getClass()).stop();
实现此要求的正确方法是什么?如果start方法有致命问题,bundle应该保持停止状态?
答案 0 :(得分:0)
如果您希望某个捆绑包在尝试启动它之后不会变为活动状态,则必须从BundleActivator的start
方法中抛出异常。这是告诉框架存在错误并且捆绑无法启动的最佳方式。
您尝试从组件的start
方法中抛出异常。那时捆绑已经变得活跃,所以你来不及。
在这种情况下,我建议您覆盖start
中的DependencyActivatorBase
方法,并且:
start
方法,以便DM可以完成其工作。这隐含意味着您不能为此捆绑使用基于注释的DM版本,因此如果您使用它,则必须将其转换为使用代码声明其组件和依赖项的捆绑包。