Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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
Java JCS由于ConcurrentModification而禁用辅助缓存_Java_Caching_Concurrentmodification_Jcs - Fatal编程技术网

Java JCS由于ConcurrentModification而禁用辅助缓存

Java JCS由于ConcurrentModification而禁用辅助缓存,java,caching,concurrentmodification,jcs,Java,Caching,Concurrentmodification,Jcs,我正在与jcs一起使用单个远程缓存服务器的多个客户端 此处显示服务器配置: registry.host=xx.xx.xx.xx registry.port=1104 remote.cache.service.port=1104 remote.cache.rmiSocketFactoryTimeoutMillis=5000 remote.cluster.LocalClusterConsistency=true remote.cluster.AllowClusterGet=true jcs.defa

我正在与jcs一起使用单个远程缓存服务器的多个客户端

此处显示服务器配置:

registry.host=xx.xx.xx.xx registry.port=1104

remote.cache.service.port=1104

remote.cache.rmiSocketFactoryTimeoutMillis=5000

remote.cluster.LocalClusterConsistency=true

remote.cluster.AllowClusterGet=true

jcs.default=DC

jcs.default.cacheattributes=org.apache.commons.jcs.engine.CompositeChatchAttributes jcs.default.cacheattributes.MaxObjects=100 jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=1800 jcs.default.cacheattributes.UseMemoryShrinker=true

jcs.default.elementattributes.IsEternal=false jcs.default.elementattributes=org.apache.commons.jcs.engine.elementattributes

jcs.auxiliary.DC=org.apache.commons.jcs.auxiliary.disk.indexediskcachefactory jcs.auxiliary.DC.attributes=org.apache.commons.jcs.auxiliary.disk.indexediskcacheattributes

DiskPath=/home/java/conf/data jcs.auxiliary.DC.attributes.MaxPurgatorySize=1000

jcs.auxiliary.DC.attributes.MaxKeySize=1000 jcs.auxiliary.DC.attributes.OptimizatRemoveCount=300 jcs.auxiliary.DC.attributes.OptimizationShutdown=true jcs.auxiliary.DC.attributes.ClearDiskOnStartup=true jcs.auxiliary.DC.attributes.DiskLimitType=SIZE

和客户端配置:

jcs.auxiliary.RC=org.apache.commons.jcs.auxiliary.remote.RemoteCacheFactory jcs.auxiliary.RC.attributes=org.apache.commons.jcs.auxiliary.remote.RemoteCacheAttributes jcs.auxiliary.RC.attributes.FailoverServers=xx.xx.xx.xx:1104 jcs.auxiliary.RC.attributes.RemoveUponRemotePut=false

jcs.auxiliary.RC.attributes.Receive=false jcs.auxiliary.RC.elementattributes.UseMemoryShrinker=true

客户机代码如下:

    public class JcsSharedCache<K, V> implements ICache<K, V> {
        private CompositeCache<K, V> internal;
        public void put(K key, V value) throws BeCacheException {
            try {
                synchronized(this){
                      internal.update(new CacheElement<>(internal.getCacheName(), key, value, internal.getElementAttributes()));
                 }
            } catch (Exception ex) {
                throw new BeCacheException(ex);
            }

        }
    }
公共类JcsSharedCache实现ICache{
私人合成车内部;
公共void put(K键,V值)抛出BeCacheException{
试一试{
已同步(此){
update(新的CacheElement(internal.getCacheName(),key,value,internal.getElementAttributes());
}
}捕获(例外情况除外){
抛出新的BeCacheException(ex);
}
}
}
有时,客户机会收到ConcurrentModificationException,jcs会禁用远程put。每个客户机都有一个同步版本的put,但在我看来,当两个客户机试图同时将某些内容放入同一个缓存时,就会发生这种情况

有没有办法避免这种行为

在堆栈跟踪下面:

2018-07-10 18:02:52远程缓存错误:141-由于 to错误:未能将[da4a81e6-85df-426a-b6f6-a5b6777b0891]放入 节点java.util.ConcurrentModificationException 位于java.util.HashMap$HashIterator.nextNode(HashMap.java:1442) 在java.util.HashMap$KeyIterator.next(HashMap.java:1466) 位于java.util.HashSet.writeObject(HashSet.java:287) 位于sun.reflect.GeneratedMethodAccessor135.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:498) 位于java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1128) 位于java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) 位于java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 位于java.io.ObjectOutputStream.WriteObject 0(ObjectOutputStream.java:1178) 位于java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 在java.util.HashMap.internalWriteEntries(HashMap.java:1790) 位于java.util.HashMap.writeObject(HashMap.java:1363) 位于sun.reflect.GeneratedMethodAccessor132.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:498) 位于java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1128) 位于java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) 位于java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 位于java.io.ObjectOutputStream.WriteObject 0(ObjectOutputStream.java:1178) 位于java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 位于java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 位于java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 位于java.io.ObjectOutputStream.WriteObject 0(ObjectOutputStream.java:1178) 位于java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 位于java.util.ArrayList.writeObject(ArrayList.java:766) 位于sun.reflect.GeneratedMethodAccessor128.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:498) 位于java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1128) 位于java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) 位于java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 位于java.io.ObjectOutputStream.WriteObject 0(ObjectOutputStream.java:1178) 位于java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 位于org.apache.commons.jcs.utils.serialization.StandardSerializer.serialize(StandardSerializer.java:55) 位于org.apache.commons.jcs.utils.serialization.SerializationConversionUtil.GetSerializationDCacheElement(SerializationConversionUtil.java:74) 位于org.apache.commons.jcs.auxiliary.remote.AbstractRemoteAuxilia