Java EHCache如何实现其事务?

Java EHCache如何实现其事务?,java,performance,transactions,ehcache,Java,Performance,Transactions,Ehcache,这个问题听起来可能很模糊,但我正试图理解EHCache事务处理能力的一般概念。 假设我将EHCache配置为内存缓存,并将其配置为缓存MyObject 如果这是作为事务的一部分进行的,EHCache是否克隆我正在检索的MyObject的实例 我之所以这么问,主要是因为(在回答我的问题时)有人建议我使用EHCache,我担心它对性能的影响MyObject是一个中等重量的对象,我不想不必要地复制它。 另外,为了验证,EHCache仅在事务中阻止对对象的写入,对吗 谢谢, Ittai我认为以下关于支持

这个问题听起来可能很模糊,但我正试图理解EHCache事务处理能力的一般概念。
假设我将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(…)
    将返回旧副本读不懂 块
后记 如果正在使用启用XA的缓存 对于writer,写操作将 等待事务提交 时间完全是一种写通方法 将有其潜在的资源 参与同一交易。 虽然支持写在后面,但应该 可能不能与XA一起使用 事务缓存,如操作 永远不会是同一个世界的一部分 交易你的作者也会 负责获取新的 交易

对非XA使用直写 资源也会起作用,但确实存在 不保证交易会成功 写入操作完成后成功 已成功执行。上 另一方面,任何抛出的异常 在这些写操作期间 使事务滚动 回来
UserTransaction.commit()
抛出一个
回滚异常


关于性能,我不会太担心,除非您的对象的重量为数百MB。但如果这真的是一个问题,请衡量(一如既往)。

我猜EHCache到底是如何将其归入“非我的核心业务”类别的,这就是我将其外包的原因,因此这是最好的答案。谢谢。@Ittai好吧,我肯定倾向于同意这一点,这也是我最初建议使用现有解决方案的原因。如果您想降低价格,可以使用以下来源:)