读取DataSerializable、命名空间:0、ID:0时出现问题,同时取消对hazecast-map对象的初始化



我有一个带有两个字段的简单对象,它扩展了hazecast-DataSerializable接口。放入该映射工作正常,但在使用相同名称检索时,它显示了一个异常:"读取DataSerializable时出现问题,命名空间:0,ID:0"。

我使用的是榛卡斯特客户端"3.12.4"和榛卡斯特集群的最新docker基础图像。

如果你们中有人面临类似的问题,请告诉我,伙计们?为了简单起见,我现在还没有使用任何数据库。我的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容器的类路径。

最新更新