我已经开始使用 EHCache 作为 JTA UserTransaction 中的事务缓存(XAResource),我看到的东西有点奇怪,至少在我看来,我想了解我的“看到”是否错误或者我的理解。
以下代码将返回false
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
将引用从当前值更改为参数;还假设 equals 考虑了该成员。
我注意到,除非我在上面的代码myChache.put(key,a)
之前添加,否则ut.commit()
将返回false
.
这是为什么?这是缓存的一般行为吗?我认为一旦调用提交,更改内部引用就会传播到缓存中。
谢谢,
伊泰