在 Riak java 客户端中,如何正确处理未找到 key/value 对象的情况
In the Riak java client, how to properly handle the case where a key/value object was not found
Riak 开发相对较新。我正在使用 C++ 客户端连接到 Riak java 客户端,该客户端又连接到 Riak 集群。 C++ 客户端使用 Google 协议缓冲区以 "GET":KEY 的形式将查询序列化为字符串,Riak java 客户端将响应序列化为 "OK":VALUE。如何正确处理数据库中找不到该值的情况?
这是 Riak java 客户端从数据库中检索对象的示例代码:
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;
}
如果找不到对象,byte[] 数组保持为 NULL
这是来自 Riak java 客户端的示例代码,用于序列化回复:
ByteString valueBuf = ByteString.copyFrom(value);
// Generate reply message
reply = Request.RequestMessage.newBuilder().setCommand("OK").setValue(valueBuf).build().toByteArray();
但是代码在 copyFrom 行抛出 NullPointerException,因为它试图从 Null 数组进行复制。有没有办法更干净地做到这一点?
谢谢!
在尝试 copyFrom()
调用之前,您应该检查是否 value == null
。
此外,您应该考虑使用 Go 的从 C (cgo
) 调用的能力而不是 Java 客户端进行集成。我整理了一个very, very basic demonstration of doing that here.
Riak 开发相对较新。我正在使用 C++ 客户端连接到 Riak java 客户端,该客户端又连接到 Riak 集群。 C++ 客户端使用 Google 协议缓冲区以 "GET":KEY 的形式将查询序列化为字符串,Riak java 客户端将响应序列化为 "OK":VALUE。如何正确处理数据库中找不到该值的情况?
这是 Riak java 客户端从数据库中检索对象的示例代码:
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;
}
如果找不到对象,byte[] 数组保持为 NULL
这是来自 Riak java 客户端的示例代码,用于序列化回复:
ByteString valueBuf = ByteString.copyFrom(value);
// Generate reply message
reply = Request.RequestMessage.newBuilder().setCommand("OK").setValue(valueBuf).build().toByteArray();
但是代码在 copyFrom 行抛出 NullPointerException,因为它试图从 Null 数组进行复制。有没有办法更干净地做到这一点?
谢谢!
在尝试 copyFrom()
调用之前,您应该检查是否 value == null
。
此外,您应该考虑使用 Go 的从 C (cgo
) 调用的能力而不是 Java 客户端进行集成。我整理了一个very, very basic demonstration of doing that here.