【问题标题】:Why does hibernate 5.3 not support transactional caches with infinispan为什么休眠 5.3 不支持带有 infinispan 的事务缓存
【发布时间】:2021-05-25 00:24:02
【问题描述】:

亲爱的 Infinispan 社区

我在 EAP 和 Spring 部署中运行应用程序。在将依赖项从 EAP 7.1 迁移到 EAP 7.2 后,我在 spring 模式下收到警告:HHH025030: Transactional caches are not supported. The configuration option will be ignored; please unset 在 infinispan.xml 中使用事务标签时 - 这同样适用于 local-cache-configuration 或 invalidation-cache-configuration

<local-cache-configuration name="my-region">
    <transaction mode="NON_DURABLE_XA" transaction-manager-lookup="org.infinispan.transaction.lookup.JBossStandaloneJTAManagerLookup"/>
    <expiration ... />
    <memory>
        <object size="..." strategy="LRU" />
    </memory>
</local-cache-configuration>

<!-- OR -->

<invalidation-cache-configuration name="my-region">
    <locking concurrency-level="32" acquire-timeout="15000"/>
    <transaction mode="NON_DURABLE_XA" transaction-manager-lookup="org.infinispan.transaction.lookup.JBossStandaloneJTAManagerLookup"/>
    <expiration ... />
    <memory>
        <object size="..." strategy="LRU" />
    </memory>
</invalidation-cache-configuration>

我发现ticket 说 EAP 应该删除交易标签,但没有解释原因。 我找到的最接近的解释是在拉取请求 infinispan!5900 的评论中,上面写着 v53 drops support for transactional caches completely.,但 Hibernate 5.3.20.Final5.4.28.Final 的文档没有提及任何相关内容,仍然列出了事务并发策略。

Infinispan 配置不支持事务标签对 hibernate 2LC 有什么影响?

我的用例关心实体的 2LC 缓存是否在 行被提交到 DB 之后失效(表现得像事务级别读取提交的 SQL 查询)。如果事务 T1 将版本 V1 中的实体更新到 V2,则事务 T2 应继续使用实体 V1,直到事务 T1 在 DB 中提交。如果事务 T1 回滚,那么触发缓存失效对我来说仍然没问题,因为我不使用复制缓存,而是使用失效缓存。

我使用带有注释org.hibernate.annotations.Cache(region = "my-region", usage = CacheConcurrencyStrategy.TRANSACTIONAL)的实体。

在这种情况下我应该使用哪种并发策略以及如何配置 Infinispan 缓存?

CacheConcurrencyStrategy.TRANSACTIONAL 策略是否使用 XA 资源在行被提交到 DB 之后清理缓存。

是否有文档或测试 Infinispan 在 hibernate 2LC 的这种边缘情况下的行为?

版本:EAP 7.2 / Spring 5.x - hibernate-core:5.3.15.Final-redhat-00001, infinispan-hibernate-cache-v53:9.3.8.Final-redhat-00001

【问题讨论】:

    标签: hibernate infinispan second-level-cache


    【解决方案1】:

    我不熟悉 Hibernate 2LC 集成。 Infinispan documentation 说(链接中有完整的上下文):

    Infinispan provides the same consistency guarantees for both transactional and read-write strategies, use of transactions is considered an implementation detail.
    

    对你有帮助吗?

    【讨论】:

    • 感谢@pruivo 我浏览了各种文档,但错过了该部分。我相信缓存失效发生在数据库提交后触发的一些休眠侦听器上,我很高兴找到文档 - 它显示了陈旧读取非严格读写的示例,但最好了解读写如何防止这种情况(这是应该更严格)。我会将这个问题留待一段时间,看看是否有人要补充。
    • 该链接显示“Hibernate 支持仅 JDBC 事务” - 但 hibernate 可以使用 XA DB 连接与 XA JMS 连接一起工作,但通常没有提到在此类设置中以 XA 模式配置 2LC。
    • @kodstark 该注释仅适用于 Hibernate
    • @DanBerindei 这是否意味着如果 Hibernate 5.3 配置为与 JMS 一起工作的 XA 数据源,我应该期望“HHH025030:不支持事务缓存”这一行不会出现在日志中?
    • @kodstark 我只是在谈论那条注释,上面写着“仅在 JTA 环境中才能使用事务缓存。Hibernate 支持仅 JDBC 事务,但 Infinispan 事务缓存不与这些集成。”这意味着事务缓存在 Hibernate
    猜你喜欢
    • 2023-03-03
    • 2015-11-07
    • 2017-12-31
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2012-04-30
    相关资源
    最近更新 更多