Доступ к Infinispan Server с помощью HotRod C ++ выдает исключение

Я пытаюсь получить доступ к серверу Infinispan с помощью библиотеки HotRod на C ++, потому что я не знаком с Java, но у меня есть исключение и я не знаю, как действовать.

Исходный код:

#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

пс. Трассировка GDB указывает, что ошибка произошла в строке std::cout << cache.size() << std::endl;.


person T. Shiba    schedule 24.05.2016    source источник
comment
Это похоже на несоответствие протокола. Какую версию клиента и сервера вы используете? Пожалуйста, проверьте журнал сервера, исключение должно регистрироваться там с полной трассировкой стека.   -  person Radim Vansa    schedule 25.05.2016
comment
Клиент @Flavius ​​- 8.0.0.CR2, а сервер - 6.0.0.Final. Я проверил журнал сервера и получил много таких вещей, как 16:28:55,420 ERROR [org.infinispan.server.hotrod.HotRodDecoder] (HotRodServerWorker-223) ISPN005003: Exception reported: org.infinispan.server.hotrod.RequestParsingException: Unable to parse header и ERROR [org.infinispan.server.hotrod.HotRodDecoder] (HotRodServerWorker-226) ISPN005009: Unexpected error before any request parameters read: scala.MatchError: 24 (of class java.lang.Byte)   -  person T. Shiba    schedule 25.05.2016
comment
Сообщает ли журнал сервера, какую версию протокола использует клиент? Клиент C ++ должен знать только 1.2 и ниже, но я могу ошибаться.   -  person Radim Vansa    schedule 25.05.2016


Ответы (2)


Клиент 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);
person rigazilla    schedule 25.05.2016

Я не знаю HotRod C ++ и не знаю, является ли это причиной вашего исключения, но, согласно this page,
RemoteCacheManager конструкторы по умолчанию запускают менеджер; Итак, следующий cm.start() это второй старт (?).

В этом примере я вижу, что менеджер создается без его запуска, поэтому. ..

Предложение: попробуйте с

infinispan::hotrod::RemoteCacheManager cm(cb.build(), false);
person max66    schedule 24.05.2016
comment
Я изменил эту часть, но ничего не изменилось. - person T. Shiba; 25.05.2016