使用HotRod C ++访问Infinispan服务器会抛出异常

时间:2016-05-24 08:47:40

标签: c++ infinispan

我正在尝试使用C ++中的HotRod库访问Infinispan服务器,因为我不熟悉Java,但我得到了Exception,并且不知道如何继续。

源代码是:

#include "infinispan/hotrod/ConfigurationBuilder.h"
#include "infinispan/hotrod/RemoteCacheManager.h"
#include "infinispan/hotrod/RemoteCache.h"
#include <iostream>
#include <string>

int main(int argc, char **argv) {
        infinispan::hotrod::ConfigurationBuilder cb;
        cb.addServer().host("192.168.1.1").port(11222);
        infinispan::hotrod::RemoteCacheManager cm(cb.build());
        infinispan::hotrod::RemoteCache<std::string, std::string> cache = cm.getCache<std::string, std::string>("dCache");
        cm.start();
        std::cout << cache.size() << std::endl;
        cm.stop();
        return 0;
}

我得到的是:

terminate called after throwing an instance of 'infinispan::hotrod::HotRodClientException'
  what():  scala.MatchError: 24 (of class java.lang.Byte)
Aborted

PS。 GDB回溯表示错误发生在std::cout << cache.size() << std::endl;

2 个答案:

答案 0 :(得分:1)

C ++客户端版本8.0.0默认使用Hotrod协议VERSION_24,这对于Infinispan 6.0.0来说太新了。

尝试以这种方式配置VERSION_13:

cb.addServer().host("192.168.1.1").port(11222).protocolVersion(Configuration::PROTOCOL_VERSION_13);

答案 1 :(得分:0)

我不知道HotRod C ++,但我不知道它是否是您例外的原因,但根据this page, 默认情况下,RemoteCacheManager构造函数启动管理器;所以,以下cm.start()它是第二次开始(?)。

this example中,我看到管理器是在没有启动的情况下创建的,所以......

建议:尝试

infinispan::hotrod::RemoteCacheManager cm(cb.build(), false);