我正在尝试使用基于 JGroups 的复制配置 EhCache,但是一旦将第一个元素添加到缓存中,我就会收到以下异常的日志:
12061 [Replication Thread] ERROR net.sf.ehcache.distribution.RMIAsynchronousCacheReplicator - Exception on flushing of replication queue: null. Continuing...
java.lang.NullPointerException
at net.sf.ehcache.distribution.RMISynchronousCacheReplicator.listRemoteCachePeers(RMISynchronousCacheReplicator.java:335)
at net.sf.ehcache.distribution.RMIAsynchronousCacheReplicator.flushReplicationQueue(RMIAsynchronousCacheReplicator.java:299)
at net.sf.ehcache.distribution.RMIAsynchronousCacheReplicator.replicationThreadMain(RMIAsynchronousCacheReplicator.java:119)
at net.sf.ehcache.distribution.RMIAsynchronousCacheReplicator.access$100(RMIAsynchronousCacheReplicator.java:57)
at net.sf.ehcache.distribution.RMIAsynchronousCacheReplicator$ReplicationThread.run(RMIAsynchronousCacheReplicator.java:371)
ehcache.xml 是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache
updateCheck="true"
monitoring="autodetect"
defaultTransactionTimeoutInSeconds="30"
dynamicConfig="true">
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
properties="jgroups.xml"
/>
<defaultCache
maxElementsInMemory="200"
eternal="false"
statistics="true"
timeToIdleSeconds="86400"
timeToLiveSeconds="86400"
overflowToDisk="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=true, replicateRemovals=true"
/>
<bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" />
</defaultCache>
</ehcache>
jgroups.xml
是这样的:
<?xml version='1.0'?>
<config>
<TCP start_port="7800" />
<TCPPING
timeout="3000"
initial_hosts="localhost[7800],localhost[7800]"
port_range="10"
num_initial_members="2" />
<VERIFY_SUSPECT timeout="1500" />
<pbcast.NAKACK
use_mcast_xmit="false"
gc_lag="100"
retransmit_timeout="300,600,1200,2400,4800"
discard_delivered_msgs="true" />
<pbcast.STABLE
stability_delay="1000"
desired_avg_gossip="50000"
max_bytes="400000" />
<pbcast.GMS
print_local_addr="true"
join_timeout="5000"
shun="false"
view_bundling="true" />
</config>
使用 jgroups 版本 2.8.1.GA、ehcache-core 版本 2.5.1、ehcache-jgroupsreplication 版本 1.5。
我究竟做错了什么?
更新:当我更改replicateAsynchronously=false
为时,出现以下异常:
Exception in thread "main" java.lang.NullPointerException
at net.sf.ehcache.distribution.RMISynchronousCacheReplicator.listRemoteCachePeers(RMISynchronousCacheReplicator.java:335)
at net.sf.ehcache.distribution.RMISynchronousCacheReplicator.replicatePutNotification(RMISynchronousCacheReplicator.java:145)
at net.sf.ehcache.distribution.RMISynchronousCacheReplicator.notifyElementPut(RMISynchronousCacheReplicator.java:132)
at net.sf.ehcache.event.RegisteredEventListeners.notifyListener(RegisteredEventListeners.java:294)
at net.sf.ehcache.event.RegisteredEventListeners.invokeListener(RegisteredEventListeners.java:284)
at net.sf.ehcache.event.RegisteredEventListeners.internalNotifyElementPut(RegisteredEventListeners.java:144)
at net.sf.ehcache.event.RegisteredEventListeners.notifyElementPut(RegisteredEventListeners.java:122)
at net.sf.ehcache.Cache.notifyPutInternalListeners(Cache.java:1515)
at net.sf.ehcache.Cache.putInternal(Cache.java:1490)
at net.sf.ehcache.Cache.put(Cache.java:1417)
at net.sf.ehcache.Cache.put(Cache.java:1382)
更新 2:问题是在 Terracota 的 JIRA 中创建的:https ://jira.terracotta.org/jira/browse/EHC-927