問題タブ [jcs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
269 参照

java - JCS ConcurrentModification による補助キャッシュの無効化

私は 1 つのリモート キャッシュ サーバーの複数のクライアントで 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.CompositeCacheAttributes 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.indexed.IndexedDiskCacheFactory jcs.auxiliary.DC.attributes=org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes

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

jcs.auxiliary.DC.attributes.MaxKeySize=1000 jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300 jcs.auxiliary.DC.attributes.OptimizeOnShutdown=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

クライアントコードは次のとおりです。

クライアントが ConcurrentModificationException を取得し、jcs がリモート put を無効にすることがあります。すべてのクライアントには同期されたバージョンの put がありましたが、これは (私の意見では) 2 つのクライアントが同じキャッシュに同時に何かを入れようとしたときに発生します。

この動作を回避する方法はありますか?

スタック トレースの下:

2018-07-10 18:02:52 ERROR RemoteCache:141 - エラーによるリモート キャッシュの無効化: [da4a81e6-85df-426a-b6f6-a5b6777b0891] をノードに配置できませんでした java.util.ConcurrentModificationException at java.util.HashMap$ java.util.HashMap$KeyIterator.next(HashMap.java:1466) で HashIterator.nextNode(HashMap.java:1442)、sun.reflect.GeneratedMethodAccessor135.invoke で java.util.HashSet.writeObject(HashSet.java:287) で(ソース不明) java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1128) で、sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) で java.lang.reflect.Method.invoke(Method.java:498) で) java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) で java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) で java.io.ObjectOutputStream.writeObject0(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.writeObject0(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.writeObject0(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 で。java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) で java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) で java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java) で invokeWriteObject(ObjectStreamClass.java:1128) :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.getSerializedCacheElement(SerializationConversionUtil.java:74) org.apache.commons.jcs.auxiliary.remote.AbstractRemoteAuxiliaryCache.processUpdate(AbstractRemoteAuxiliaryCache.java:421) org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheEventLogging.updateWithEventLogging(AbstractAuxiliaryCacheEventLogging.java:65) org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheEventLogging.update(AbstractAuxiliaryCacheEventLogging.java:50) org.apache.commons.jcs.engine.CacheAdaptor.handlePut(CacheAdaptor.java: 96) org.apache.commons.jcs.engine.AbstractCacheEventQueue$PutEvent.doRun(AbstractCacheEventQueue.java:362) で org.apache.commons.jcs.engine.AbstractCacheEventQueue$AbstractCacheEvent.run(AbstractCacheEventQueue.java:281) で org .apache.commons.jcs.engine.CacheEventQueue$QProcessor.run(CacheEventQueue.java:228)50) org.apache.commons.jcs.engine.CacheAdaptor.handlePut(CacheAdaptor.java:96) で org.apache.commons.jcs.engine.AbstractCacheEventQueue$PutEvent.doRun(AbstractCacheEventQueue.java:362) で org.apache .commons.jcs.engine.AbstractCacheEventQueue$AbstractCacheEvent.run(AbstractCacheEventQueue.java:281) at org.apache.commons.jcs.engine.CacheEventQueue$QProcessor.run(CacheEventQueue.java:228)50) org.apache.commons.jcs.engine.CacheAdaptor.handlePut(CacheAdaptor.java:96) で org.apache.commons.jcs.engine.AbstractCacheEventQueue$PutEvent.doRun(AbstractCacheEventQueue.java:362) で org.apache .commons.jcs.engine.AbstractCacheEventQueue$AbstractCacheEvent.run(AbstractCacheEventQueue.java:281) at org.apache.commons.jcs.engine.CacheEventQueue$QProcessor.run(CacheEventQueue.java:228)228)228)