使用Geode 1.2和9.1 Pivotal本机客户端,代码如下:
IRegion<string, IPdxInstance> r = cache.GetRegion<string, IPdxInstance>("myRegion");
return r[key];
然后触发AfterCreate
的{{1}}事件。为什么在没有创建数据时才会发生这种情况,只读?
答案 0 :(得分:1)
我从未使用过Native Client,但乍一看,应该预期在客户端调用afterCreate
事件,因为条目实际上是正在创建本地缓存。我的意思是该条目可能存在于服务器上,但在内部,客户端需要从服务器检索它,然后在本地创建它(从而为本地安装的afterCreate
调用CacheListener
) 。有道理吗?。
答案 1 :(得分:1)
在这里,从未使用过Native Client。我同意@Urizen所怀疑的内容 - 你从没有该条目的Geode实例调用r[key]
,因此它从其他实例中提取数据,这些实例在本地“创建”该条目。
你有几个选择:
使用registerAllKeys()
(文档here)为您正在发起呼叫的实例执行兴趣注册。这里有一个问题:(可能不适用于本机客户端),在Java API中,您可以选择使用InterestResultPolicy
注册兴趣。如果使用KEYS_VALUES
,则会在启动时从远程将所有数据加载到本地,而不会触发afterCreate回调。如果您只选择KEYS或NONE,您可能会遇到类似的问题。
您可以在remoteOrigin
中检查布尔标记EntryEvent
。如果它是假的,它纯粹是本地的。在非WAN设置中,这应该足以区分本地操作和远程启动的操作(无论是缓存同步还是由其他缓存启动的真正创建)。模糊地记住WAN在这里工作有点不同。