2016-04-27 14 views
0

Relativ neu mit Riak Entwicklung hier gefunden wurde. Ich verwende einen C++ - Client, um eine Verbindung zu einem Riak Java Client herzustellen, der wiederum eine Verbindung zum Riak Cluster herstellt. Der C++ - Client serialisiert als String eine Abfrage mit Google Protocol Buffers in Form von "GET": KEY und der Riak Java Client serialisiert die Antwort als "OK": VALUE. Wie behandelt man den Fall, dass der Wert nicht in der Datenbank gefunden wurde?Im Riak Java-Client, wie man richtig den Fall zu behandeln, wo ein Schlüssel/Wert-Objekt nicht

Dies ist der Beispielcode aus dem Riak Java-Client das Objekt aus der DB abrufen:

String key //Contains the actual key 
Namespace ns; 

byte[] retVal = null; 

Location location = new Location(ns, key); 

try { 
    FetchValue fv; 

    FetchValue.Response response = client.execute(fv); 

    if (response.isNotFound()) { 
    System.out.println("The key/value pair was not found"); 
    } else { 
    RiakObject obj = response.getValue(RiakObject.class); 
    retVal = obj.getValue().getValue(); 
    } 
} 
catch (...) {...} 

return retVal; 

}

Wenn das Objekt nicht gefunden wurde, das byte [] -Array NULL bleibt

Dies ist der Code Probe aus dem Riak Java-Client die Antwort zu serialisiert:

ByteString valueBuf = ByteString.copyFrom(value); 

// Generate reply message 
reply = Request.RequestMessage.newBuilder().setCommand("OK").setValue(valueBuf).build().toByteArray(); 

Der Code löst jedoch eine NullPointerException in der copyFrom-Zeile aus, da er versucht, von einem Null-Array zu kopieren. Gibt es eine Möglichkeit, das sauberer zu machen?

Danke!

Antwort

1

sollten Sie überprüfen, ob value == null, bevor Sie den copyFrom() Anruf zu sehen.

Außerdem sollten Sie Go's Fähigkeit von C (cgo) anstelle des Java-Clients für die Integration aufgerufen werden. Ich habe, dass here ein very, very basic demonstration tun zusammen.