2016-05-24 8 views
1

Ich versuche, einen Infinispan Server mit HotRod-Bibliothek in C++ zugreifen, weil ich nicht mit Java vertraut bin, aber ich habe Ausnahme und weiß nicht weiter.Access Infinispan Server mit HotRod C++ löst Ausnahme

Der Quellcode ist:

#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; 
} 

und was ich habe ist:

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

ps. GDB backtrace zeigt an, dass der Fehler in der Zeile std::cout << cache.size() << std::endl; aufgetreten ist.

+0

Das sieht wie ein Mismatch in Protokoll. Welche Version von Client und Server verwenden Sie? Bitte prüfen Sie das Serverprotokoll, die Ausnahme sollte dort mit voller Stack-Trace protokolliert werden. –

+0

@Flavius ​​Client ist 8.0.0.CR2 und Server ist 6.0.0.Final. Ich überprüfte das Serverprotokoll und bekam eine Menge Dinge wie '16: 28: 55.420 FEHLER [org.infinispan.server.hotrod.HotRodDecoder] (HotRodServerWorker-223) ISPN005003: Ausnahme berichtete: org.infinispan.server.hotrod.RequestParsingException: Header kann nicht analysiert werden und ERROR [org.infinispan.server.hotrod.HotRodDecoder] (HotRodServerWorker-226) ISPN005009: Unerwarteter Fehler vor dem Lesen von Request-Parametern: scala.MatchError: 24 (of class java.lang.Byte) ' –

+0

Gibt das Serverprotokoll an, welche Version des Protokolls der Client verwendet? C++ Client sollte nur 1.2 und niedriger wissen, aber ich kann falsch liegen. –

Antwort

0

Ich weiß nicht, HotRod C++ und ich weiß nicht, ob es die Ursache Ihrer Ausnahme ist aber nach this page,
die RemoteCacheManager Bauer, standardmäßig den Manager starten; Also, das folgende cm.start() ist ein zweiter Start (?).

In this example Ich sehe, dass der Manager ohne Start es erstellt wird, so ...

Vorschlag: versuchen mit

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

Ich habe diesen Teil geändert, aber nichts ändert sich. –

1

C++ Client-Version 8.0.0 standardmäßig verwendet das Hotrod Protokoll VERSION_24, dass es für Infinispan 6.0.0 zu neu ist.

Versuche VERSION_13 auf diese Weise zu konfigurieren:

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