Apaches Ignite 没有 serialize/deserialize Guavas LoadingCache

Apaches Ignite doesn't serialize/deserialize Guavas LoadingCache

我正在使用 Java7 并且正在配置 Apache Ignite(版本 2.7.5),其中 servers/clients 已启动且 运行。但是,客户端无法从对象中检索 Guavas LoadingCache 变量(但是检索 ConcurrentHashMap 没有问题)。似乎以某种方式在 Ignites 代理调用上对象不是 serialized/deserialized 正确并且我遇到了麻烦,因为 Guavas 文档说 LoadingCache/Cache 实现 Serializable.

在下面的示例中,MyContainer class 和 _foo1 没有问题,并且已正确序列化和反序列化,但 _foo (LoadingCache) 没有。

public class MyContainer {

private final ConcurrentHashMap<Object, Object> _foo1 = new ConcurrentHashMap<>();

private final LoadingCache<Object, Test> _foo = CacheBuilder.newBuilder().weakValues()
               .build(new CacheLoader<Object, Test>() {
                @Override public Test load(Object key) throws Exception {
                     return new Test(key);
                }});


}

如果您需要更多详细信息,请告诉我,非常感谢任何帮助。 最好的问候,海尔德

更新

大家好,根据 Denis 的回复,我进行了更多挖掘,发现了一些关于 cfg.setMarshaller(new OptimizedMarshaller().setRequireSerializable(false)); 的提及并且它起作用了。但是,setMarshaller 已被弃用,我不确定这种方法主要在性能级别上的影响。

任何 read/explanation 关于弃用此方法背后的重大问题是什么?

此致,海尔德

CacheBuilder构造了LocalCache.LocalLoadingCache的一个实例。它有一个 writeReplace 方法会打乱序列化。

此问题已在 Ignite 2.3 中修复:https://issues.apache.org/jira/browse/IGNITE-6485

您使用哪个版本的 Ignite?我建议升级到 Ignite 的新版本并切换到 Java 8 或 11,因为 Ignite 不再支持 Java 7。