gpt4 book ai didi

java - OSGi DS 和手动停用组件

转载 作者:行者123 更新时间:2023-11-29 08:12:03 31 4
gpt4 key购买 nike

如果我使用声明式服务,手动停用 OSGi 中的组件是否有效?

例如,假设我有一个组件,实现了:

//component
class Overseer(){
List<ServiceReference> serviceRefs = ...//populate

private void doStuff(){
serviceRef = serviceRefs[i];
if(dontNeedThisAnymore){
serviceRefs.remove(serviceRef);
serviceRef.getBundle().stop();

}
}

最佳答案

最好的方法是从同一个包中的另一个组件,使用 ComponentContext API。

您可以编写一个组件,使其将 ComponentContext 作为其激活方法的参数。该接口(interface)具有 enableComponentdisableComponent 方法,可用于启用/禁用同一包中的其他组件。

我将其称为“看门人”组件,因为它可用于在启用其他组件之前设置其他组件所需的资源。例如,您可能有多个组件需要先启动数据库才能完成它们的工作……看门人会负责启动数据库,然后调用 enableComponent(null) 来启用其他组件。同样,如果网守可以检测到数据库已关闭并在此时禁用其他组件。为了使其正常工作, bundle 中除网守外的所有组件都需要最初设置为 enabled="false"

关于java - OSGi DS 和手动停用组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7604219/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com