我使用的是java7,配置的是apaches-ignite(2.7.5版),服务器/客户机在这里启动并运行。但是,客户端无法从对象中检索guavas loadingcache变量(但是检索concurrenthashmap时没有问题)。似乎ignites代理调用上的对象没有被正确序列化/反序列化,我遇到了一些问题,因为guavas文档说loadingcache/cache实现了序列化。
在下面的示例中,mycontainer类和\u foo1正常,并且被正确序列化和反序列化,但是\u 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);
}});
}
请让我知道如果你需要更多的细节和任何帮助是非常感谢。祝你好运,hé文件夹
更新
大家好,丹尼斯的React,我做了更多的挖掘,发现了一些关于 cfg.setMarshaller(new OptimizedMarshaller().setRequireSerializable(false));
而且成功了。但是,setmarshaller已被弃用,我不确定这种方法主要在性能级别上的含义。
有人读过/解释过反对这种方法背后有什么大不了的吗?
祝你好运,hé文件夹
1条答案
按热度按时间gpfsuwkq1#
这个
CacheBuilder
构造的示例LocalCache.LocalLoadingCache
. 它有一个writeReplace
方法,该方法会破坏序列化。此问题已在ignite 2.3中修复:https://issues.apache.org/jira/browse/ignite-6485
您使用哪个版本的ignite?我建议升级到ignite的新版本并切换到Java8或Java11,因为Java7不再受ignite支持。