我将项目从8.2.4.Final迁移到Infinispan 9.1.0.Final并获得下一个例外:
org.infinispan.commons.CacheConfigurationException:ISPN000441:不支持的异步缓存模式' REPL_ASYNC'用于事务缓存
相关代码:
new ConfigurationBuilder()
.jmxStatistics()
.enabled(false)
.available(false)
.clustering()
.cacheMode(CacheMode.REPL_ASYNC)
.stateTransfer().awaitInitialTransfer(false)
.transaction()
.transactionManagerLookup(new DummyTransactionManagerLookup())
.transactionMode(TransactionMode.TRANSACTIONAL)
.lockingMode(LockingMode.PESSIMISTIC)
.recovery()
.enabled(false)
.invocationBatching()
.enable(false)
.indexing()
.index(Index.ALL)
.addProperty("default.indexmanager", "near-real-time")
.addProperty("default.directory_provider", "ram")
.addProperty("default.worker.execution", "sync")
.addProperty("default.exclusive_index_use", "true")
.addProperty("default.reader.strategy", "shared")
.build();
这里有问题组合,但在8.2.4.Final版本中这很有效。
.cacheMode(CacheMode.REPL_ASYNC)
.transactionMode(TransactionMode.TRANSACTIONAL) // Maybe is there another way to lock put operations?
我应该如何重新配置缓存以保存其特性?
答案 0 :(得分:2)
事务性缓存的异步模式不安全,因为它在向TransactionManager
报告之前没有等待事务在集群中的每个节点中提交。如果你不走运,它可能会使你的数据不一致。
为了避免任何问题,它已被删除。请升级您的配置以改为使用REPL_SYNC
。
此外,DummyTransactionManagerLookup
已弃用,应由EmbeddedTransactionManagerLookup
替换。
8.x和9.x之间还有其他与交易相关的变化。有关更多详细信息,请查看升级指南(http://infinispan.org/docs/stable/upgrading/upgrading.html#upgrading_from_8_x_to_9_0)。