gpt4 book ai didi

java - 使用 RMI 缓存复制器时出现 EhCache 死锁问题

转载 作者:行者123 更新时间:2023-11-30 11:19:27 24 4
gpt4 key购买 nike

我的应用程序在使用 RMI 缓存复制器策略时遇到了缓存死锁问题。以下是异常日志:

net.sf.ehcache.transaction.DeadLockException: deadlock detected in cache [abcCache] on key [1] between current transaction [139003] and foreign transaction [138998]

at net.sf.ehcache.transaction.local.LocalTransactionStore.put(LocalTransactionStore.java:200)
at net.sf.ehcache.transaction.local.JtaLocalTransactionStore.put(JtaLocalTransactionStore.java:268)
at net.sf.ehcache.Cache.putInternal(Cache.java:1434)
at net.sf.ehcache.Cache.put(Cache.java:1367)
at net.sf.ehcache.Cache.put(Cache.java:1339)

以下是我使用 RMI 同步的 ehcache 配置:

<transactionManagerLookup
class="net.sf.ehcache.transaction.manager.DefaultTransactionManagerLookup"
properties="jndiName=java:comp/UserTransaction" propertySeparator=";"/>

<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=automatic, multicastGroupAddress=x.x.x.x, multicastGroupPort=xxxx, timeToLive=32"/>

<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="port=40001, socketTimeoutMillis=2000"/>

<cache
name="abcCache"
maxElementsInMemory="100"
eternal="false"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="0"
timeToLiveSeconds="86400"
memoryStoreEvictionPolicy="LRU"
transactionalMode="xa">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicatePuts=true, replicateUpdates=true, replicateRemovals=true, replicateUpdatesViaCopy=false, replicateAsynchronously=true, asynchronousReplicationIntervalMillis=500"/>
</cache>

我正在使用 ehcache-core ver 2.4.3。感谢任何帮助。

最佳答案

这可能不是您正在寻找的答案,但 RMI 复制和事务缓存不同时受支持。现在,死锁的原因不一定是 RMI 复制。您可以在此处阅读不同的交易模式:http://ehcache.org/documentation/apis/transactions但基本上,除了在 xa_strict 环境中,您可能会得到这些。因此,如果这是您不愿意支付的价格,您需要确保所有交易在超时之前设法访问一个条目(即长时间超时会解决您的问题)。如果 xa 和本地事务缓存无法在该超时期限内“锁定”该条目,则会抛出异常,因为它当前已被另一个事务/线程锁定。希望这是有道理的。

关于java - 使用 RMI 缓存复制器时出现 EhCache 死锁问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23213728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com