如何从 Openstack4j java api 中的令牌获取正确的 OSClient for v2 和 v3?

How to get right OSClient from token in Openstack4j java api for v2 and v3?

我正在使用 openstack4j java api。我能够访问 2 个 openstack 项目 (image for projects that I can access),给定实例 ID 我想关闭实例。在获取 OSClient 时,我遍历两个项目的客户端并检查该实例属于哪个项目。

然后使用 OSClient 句柄调用 Shut down。os.compute().servers().action(instanceId, Action.STOP);现在一个线程保持 运行 跟踪当前实例状态,如果当前实例状态达到所需状态,则我执行一些操作。

我的问题: 我正在从 OSClient 句柄创建 (ModelEntity) token

        ModelEntity token = null;
        if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V2)) {
            token = ((OSClient.OSClientV2) os).getAccess();
        }else if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V3)){
            token = ((OSClient.OSClientV3) os).getToken();
        }
        return token;
然后我试图在要执行线程的另一个 class 中获得相同的 OSClient 句柄。如果我只是传递相同的 OSClient 句柄,那么我会收到一些无效的会话错误消息。因此,从这个令牌我试图在其他 class 中获取 OSClient 句柄。在其他 class 中,我执行以下操作来获取 OSClient :
    OSClient os = null;
    if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V2)){
        os = OSFactory.clientFromAccess((Access) token);
    }else if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V3)){
        os = OSFactory.clientFromToken((Token) token);
    }
    _logger.info(" ================= rishi token : " + token.hashCode());

    return os;

我正在获取 OSClient 句柄,但它指向不同的项目(列表中的第一个项目)。我正在从正确的 OSClient 句柄生成令牌,但为什么我没有从同一个令牌中获得正确的 OSClient。关于如何获得正确的 OSClient 句柄有什么建议吗?

找到答案了!!

我的意图是为所有租户或项目获取 OSClient 句柄。我制作了一个 OSClient 句柄列表。我对第一个租户进行了身份验证以获取客户端,然后将其添加到客户端列表中,然后对第二个租户进行了身份验证,然后再次将其添加到列表中。现在,因为我对第二个租户进行了身份验证,第一个租户的会话处于非活动状态,并且列表中的第一个客户端也指向第二个客户端的实例。

我太笨了;)