Ignite 网格事件和oldValue与newValue

Ignite 网格事件和oldValue与newValue,ignite,Ignite,更新缓存中的实体时,事件中的oldValue=newValue,除非我对原始对象实例执行put。当然,这并不总是可能的 这里是一个简化的例子 IgnitePredicate<CacheEvent> locLsnr = evt -> { // do something }; ignite.events().localListen(locLsnr,EventType.EVT_CACHE_OBJECT_PUT); IgniteCache<TradeKey, Trade&

更新缓存中的实体时,事件中的oldValue=newValue,除非我对原始对象实例执行put。当然,这并不总是可能的

这里是一个简化的例子

IgnitePredicate<CacheEvent> locLsnr = evt -> {
    // do something
};
ignite.events().localListen(locLsnr,EventType.EVT_CACHE_OBJECT_PUT);
IgniteCache<TradeKey, Trade> cache = ignite.getOrCreateCache("MyCache");

Trade trade1 = new Trade();
trade1.setId(1);
trade1.setSize(10);
cache.put(new TradeKey(trade.getId()), trade1); 
// event is generated
//evt.oldValue is null, no problem
trade1.setSize(20);
cache.put(new TradeKey(trade.getId()), trade1); 
// event is generated
// evt.oldValue().getSize() is 10, evt.newValue().getSize() is 20, this is GOOD
locLsnr=evt->{
//做点什么
};
ignite.events().localListen(locLsnr,EventType.EVT\u CACHE\u OBJECT\u PUT);
IgniteCache cache=ignite.getOrCreateCache(“MyCache”);
贸易1=新贸易();
trade1.setId(1);
贸易1.设置尺寸(10);
cache.put(新的TradeKey(trade.getId()),trade1);
//事件已生成
//evt.oldValue为空,没有问题
贸易1.设置尺寸(20);
cache.put(新的TradeKey(trade.getId()),trade1);
//事件已生成
//evt.oldValue().getSize()是10,evt.newValue().getSize()是20,这很好
但是,如果在更新之前再次从缓存中检索交易(例如,从应用程序的另一部分),则无法看到事件中的旧值。旧值将只显示新值

IgnitePredicate<CacheEvent> locLsnr = evt -> {
    // do something
};
ignite.events().localListen(locLsnr,EventType.EVT_CACHE_OBJECT_PUT);
IgniteCache<TradeKey, Trade> cache = ignite.getOrCreateCache("MyCache");

Trade trade1 = new Trade();
trade1.setId(1);
trade1.setSize(10);
cache.put(new TradeKey(trade.getId()), trade1); 
// event is generated
//evt.oldValue is null, no problem
trade1 = cache.get(new TradeKey(1)); // or could be a query or any search on the cache
trade1.setSize(20);
cache.put(new TradeKey(trade.getId()),trade1); 
// event is generated
// evt.oldValue().getSize() is 20, evt.newValue().getSize() is 20, this is BAD
locLsnr=evt->{
//做点什么
};
ignite.events().localListen(locLsnr,EventType.EVT\u CACHE\u OBJECT\u PUT);
IgniteCache cache=ignite.getOrCreateCache(“MyCache”);
贸易1=新贸易();
trade1.setId(1);
贸易1.设置尺寸(10);
cache.put(新的TradeKey(trade.getId()),trade1);
//事件已生成
//evt.oldValue为空,没有问题
trade1=cache.get(新交易密钥(1));//也可以是缓存上的查询或任何搜索
贸易1.设置尺寸(20);
cache.put(新的TradeKey(trade.getId()),trade1);
//事件已生成
//evt.oldValue().getSize()是20,evt.newValue().getSize()是20,这是错误的
有什么建议吗?
谢谢。

Apache Ignite用户论坛也讨论了这一点: