【问题标题】:Distributed Ehcache working using JTA使用 JTA 工作的分布式 Ehcache
【发布时间】:2023-03-16 20:06:01
【问题描述】:

我正在尝试使用 Terracotta Ehcache(开源)对分布式事务内存进行一些基准测试。我在理解它与 JTA 的工作时遇到了一些问题。在代码中,我发现对分布式事务感兴趣的缓存将自己作为具有 JTA 的资源登记为 JTA 稍后在其上执行两阶段提交的资源。

我的问题是,如果只有一个缓存被列为资源,JTA 将如何能够在分布式设置中自动更新所有其他缓存?我们没有将其他缓存引用传递给 JTA,因此不会对它们进行原子更新。我觉得,我在这里遗漏了一些字符串,谁能解释它是如何工作的?我也是 J2EE 的新手,我是否错过了一些允许将其他缓存自动引用传递给 JTA 的 J2EE 概念?

【问题讨论】:

    标签: ehcache jta distributed-transactions distributed-caching terracotta


    【解决方案1】:

    试过 xa_strict 但似乎没有自动登记 XAResource?切换到普通 xa 工作虽然...

    【讨论】:

      【解决方案2】:

      使用transactionalMode="xa_strict" 配置并在 JTA 事务中更新的每个缓存都将自己注册为事务管理器的 XAResource。这对最终用户来说都是自动化和透明的,你不需要做任何特别的事情来启动这个机制,你只需要在 JTA 请求中使用你的缓存

      如果您还碰巧访问了 JTA 事务上下文中的其他非事务性缓存,则这些缓存不会成为事务的一部分,并且会在您修改它们后立即更新。

      【讨论】:

      • 非常感谢您的回复。我仍然不清楚它是如何工作的?我想了解它是如何自动完成的?如果您可以直接访问 Ehcache.org 以外的任何其他资源,它会有所帮助吗?只是重复一下如何在事务中获取资源,使整个集群更新。根据我的说法,应该将集群上的所有 Ehcache 纳入事务中,只应该进行全局事务。但是在 XATransactionStore 的代码中,我看到只有一个 ehcache 被征用在事务中。现在 JTA 或 terracotta 如何将所有其他集群注册为事务的一部分?
      【解决方案3】:

      如果以这种方式配置 Ehcache(transactionalMode="xa"transactionalMode="xa_strict"),则可以作为完整的 XAResource 参与 JTA 事务(全局事务),该事务由事务管理器(从您的应用程序服务器或某些独立的产品)。在这种情况下,Ehcache 本身负责在事务管理器中注册。此外,作为一个完整的 XAResource,可以注册多个缓存并且可以成为事务的一部分。

      强大的集群范围的一致性非常昂贵(没有免费的午餐)。它归结为使用锁和涉及等待、确认等的同步(网络)操作。

      如需更详细的阅读,我建议您查阅 Ehcache 文档:Transactions in Ehcache

      【讨论】:

      • 正如您所说:“作为一个完整的 XAResource,可以注册多个缓存并且可以成为事务的一部分”。我对这个注册过程有疑问。我想调用 enlistResource() 会使任何资源成为事务的一部分。现在,当我看到 Ehcache 代码时,我发现只有一个资源在启动事务时被 XAStore 中的缓存登记。它只登记自己,而不是其他也应该自动更新的缓存。现在我的问题是通过仅征用一个资源如何使该事务在整个集群上执行。 terracotta 或 JTA 在内部做些什么?什么?
      • @Codifier:事务管理器负责管理事务的资源。如果您的缓存是分布式缓存(Terracotta 集群缓存),那么 Ehcache/Terracatta(内部)负责使缓存操作显示为原子操作(在整个集群上)。详情请见ehcache.org/documentation/terracotta/…。征用资源的一个缓存只是集群缓存的一个代表。
      • 非常感谢jeha,这澄清了它。只是一点,如果Terracotta已经提供了原子性,为什么还要使用JTA,只是为了事务恢复?
      • @Codifier:在这种情况下,Terracotta 只负责缓存本身。在 JTA 事务中,可能涉及处理多个 (XA) 资源(数据库、jms、缓存...),所有这些资源都必须针对分布式原子事务进行协调。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 2023-03-16
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多