【问题标题】:OSGi DS & deactivating a component manuallyOSGi DS & 手动停用组件
【发布时间】:2023-04-02 19:29:01
【问题描述】:

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

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

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

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

            }
 }

【问题讨论】:

    标签: java osgi


    【解决方案1】:

    执行此操作的最佳方法是使用 ComponentContext API 从同一包中的另一个组件。

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

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

    【讨论】:

    • 那么这是否意味着放弃这些组件的 DS?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2020-12-31
    • 2017-10-27
    • 2013-12-27
    • 2020-06-08
    • 2021-04-03
    • 1970-01-01
    相关资源
    最近更新 更多