首页 > 解决方案 > 读取 DataSerializable 时出现问题,命名空间:0,ID:0 同时反序列化 hazelcast 地图对象

问题描述

我有两个扩展 hazelcast DataSerializable 接口的字段的简单对象。放入该地图工作正常,但在使用相同名称检索时显示异常:“读取 DataSerializable 时出现问题,命名空间: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);
}

在此先感谢您的帮助。

标签: spring-boothazelcastspring-cachehazelcast-imap

解决方案


根据评论对话,这里的答案似乎是双重的

map.get(k)工作正常,因此序列化逻辑本身似乎是正确的。

为了查询DataSerializable对象,域对象需要位于服务器的类路径中。服务器必须完全反序列化该类型的每个对象,以确定它是否与查询谓词匹配。-e CLASSPATH这需要使用“ ”选项扩展 docker 容器的类路径。


推荐阅读