ipojo 重新配置期间的数据传输



在重新配置期间,我在ipojo组件之间的数据传输方面遇到问题。下面是一个示例:

  • 组件Calcul_1提供计算服务以返回值(a+b)(例如:f(a,b)=> (a+b)
  • 组件Calcul_2提供计算服务以返回值(a*b)(例如:f(a,b)=> (a*b)

这两个组件实现相同的计算服务(例如:f )。

  • 现在,我有一个使用Calcul_1计算服务的组件CallCalcul。组件CallCalcul调用组件Calcul_1中的f(5,6)。然后,CallCalcul component接收值 11。

问题:

  1. Calcul_1CallCalcul接收到(5,6)值(尚未计算)时,CallCalcul通过将连接器更改为Calcul_2来重新配置,即绑定到Calcul_2。在这种情况下,如何将(5,6)Calcul_1传输到Calcul_2,并将(5*6=30)返回到CallCalcul

  2. Calcul_1CallCalcul收到(5,6)的值(并计算他们的值,即 5+6=11)时,CallCalcul重新配置。在这种情况下,如何将11传输到Calcul_2并将此值返回给CallCalcul

据我所知,ipojo 处理同步,因此不会发生这种行为。

来自 ipojo 文档:

同步由 iPOJO 管理。一旦您"接触"方法中的依赖项,iPOJO 就会确保您将这些对象保留到方法结束。嵌套方法将共享相同的服务对象集。

因此,只要您使用相同的方法(或嵌套方法),您就知道您的服务自您第一次访问它以来就没有被修改过(我假设您对f的调用是同步的,所以如果我错了,请告诉我)。Calcul_1组件不会在方法调用过程中被Calcul_2替换。

但是,我想这也意味着,如果您希望重新配置生效,则必须使用您的服务到达方法的末尾。例如,如果您的组件启动一个具有以下函数的线程:

public void run() {
    while(!end) {
        //while this function is running, myService will not change
        int var = myService.f(a,b); 
        // ... do something with the result
        Thread.sleep(SLEEP_TIME);
    }
}

如果此函数继续运行,即使修改了筛选器,ipojo 也不会将新服务绑定到myService。应将对服务的调用放在另一个帮助程序方法中。它将允许 ipojo 在重新配置组件时锁定对服务的访问。例如:

public void run() {
    while(!end) {
        // the service may not be the same each time because this function does
        // not directly use the service
        int var = callDynamicService(a,b); 
        // ... do something with the result
        Thread.sleep(SLEEP_TIME);
    }
}
private int callDynamicService(int a, int b) {
    return myService.f(a,b);
}

相关内容

  • 没有找到相关文章

最新更新