我将Ehcache缓存实例配置为transactionalMode="local"
现在,当我尝试在交易之外的所述缓存中放置一个元素时,我得到了
net.sf.ehcache.transaction.TransactionException: transaction not started
。
这是否意味着事务性缓存实例上的每个调用都需要在事务上下文中? 我在启动时正在做一些自定义缓存预加载,我不希望Ehcache事务(和copyOnRead / Write)开销。此外,由于我将处理逻辑上不可变的对象,我希望能够在没有事务范围的情况下从缓存中读取它们,如果可能的话。
答案 0 :(得分:1)
你真的需要首先使用本地交易吗?即,您是否需要在一次操作中原子地放置多个缓存条目? 在任何情况下,如果你使用transactionalMode =“local”,你就不得不在事务边界内执行所有缓存操作(甚至读取)
但是如果您需要更多粒度,我建议您查看ehcache显式锁定,它可以用作XA事务或本地事务的自定义替代(无需在您的ehcache配置中指定transactionalMode)。更多http://ehcache.org/documentation/apis/explicitlocking
希望有所帮助。