首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新IPOJO组件实现

更新IPOJO组件实现
EN

Stack Overflow用户
提问于 2014-11-10 13:15:44
回答 1查看 71关注 0票数 1

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

1.问题:

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

//

代码语言:javascript
复制
@Component(name="C", immediate=true)
@Instantiate
public class C_impl {
        @Requires
        A_Service service;
}

//

  • 所有三个组件都已部署并正常工作。

2.要求:

  • 现在,我将动态更新"C“的实现,方法是将C_impl.java中的依赖类型(@Requires C_impl.java服务)更改为(@Requires B_service服务),即在运行时将A_service更改为C_impl中的B_service。

问题

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-11 10:40:49

您想要更改组件的组件类吗?这是行不通的。

唯一的方法是在没有实例的情况下声明两个实现(no @instantiate),并创建一个需要两个工厂(org.apache.felix.ipojo.Factory服务)的组件,并在需要时创建实例。显然,如果需要替换,在创建第二个实例时还需要释放第一个创建的实例。

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

代码语言:javascript
复制
@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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26844739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档