反序列化 hazelcast 映射对象时读取 DataSerializable、名称空间:0、ID:0 时出现问题
Problem while reading DataSerializable, namespace: 0, ID: 0 while deserizing hazelcast map object
我有一个带有两个扩展 hazelcast DataSerializable 接口的字段的简单对象。放入该地图工作正常但在使用相同名称检索时显示异常说:'Problem while reading DataSerializable, namespace: 0, ID: 0'.
我正在使用 hazelcast 客户端“3.12.4”和具有最新 docker 基础映像的 hazelcast 集群。
如果你们中有人遇到过类似的问题,请告诉我吗?为了简单起见,我到目前为止还没有使用任何数据库。我的 hazelcast 客户端只在 IMap 中保存一个简单的对象,然后从 IMap 中检索。
请在下面找到我的代码片段:
域对象:
public class Employee implements DataSerializable {
private String name;
private Integer serialNumber;
public Employee() {
}
public Employee(String name, Integer serialNumber) {
this.name = name;
this.serialNumber = serialNumber;
}
** Getter and Setter **
@Override
public void readData(ObjectDataInput in) throws IOException {
this.name = in.readUTF();
this.serialNumber = (Integer) in.readInt();
}
@Override
public void writeData(ObjectDataOutput out) throws IOException {
out.writeUTF(name);
out.writeInt(serialNumber);
}
Hazelcast 保存并获得:
IMap<String, Employee> map = hazelcastInstance.getMap("employee");
map.put(employee.getName(), employee);
EntryObject e = new PredicateBuilder().getEntryObject();
Predicate predicate = e.get("serialNumber").lessThan(200);
Collection<Employee> result = map.values(predicate);
}
在此先感谢您的帮助。
根据评论对话,这里的答案似乎有两个
map.get(k)
工作正常,因此序列化逻辑本身似乎是正确的。
为了查询 DataSerializable
个对象,域对象需要位于服务器的类路径中。服务器必须完全反序列化该类型的每个对象以确定它是否与查询谓词匹配。需要使用“-e CLASSPATH
”选项扩展 docker 容器的类路径。
我有一个带有两个扩展 hazelcast DataSerializable 接口的字段的简单对象。放入该地图工作正常但在使用相同名称检索时显示异常说:'Problem while reading DataSerializable, namespace: 0, ID: 0'.
我正在使用 hazelcast 客户端“3.12.4”和具有最新 docker 基础映像的 hazelcast 集群。
如果你们中有人遇到过类似的问题,请告诉我吗?为了简单起见,我到目前为止还没有使用任何数据库。我的 hazelcast 客户端只在 IMap 中保存一个简单的对象,然后从 IMap 中检索。
请在下面找到我的代码片段:
域对象:
public class Employee implements DataSerializable {
private String name;
private Integer serialNumber;
public Employee() {
}
public Employee(String name, Integer serialNumber) {
this.name = name;
this.serialNumber = serialNumber;
}
** Getter and Setter **
@Override
public void readData(ObjectDataInput in) throws IOException {
this.name = in.readUTF();
this.serialNumber = (Integer) in.readInt();
}
@Override
public void writeData(ObjectDataOutput out) throws IOException {
out.writeUTF(name);
out.writeInt(serialNumber);
}
Hazelcast 保存并获得:
IMap<String, Employee> map = hazelcastInstance.getMap("employee");
map.put(employee.getName(), employee);
EntryObject e = new PredicateBuilder().getEntryObject();
Predicate predicate = e.get("serialNumber").lessThan(200);
Collection<Employee> result = map.values(predicate);
}
在此先感谢您的帮助。
根据评论对话,这里的答案似乎有两个
map.get(k)
工作正常,因此序列化逻辑本身似乎是正确的。
为了查询 DataSerializable
个对象,域对象需要位于服务器的类路径中。服务器必须完全反序列化该类型的每个对象以确定它是否与查询谓词匹配。需要使用“-e CLASSPATH
”选项扩展 docker 容器的类路径。