如果声明式服务失败,则捆绑包启动失败

Failing Bundle Start-Up if Declarative Service Fails

如果其中一个 DS 组件初始化失败,是否有办法防止 Bundle 被标记为 'ACTIVE'?

例如,如果我要实现 BundleActivator,我可以在 start() 方法中抛出一个 BundleException,并且我可以阻止该捆绑包提供的任何服务被注册。

在我的 @Activate 方法中使用声明式服务 如果它出于某种原因无法初始化,我可能想抛出一个异常。我发现这样做并不能阻止捆绑包被标记为 'ACTIVE'。我还假设一个组件的故障不会阻止捆绑包中的其他组件变为活动状态?

例如,如果我有多个组件,其中一个无法初始化,那么我希望停用所有其他组件,并且整个捆绑包不处于活动状态,即快速失败。

有没有办法用声明式服务做到这一点?

不,这是不可能或不可取的。组件生命周期与包生命周期是分开的。当您想了解其中组件的状态时,您不应该查看捆绑包状态。

而且每个组件的生命周期都是独立的。您可以在一个包中交付多个组件,但这实际上只是为了方便它们共享静态(即编译时)依赖项。如果您需要将一个组件的生命周期与另一个组件联系起来,您应该在它们之间建立一个服务引用。

如果您能解释为什么您希望一个组件在另一个不相关的组件恰好发生故障时发生故障,将会有所帮助。那么也许我们可以为潜在的问题提供更好的解决方案。