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

问题描述 投票:0回答:1

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

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

在我的@Activate方法中使用Declarative Services,如果由于某种原因无法初始化,我可能会抛出异常。我发现虽然这样做并不能阻止捆绑标记为“活动”。我还假设一个组件的故障不会阻止捆绑中的其他组件变为活动状态?

例如,如果我有几个组件而一个组件无法初始化,那么我会想要停用所有其他组件,并且整个软件包不是活动的,即失败快速。

有没有办法用Declarative Services做到这一点?

osgi declarative-services
1个回答
0
投票

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

此外,每个组件的生命周期也是独立的。您可以在一个包中提供多个组件,但这实际上只是为了让它们共享静态(即编译时)依赖性。如果需要将一个组件的生命周期与另一个组件的生命周期联系起来,则应在它们之间进行服务引用。

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

© www.soinside.com 2019 - 2024. All rights reserved.