Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新IPOJO组件实现_Java_Ipojo - Fatal编程技术网

Java 更新IPOJO组件实现

Java 更新IPOJO组件实现,java,ipojo,Java,Ipojo,我还有一个与iPOJO中的动态更新相关的问题: 1。问题: 假设我有两个组件A和B。这两个组件分别由A_impl.java和B_impl.java实现。它们实现了两种服务A_服务和B_服务 组件“C”使用A_服务,声明如下: // // 这三个组件都已部署,工作正常 2。要求: 现在,我想通过将C_impl.java中的依赖类型(@Requires A_service)更改为(@Requires B_service)来动态更新“C”的实现,即在运行时将C_impl中的A_service

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

1。问题:

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

//

  • 这三个组件都已部署,工作正常
2。要求:

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

我如何开发一个独立的组件来重新配置(控制)组件实现?我读了()但我不太懂。
提前感谢您的回复

那么,您想更改组件的组件类吗?这是行不通的

唯一的方法是在不声明实例的情况下使用这两个实现(no@instantiate),创建一个需要两个工厂的组件(org.apache.felix.ipojo.Factory service),并在需要时创建实例。显然,如果需要替换,那么在创建第二个实例时还需要处理第一个创建的实例

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

@Component(name="C", immediate=true)
@Instantiate
public class C_impl {
        @Requires
        A_Service service;
}
@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);
    }
}