Index: src/main/java/org/infinispan/atomic/AtomicHashMapProxy.java =================================================================== --- src/main/java/org/infinispan/atomic/AtomicHashMapProxy.java (revision 2382) +++ src/main/java/org/infinispan/atomic/AtomicHashMapProxy.java (working copy) @@ -28,6 +28,7 @@ import org.infinispan.context.Flag; import org.infinispan.context.InvocationContext; import org.infinispan.context.InvocationContextContainer; +import org.infinispan.marshall.MarshalledValue; import org.infinispan.util.logging.Log; import org.infinispan.util.logging.LogFactory; @@ -68,15 +69,21 @@ this.icc = icc; } + private AtomicHashMap toMap(Object object) + { + Object map = (object instanceof MarshalledValue) ? ((MarshalledValue) object).get() : object; + return (AtomicHashMap) map; + } + // internal helper, reduces lots of casts. private AtomicHashMap getDeltaMapForRead() { - return (AtomicHashMap) cache.get(deltaMapKey); + return toMap(cache.get(deltaMapKey)); } private AtomicHashMap getDeltaMapForWrite(InvocationContext ctx) { CacheEntry lookedUpEntry = ctx.lookupEntry(deltaMapKey); boolean lockedAndCopied = lookedUpEntry != null && lookedUpEntry.isChanged() && - ((AtomicHashMap) lookedUpEntry.getValue()).copied; + toMap(lookedUpEntry.getValue()).copied; if (lockedAndCopied) { return getDeltaMapForRead();