当前位置: 首页 > 知识库问答 >
问题:

为什么hibernate 5.3不支持infinispan的事务缓存

刘丰羽
2023-03-14

尊敬的Infinispan社区

我在EAP和Spring部署中运行应用程序。将依赖项从EAP 7.1迁移到EAP 7.2后,我在spring模式下收到警告:hh025030:不支持事务缓存。配置选项将被忽略;在infinispan中使用事务标记时,请取消设置。xml-同样适用于本地缓存配置或无效缓存配置

<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>

我发现票证说EAP应该删除事务标签,但没有解释原因。我发现最接近的解释是在拉取请求infinispan!5900的评论中,其中说v53完全放弃了对事务缓存的支持。但为Hibernate 5.3.20留档。最终或5.4.28。最终没有提及任何相关内容,仍然列出了事务并发策略。

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

我的用例关心的是,在将行提交到数据库后,实体的2LC缓存是否会失效(行为类似于事务级读取提交的SQL查询)。若事务T1将版本V1中的实体更新为V2,则事务T2应继续使用实体V1,直到事务T1在DB中提交。如果事务T1回滚,那么触发缓存无效对我来说仍然很好,因为我不使用复制缓存,而是使用无效缓存。

我使用带有注释的实体org.hibernate.annotations。缓存(region=“my region”,用法=cacheconcurrentystrategy.TRANSACTIONAL)

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

TRANSACTIONAL策略使用XA资源在行提交到DB后清理缓存。

是否有留档或测试Infinispan如何在Hibernate2LC的边缘情况下表现?

版本:EAP 7.2/Spring 5. x-hibernate-core:5.3.15。最终红帽-00001,infinispan-hibernate-cache-v53:9.3.8。最终红帽-00001


共有1个答案

越胤
2023-03-14

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

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

对你有帮助吗?

 类似资料:
  • 问题内容: JTA为什么不支持嵌套事务?是因为实现它们的复杂性(我对此表示怀疑)还是某些设计原则? 问题答案: (正如@Piotr Nowicki指出的那样,JTA 确实 允许嵌套事务,但这不是强制性的可选操作。) 为什么?这是无法确定地回答的问题之一,除非您是做出决定时“在房间里”的人之一。 将嵌套事务作为规范的一部分包括在内可能是固有的复杂性。或当时明显的复杂性;即他们不知道他们知道如何做一个

  • 我们继续上一章节的内容,大家应该记得我们 Lua 代码中是如何完成 ngx_postgres 模块调用的。我们把他简单改造一下,让他更接近真实代码。 local json = require "cjson" function db_exec(sql_str) local res = ngx.location.capture('/postgres',

  • 我试图在JBoss EAP 7(或Wildfly 10)服务器上创建一个JDBC支持的Infinispan缓存。我的

  • 我们尝试使用infinispan作为带有读锁的远程缓存。客户通过“put”进行读取,以获得钥匙锁,正如悲观事务缓存“When cache.put(k1,v1)返回时”一节中所述的infinispan文档,k1被锁定,集群中任何地方运行的其他事务都无法对其进行写入。仍然可以读取k1。当事务完成(提交或回滚)时,k1上的锁被释放。因此,该场景: 远程缓存配置为具有悲观锁定的事务性缓存: 客户端正在使用

  • 本文向大家介绍为什么Java不支持<<相关面试题,主要包含被问及为什么Java不支持<<时的应答技巧和注意事项,需要的朋友参考一下 Java添加了运算符“ >>>”来执行逻辑右移,但是由于 逻辑和算术左移运算是相同的 ,因此Java中没有“ <<<”运算符。 来自Java的Shifts …

  • 我是K8s的新手,所以仍然试图让我的头脑周围的事情。我一直在研究部署,并能够理解它们将有多有用。但是,我不明白为什么它们不支持服务(只支持副本集和豆荚)。