我已经开始使用EHCache作为JTA UserTransaction中的事务性缓存(XAResource),至少在我的脑海里,我看到了一些有点奇怪的东西,我想了解我的“看到“是错的还是我的理解。
下面的代码将返回false
EHCache是否需要put()以便更改实例以反映(XA)?
ut = getUserTransaction();
ut.begin();
MyClass a = myChache.get(key).getValue();
a.changeSomeInnerReferrence(newRefference);
ut.commit();
ut = getUserTransaction();
ut.begin();
MyClass b = myChache.get(key).getValue();
ut.commit();
return a.equals(b);
假设MyClass
具有类型MyOtherClass
的构件和changeSomeInnerReferrence
改变从电流值于该参数的参考;还假定等于考虑到该成员。
我注意到,除非在ut.commit()
之前加上myChache.put(key,a)
,否则上面的代码将返回false
。
这是为什么?这是缓存的一般行为吗?我认为,一旦调用commit,更改内部引用就会传播到缓存中。
感谢,
以太
“一般规则是由cache.get(key)返回的元素的值是”这是缓存作为态度的一般规则吗? – Ittai 2011-02-09 12:54:30
我会这么说,虽然我想不出任何写下来的东西。没有它的价值使得缓存实现者的工作更加困难,因为它限制了他们如何处理他们的数据(持久性,并发性等)。出于这个原因,我认为这是一个例外,可以在cahce知道get()之后可靠地修改条目。 – sharakan 2011-02-09 14:04:42