更新IPOJO组件实现



我有另一个与iPOJO中的动态更新有关的问题:

1.问题:

  • 假设我有两个组件A和B。这两个组件分别由A_impl.java和B_impl.java实现。它们实现了两个服务A_service和B_service
  • 组件"C"使用A_ service声明如下:

//

@Component(name="C", immediate=true)
@Instantiate
public class C_impl {
        @Requires
        A_Service service;
}

//

  • 所有三个组件都已部署并运行良好

2.要求:

  • 现在,我想通过将C_impl.java中的依赖项类型(@Requires A_service service)更改为(@Requires B_service service)来动态更新"C"的实现,即在运行时将C_impl中的A_service更改为B_service

问题

如何开发独立组件来重新配置(控制)组件实现?我读过(http://felix.apache.org/site/dive-into-the-ipojo-manipulation-depths.html)但我不太明白。提前感谢您的回复

好吧,你想更改组件的组件类吗?这不会真正奏效。

唯一的方法是让这两个实现在没有声明实例的情况下可用(no@instance),并创建一个需要两个工厂的组件(org.apache.filex.ipojo.Factory服务),并在需要时创建实例。显然,如果您需要替换,那么在创建第二个实例时,还需要处理第一个创建的实例。

因此,它需要这样的组件(这是伪代码):

@Component(immediate=true)
@Instantiate
public class Controller {
    @Requires(filter="(factory.name=A)")
    Factory factoryOfA;
    @Requires(filter="(factory.name=B)")
    Factory factoryOfB;    
    ComponentInstance instance;
    @Validate
    public void createA() throws Exception {
        instance = factoryOfA.createInstance(null);
    }
    public void switchToB() throws Exception {
        instance.dispose();
        instance = factoryOfB.createInstance(null);
    }
}

相关内容

  • 没有找到相关文章

最新更新