Java EHCache如何实现其事务?
这个问题听起来可能很模糊,但我正试图理解EHCache事务处理能力的一般概念。Java EHCache如何实现其事务?,java,performance,transactions,ehcache,Java,Performance,Transactions,Ehcache,这个问题听起来可能很模糊,但我正试图理解EHCache事务处理能力的一般概念。 假设我将EHCache配置为内存缓存,并将其配置为缓存MyObject 如果这是作为事务的一部分进行的,EHCache是否克隆我正在检索的MyObject的实例 我之所以这么问,主要是因为(在回答我的问题时)有人建议我使用EHCache,我担心它对性能的影响MyObject是一个中等重量的对象,我不想不必要地复制它。 另外,为了验证,EHCache仅在事务中阻止对对象的写入,对吗 谢谢, Ittai我认为以下关于支持
假设我将EHCache配置为内存缓存,并将其配置为缓存
MyObject
如果这是作为事务的一部分进行的,EHCache是否克隆我正在检索的
MyObject
的实例
我之所以这么问,主要是因为(在回答我的问题时)有人建议我使用EHCache,我担心它对性能的影响MyObject
是一个中等重量的对象,我不想不必要地复制它。另外,为了验证,EHCache仅在事务中阻止对对象的写入,对吗 谢谢,
Ittai我认为以下关于支持的文档部分回答了您的大部分问题: 使用JTA缓存 要么全有,要么全无 如果为JTA all启用了缓存 对它的操作必须在一个时间内进行 事务上下文,否则为
TransactionRequiredException
将被删除
扔
更改可见性
Ehcache中提供的隔离级别
JTA是READ\u COMMITTED
。Ehcache是一个
XAResource
。完全两阶段提交是必要的
支持
具体而言:
- 缓存的所有变化都是事务性的,包括
,put
,remove
,putWithWriter
和removeWithWriter
removeAll
- 在集群之间或集群之间的本地JVM中看不到变化
直到调用了
COMMIT
- 在此之前,通过其他事务进行读取,例如通过
将返回旧副本读不懂 块cache.get(…)
UserTransaction.commit()
抛出一个
回滚异常
关于性能,我不会太担心,除非您的对象的重量为数百MB。但如果这真的是一个问题,请衡量(一如既往)。我猜EHCache到底是如何将其归入“非我的核心业务”类别的,这就是我将其外包的原因,因此这是最好的答案。谢谢。@Ittai好吧,我肯定倾向于同意这一点,这也是我最初建议使用现有解决方案的原因。如果您想降低价格,可以使用以下来源:)