Проблема с сериализацией клиента Hazelcast Jet и Node.JS

У меня есть Jet 0.6 в качестве резервной копии и некоторый процесс Node.JS с установленным hazelcast-nodejs-client 0.8.0. Я пытаюсь подтолкнуть к отображению объекта из процесса Node, который является точным отражением аналогичного объекта на стороне Jet. Однако я не понимаю, как убедиться, что на стороне Jet этот JS-объект будет соответственно сериализован / десериализован. У меня такое чувство, что мне нужно указать Jet, что этот объект JSON должен быть Data POJO, и следует использовать правильную сериализацию / десериализацию.

На стороне узла:

var data = {
    id: someObject.did, // long
    time: someObject.time, // long
};
dataMap.put(data.id, data).then(
    function () {
        console.log("Ok");
    },
    function (error) {
        console.error(error);
    }
);

Со стороны Jet: открытый класс Data реализует Serializable {

private long id;
private long time;

public Data(long id, long time) {
    this.id = id;
    this.time = time;
}

public long getId() {
    return id;
}

public long getTime() {
    return time;
}

ОБНОВЛЕНИЕ:

Мне удалось отследить стек вызовов до DefaultSerializer.ts, который, по-видимому, отвечает за преобразование объектов JS в Data экземпляры, которые будут отправлены через службу MapProxy в кеш:

export class JsonSerializer implements Serializer {
    getId(): number {
        return -130;
    }

    read(input: DataInput): any {
        return JSON.parse(input.readUTF());
    }

    write(output: DataOutput, object: any): void {
        output.writeUTF(JSON.stringify(object));
    }
}

person Viktor Stolbin    schedule 11.07.2018    source источник


Ответы (1)


Правильная конфигурация сериализации необходима как на Node.js, так и на Java. Однако Serializable - это интерфейс только для Java. Поэтому клиент Hazelcast Node.js не может его использовать. Вам нужно, чтобы ваш объект реализовал на обеих сторонах IdentifiedDataSerializable или Portable.

Пример сериализуемых идентификационных данных Node.js: https://github.com/hazelcast/hazelcast-nodejs-client/blob/master/code_samples/org-website/IdentifiedDataSerializableSample.js

Пример сериализуемых данных идентификации Java: https://github.com/hazelcast/hazelcast-code-samples/tree/master/serialization/identified-data-serializable

person mustafaiman    schedule 11.07.2018
comment
Спасибо, я искал в этом направлении, но не смог найти пример IdentifiedDataSerializable для клиентской стороны - person Viktor Stolbin; 11.07.2018