为什么hibernate 5.3不支持infinispan的事务性缓存
亲爱的英菲尼斯潘社区 我在EAP和Spring部署中运行应用程序。将依赖项从EAP 7.1迁移到EAP 7.2后,我在spring模式下收到警告:为什么hibernate 5.3不支持infinispan的事务性缓存,hibernate,infinispan,second-level-cache,Hibernate,Infinispan,Second Level Cache,亲爱的英菲尼斯潘社区 我在EAP和Spring部署中运行应用程序。将依赖项从EAP 7.1迁移到EAP 7.2后,我在spring模式下收到警告:hh025030:不支持事务缓存。配置选项将被忽略;在infinispan.xml中使用事务标记时,请取消设置——这同样适用于本地缓存配置或无效缓存配置 <local-cache-configuration name="my-region"> <transaction mode="NON_DURA
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应该删除事务标记,但没有解释原因。
我找到的最贴切的解释是pull-request的注释,其中说v53完全放弃了对事务性缓存的支持。
但是Hibernate或的文档没有提到任何相关内容,仍然列出了事务性并发策略
Infinispan配置不支持事务标记对hibernate 2LC有什么影响
我的用例关心的是,在行被提交到数据库中之后,实体的2LC缓存是否会失效(行为类似于事务级别为read committed的SQL查询)。若事务T1将版本V1中的实体更新为V2,则事务T2应继续使用实体V1,直到事务T1在DB中提交。若事务T1回滚,那个么触发缓存失效对我来说仍然很好,因为我不使用复制缓存,而是使用失效缓存
我使用带有注释的实体org.hibernate.annotations.Cache(region=“my region”,usage=cacheconcurrentystrategy.TRANSACTIONAL)
在这种情况下,我应该使用哪种并发策略,以及如何配置Infinispan缓存
CacheConcurrentyStrategy.TRANSACTIONAL策略是否在行提交到数据库后使用XA资源清理缓存
是否有文档或测试Infinispan在hibernate 2LC的这种边缘情况下的行为
版本:EAP 7.2/Spring 5.x-hibernate核心:5.3.15.Final-redhat-00001,infinispan-hibernate-cache-v53:9.3.8.Final-redhat-00001我不熟悉hibernate 2LC集成。说明(链接中有完整的上下文):
这对你有帮助吗?谢谢@pruivo我看了各种文档,但错过了那个部分。我相信缓存失效发生在DB commit之后触发的某个hibernate侦听器上,我很乐意找到文档——它显示了陈旧读非严格读写的示例,但最好了解读写是如何防止这种情况的(应该更严格)。我会把这个问题留一段时间,看看是否有人有什么要补充的。这个链接说“Hibernate只支持JDBC事务”-但Hibernate可以使用XA DB connection与XA JMS connection一起工作,但通常不会提到2LC在这种设置中配置为XA模式。@kodstark注意事项适用于Hibernate<5.3仅,并表示当Hibernate使用仅JDBC事务时,不应使用事务性Infinispan缓存。
Infinispan provides the same consistency guarantees for both transactional and read-write strategies, use of transactions is considered an implementation detail.