Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么hibernate 5.3不支持infinispan的事务性缓存_Hibernate_Infinispan_Second Level Cache - Fatal编程技术网

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

为什么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

亲爱的英菲尼斯潘社区

我在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应该删除事务标记,但没有解释原因。 我找到的最贴切的解释是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.