1

我将 Ehcache 缓存实例配置为transactionalMode="local".
现在,当我尝试将一个元素放入事务之外的所述缓存中时,我得到
net.sf.ehcache.transaction.TransactionException: transaction not started.

这是否意味着对事务缓存实例的每次调用都需要在事务上下文中?
我在启动时进行了一些自定义缓存预加载,并且我不希望 Ehcache 事务(和 copyOnRead/Write)开销。此外,由于我将处理逻辑上不可变的对象,因此如果可能的话,我希望能够在没有事务范围的情况下从缓存中读取它们。

4

1 回答 1

1

你真的需要首先使用本地事务吗?即您是否需要在一个操作中原子地放置多个缓存条目?在任何情况下,如果您使用 transactionalMode="local",您将不得不在事务边界内执行所有缓存操作(甚至读取)

但是,如果您需要更多粒度,我建议您查看 ehcache 显式锁定,它可以用作 XA 事务或本地事务的自定义替代方案(无需在 ehcache 配置中指定 transactionalMode)。更多信息请访问http://ehcache.org/documentation/apis/explicitlocking

希望有帮助。

于 2013-08-06T03:36:17.850 回答