代码之家  ›  专栏  ›  技术社区  ›  Ittai

EHCache如何实现其事务?

  •  2
  • Ittai  · 技术社区  · 16 年前

    这个问题听起来可能很模糊,但我试图理解EHCache事务能力的一般概念。
    MyObject .
    EHCache是否克隆 肌体 如果这是作为交易的一部分进行的,我正在检索?

    question )使用EHCache,我担心它对性能的影响。 是一个中等重量的物体,我不想不必要地复制它。
    另外,为了验证,EHCache只阻止在事务中写入对象,对吧?


    伊泰

    1 回复  |  直到 9 年前
        1
  •  2
  •   Pascal Thivent    16 年前

    我认为以下部分是关于 JTA 支持回答大多数问题:

    使用JTA缓存

    全有或全无

    如果为JTA all启用了缓存 事务上下文,否则 TransactionRequiredException 将 扔了。

    Ehcache中提供的隔离级别 JTA是 READ_COMMITTED . Ehcache是 XAResource . 完整的两阶段提交是 支持。

    明确地:

    • 对缓存的所有更改都是事务性的 包括 put , remove , putWithWriter , removeWithWriter 和 removeAll .
    • 直到 COMMIT 已被呼叫。
    • 在此之前,请阅读 cache.get(...) 将退回旧的副本。 读不到 块

    后记后记

    如果正在使用启用XA的缓存 使用writer,写操作将 在事务提交之前排队 时间。完全是一种直截了当的方法 会有它潜在的XAResource 参与同一交易。 Write behind虽然受支持,但应该 可能不与XA一起使用 事务缓存,作为操作 永远不会是同一个的一部分 交易。你的作者也会 交易。。。

    对非XA使用Write-through 资源也会起作用,但是 不能保证交易会 写入操作完成后成功 另一方面,任何抛出的异常 在这些写操作期间 导致事务被滚动 通过拥有 UserTransaction.commit() 扔一个 RollbackException

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