我已經開始使用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