0

我们使用 Felix 作为我们的 OSGi 框架和 Felix 依赖管理器来管理我们的 OSGi 组件。我们有一种情况,我们在组件的 start 方法中加载和验证 XML。如果针对模式的 XML 验证失败,我们希望停止捆绑。我们有

  • 试图在 start 方法中抛出异常,但 bundle 仍然处于活动状态
  • 在 start 方法中调用了 Bundle 的 stop 方法,但这会将 bundle 设置为不稳定(停止)状态。

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

如果 start 方法存在致命问题,那么实现此要求的正确方法是什么,bundle 应该保持停止状态?

4

1 回答 1

0

如果您希望某个包在有人尝试启动它后不被激活,您必须从startBundleActivator 的方法中抛出一个异常。这是告诉框架出现问题并且您的包无法启动的最佳方式。

start您尝试从组件的方法中抛出异常。此时捆绑包已经激活,所以你为时已晚。

在这种情况下,我建议您覆盖 and 中的start方法DependencyActivatorBase

  1. 加载并验证您的 XML(如果失败则抛出异常)。
  2. 调用start超类的方法,这样 DM 就可以完成它的工作。

这隐含地意味着您不能为此捆绑包使用基于注释的 DM 版本,因此如果您使用它,则必须将其转换为使用代码声明其组件和依赖项的捆绑包。

于 2016-11-09T09:14:23.277 回答