Hazelcast 中 EntryProcessor 的自定义序列化功能

Custom Serialization capability for EntryProcessor in Hazelcast

提问人:George K J 提问时间:9/23/2022 最后编辑:George K J 更新时间:9/23/2022 访问量:31

问:

我们是否有 EntryProcessor 或 ExecutorService 的自定义序列化功能?Hazelcast文档没有在这方面指定任何内容。文档中没有提供与 EntryProcessor 的自定义序列化相关的示例。我们正在寻找 EntryProcessor 的可移植序列化。

public class SampleEntryProcessor implements EntryProcessor<SampleDataKey, SampleDataValue , SampleDataValue >,Portable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

private SampleDataValue sampleDataValue ;

public SampleDataValue process(Map.Entry<SampleDataKey, SampleDataValue > entry) {
    
    //Sample logic here
    return null;
}


@Override
public int getFactoryId() {
    return 1;
}

@Override
public int getClassId() {
    return 1;
}

@Override
public void writePortable(PortableWriter writer) throws IOException {
    writer.writePortable("i", sampleDataValue );
    
}

@Override
public void readPortable(PortableReader reader) throws IOException {
    sampleDataValue = reader.readPortable("i");
}

}

更新:当我尝试调用处理器时,出现如下错误。

Exception in thread "main" java.lang.ClassCastException: com.hazelcast.internal.serialization.impl.portable.DeserializedPortableGenericRecord cannot be cast to com.hazelcast.map.EntryProcessor
at com.hazelcast.client.impl.protocol.task.map.MapExecuteOnKeyMessageTask.prepareOperation(MapExecuteOnKeyMessageTask.java:42)
at com.hazelcast.client.impl.protocol.task.AbstractPartitionMessageTask.processInternal(AbstractPartitionMessageTask.java:45)
Java Hazelcast 分布式缓存

评论


答:

0赞 mdumandag 9/23/2022 #1

是的,您可以使用不同的序列化机制来序列化入口处理器,前提是它们在发送端和接收端正确配置。因此,在确保在成员和从中发送入口处理器的实例(例如,客户端)上注册了类的可移植工厂后,它应该可以正常工作。

评论

0赞 George K J 9/23/2022
感谢您的快速回复。我将便携式工厂注册到客户端和服务器。在问题中更新了我得到的错误。有什么示例代码可以参考吗?
0赞 George K J 9/24/2022
这就像一个魅力。错误是,在成员端配置了错误的工厂 ID