2013-08-05 98 views
1

非事務方面,我具有了Ehcache緩存實例配置爲transactionalMode="local"
現在,當我試圖把一個元素在所述高速緩存中的事務之外,我得到
net.sf.ehcache.transaction.TransactionException: transaction not started的Ehcache與事務緩存

這是否意味着在事務緩存實例每次調用需要在一個事務上下文?
我在啓動時正在做一些自定義高速緩存預加載,並且我不希望Ehcache事務(和copyOnRead/Write)開銷。此外,因爲我將處理邏輯上不可變的對象,所以我希望能夠在沒有事務範圍的情況下從緩存中讀取它們(如果可能的話)。

回答

1

你真的需要擺在首位,以使用本地事務?即,您是否需要在單個操作中原子地放置多個緩存條目?在任何情況下,如果你使用transactionalMode =「local」,你就不得不在事務邊界內執行所有的緩存操作(甚至讀取)

但是,如果你需要更多的粒度,你看看ehcache顯式鎖定,它可以用作XA事務或本地事務的自定義替代(不必在ehcache配置中指定transactionalMode)。更多在http://ehcache.org/documentation/apis/explicitlocking

希望有所幫助。

+1

我需要某種形式的全球交易,不全面的JTA。這就是爲什麼我最感興趣的是本地事務的回滾機制。萬一「全局事務」失敗,我只需回滾所有緩存更改。是的,我正在處理需要保持一致的多個緩存級別。所以鎖定會從隔離的角度來派上用場,但看起來我仍然需要自己實現回滾,對吧? – cbaby