[infinispan-commits] Infinispan SVN: r234 - trunk/core/src/main/java/org/infinispan/marshall.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Fri May 8 07:37:23 EDT 2009
Author: manik.surtani at jboss.com
Date: 2009-05-08 07:37:23 -0400 (Fri, 08 May 2009)
New Revision: 234
Modified:
trunk/core/src/main/java/org/infinispan/marshall/MarshallerImpl.java
Log:
Improved marshaller
Modified: trunk/core/src/main/java/org/infinispan/marshall/MarshallerImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/MarshallerImpl.java 2009-05-08 11:36:59 UTC (rev 233)
+++ trunk/core/src/main/java/org/infinispan/marshall/MarshallerImpl.java 2009-05-08 11:37:23 UTC (rev 234)
@@ -26,8 +26,13 @@
import org.infinispan.commands.RemoteCommandFactory;
import org.infinispan.commands.ReplicableCommand;
import org.infinispan.commands.write.WriteCommand;
+import org.infinispan.container.entries.ImmortalCacheEntry;
import org.infinispan.container.entries.InternalCacheEntry;
+import org.infinispan.container.entries.InternalCacheValue;
import org.infinispan.container.entries.InternalEntryFactory;
+import org.infinispan.container.entries.MortalCacheEntry;
+import org.infinispan.container.entries.TransientCacheEntry;
+import org.infinispan.container.entries.TransientMortalCacheEntry;
import org.infinispan.io.ByteBuffer;
import org.infinispan.io.ExposedByteArrayOutputStream;
import org.infinispan.remoting.responses.ExceptionResponse;
@@ -94,14 +99,23 @@
protected static final int MAGICNUMBER_SINGLETON_LIST = 23;
protected static final int MAGICNUMBER_COMMAND = 24;
protected static final int MAGICNUMBER_TRANSACTION_LOG = 25;
- protected static final int MAGICNUMBER_INTERNAL_CACHED_ENTRY = 26;
+ // --- cache entries and values ---
+ protected static final int MAGICNUMBER_ICE_IMMORTAL = 26;
+ protected static final int MAGICNUMBER_ICE_MORTAL = 27;
+ protected static final int MAGICNUMBER_ICE_TRANSIENT = 28;
+ protected static final int MAGICNUMBER_ICE_TRANSIENT_MORTAL = 29;
+ protected static final int MAGICNUMBER_ICV_IMMORTAL = 30;
+ protected static final int MAGICNUMBER_ICV_MORTAL = 31;
+ protected static final int MAGICNUMBER_ICV_TRANSIENT = 32;
+ protected static final int MAGICNUMBER_ICV_TRANSIENT_MORTAL = 33;
+
// ---- responses
- protected static final int MAGICNUMBER_REQUEST_IGNORED_RESPONSE = 27;
- protected static final int MAGICNUMBER_EXTENDED_RESPONSE = 28;
- protected static final int MAGICNUMBER_EXCEPTION_RESPONSE = 29;
- protected static final int MAGICNUMBER_SUCCESSFUL_RESPONSE = 30;
- protected static final int MAGICNUMBER_UNSUCCESSFUL_RESPONSE = 31;
+ protected static final int MAGICNUMBER_REQUEST_IGNORED_RESPONSE = 34;
+ protected static final int MAGICNUMBER_EXTENDED_RESPONSE = 35;
+ protected static final int MAGICNUMBER_EXCEPTION_RESPONSE = 36;
+ protected static final int MAGICNUMBER_SUCCESSFUL_RESPONSE = 37;
+ protected static final int MAGICNUMBER_UNSUCCESSFUL_RESPONSE = 38;
protected static final int MAGICNUMBER_NULL = 99;
protected static final int MAGICNUMBER_SERIALIZABLE = 100;
@@ -173,19 +187,9 @@
} else if (o instanceof Response) {
marshallResponse((Response) o, out, refMap);
} else if (o instanceof InternalCacheEntry) {
- out.writeByte(MAGICNUMBER_INTERNAL_CACHED_ENTRY);
- InternalCacheEntry ice = (InternalCacheEntry) o;
- marshallObject(ice.getKey(), out, refMap);
- marshallObject(ice.getValue(), out, refMap);
- if (ice.canExpire()) {
- out.writeBoolean(true);
- writeUnsignedLong(out, ice.getCreated());
- out.writeLong(ice.getLifespan()); // could be negative so should not use unsigned longs
- writeUnsignedLong(out, ice.getLastUsed());
- out.writeLong(ice.getMaxIdle()); // could be negative so should not use unsigned longs
- } else {
- out.writeBoolean(false);
- }
+ marshallInternalCacheEntry((InternalCacheEntry) o, out, refMap);
+ } else if (o instanceof InternalCacheValue) {
+ marshallInternalCacheValue((InternalCacheValue) o, out, refMap);
} else if (o.getClass().equals(ArrayList.class)) {
out.writeByte(MAGICNUMBER_ARRAY_LIST);
marshallCollection((Collection) o, out, refMap);
@@ -252,7 +256,65 @@
}
}
+ private void marshallInternalCacheEntry(InternalCacheEntry ice, ObjectOutput out, Map<Object, Integer> refMap) throws IOException {
+ if (ice.getClass().equals(ImmortalCacheEntry.class)) {
+ out.writeByte(MAGICNUMBER_ICE_IMMORTAL);
+ marshallObject(ice.getKey(), out, refMap);
+ marshallObject(ice.getValue(), out, refMap);
+ } else if (ice.getClass().equals(MortalCacheEntry.class)) {
+ out.writeByte(MAGICNUMBER_ICE_MORTAL);
+ marshallObject(ice.getKey(), out, refMap);
+ marshallObject(ice.getValue(), out, refMap);
+ writeUnsignedLong(out, ice.getCreated());
+ out.writeLong(ice.getLifespan()); // could be negative so should not use unsigned longs
+
+ } else if (ice.getClass().equals(TransientCacheEntry.class)) {
+ out.writeByte(MAGICNUMBER_ICE_TRANSIENT);
+ marshallObject(ice.getKey(), out, refMap);
+ marshallObject(ice.getValue(), out, refMap);
+ writeUnsignedLong(out, ice.getLastUsed());
+ out.writeLong(ice.getMaxIdle()); // could be negative so should not use unsigned longs
+
+ } else if (ice.getClass().equals(TransientMortalCacheEntry.class)) {
+ out.writeByte(MAGICNUMBER_ICE_TRANSIENT_MORTAL);
+ marshallObject(ice.getKey(), out, refMap);
+ marshallObject(ice.getValue(), out, refMap);
+ writeUnsignedLong(out, ice.getCreated());
+ out.writeLong(ice.getLifespan()); // could be negative so should not use unsigned longs
+ writeUnsignedLong(out, ice.getLastUsed());
+ out.writeLong(ice.getMaxIdle()); // could be negative so should not use unsigned longs
+ }
+ }
+
+ private void marshallInternalCacheValue(InternalCacheValue icv, ObjectOutput out, Map<Object, Integer> refMap) throws IOException {
+ if (icv.getClass().equals(ImmortalCacheEntry.class)) {
+ out.writeByte(MAGICNUMBER_ICV_IMMORTAL);
+ marshallObject(icv.getValue(), out, refMap);
+
+ } else if (icv.getClass().equals(MortalCacheEntry.class)) {
+ out.writeByte(MAGICNUMBER_ICV_MORTAL);
+ marshallObject(icv.getValue(), out, refMap);
+ writeUnsignedLong(out, icv.getCreated());
+ out.writeLong(icv.getLifespan()); // could be negative so should not use unsigned longs
+
+ } else if (icv.getClass().equals(TransientCacheEntry.class)) {
+ out.writeByte(MAGICNUMBER_ICV_TRANSIENT);
+ marshallObject(icv.getValue(), out, refMap);
+ writeUnsignedLong(out, icv.getLastUsed());
+ out.writeLong(icv.getMaxIdle()); // could be negative so should not use unsigned longs
+
+ } else if (icv.getClass().equals(TransientMortalCacheEntry.class)) {
+ out.writeByte(MAGICNUMBER_ICV_TRANSIENT_MORTAL);
+ marshallObject(icv.getValue(), out, refMap);
+ writeUnsignedLong(out, icv.getCreated());
+ out.writeLong(icv.getLifespan()); // could be negative so should not use unsigned longs
+ writeUnsignedLong(out, icv.getLastUsed());
+ out.writeLong(icv.getMaxIdle()); // could be negative so should not use unsigned longs
+ }
+ }
+
+
protected void marshallString(String s, ObjectOutput out) throws IOException {
//StringUtil.saveString(out, s);
out.writeObject(s);
@@ -385,19 +447,16 @@
MarshalledValue mv = new MarshalledValue();
mv.readExternal(in);
return mv;
- case MAGICNUMBER_INTERNAL_CACHED_ENTRY:
- Object k = unmarshallObject(in, refMap);
- Object v = unmarshallObject(in, refMap);
- boolean canExpire = in.readBoolean();
- if (canExpire) {
- long created = readUnsignedLong(in);
- long lifespan = in.readLong(); // could be negative so should not use unsigned longs
- long lastUsed = readUnsignedLong(in);
- long maxIdle = in.readLong(); // could be negative so should not use unsigned longs
- return InternalEntryFactory.create(k, v, created, lifespan, lastUsed, maxIdle);
- } else {
- return InternalEntryFactory.create(k, v);
- }
+ case MAGICNUMBER_ICE_IMMORTAL:
+ case MAGICNUMBER_ICE_MORTAL:
+ case MAGICNUMBER_ICE_TRANSIENT:
+ case MAGICNUMBER_ICE_TRANSIENT_MORTAL:
+ return unmarshallInternalCacheEntry(magicNumber, in, refMap);
+ case MAGICNUMBER_ICV_IMMORTAL:
+ case MAGICNUMBER_ICV_MORTAL:
+ case MAGICNUMBER_ICV_TRANSIENT:
+ case MAGICNUMBER_ICV_TRANSIENT_MORTAL:
+ return unmarshallInternalCacheValue(magicNumber, in, refMap);
case MAGICNUMBER_REQUEST_IGNORED_RESPONSE:
case MAGICNUMBER_EXTENDED_RESPONSE:
case MAGICNUMBER_EXCEPTION_RESPONSE:
@@ -465,6 +524,49 @@
throw new IOException("Unknown magic number " + magicNumber);
}
+ private InternalCacheEntry unmarshallInternalCacheEntry(byte magic, ObjectInput in, UnmarshalledReferences refMap) throws IOException, ClassNotFoundException {
+ Object k = unmarshallObject(in, refMap);
+ Object v = unmarshallObject(in, refMap);
+ switch (magic) {
+ case MAGICNUMBER_ICE_IMMORTAL:
+ return InternalEntryFactory.create(k, v);
+ case MAGICNUMBER_ICE_MORTAL:
+ return InternalEntryFactory.create(k, v,
+ readUnsignedLong(in), (Long) unmarshallObject(in, refMap),
+ -1, -1);
+ case MAGICNUMBER_ICE_TRANSIENT:
+ return InternalEntryFactory.create(k, v,
+ -1, -1,
+ readUnsignedLong(in), (Long) unmarshallObject(in, refMap));
+ case MAGICNUMBER_ICE_TRANSIENT_MORTAL:
+ return InternalEntryFactory.create(k, v,
+ readUnsignedLong(in), (Long) unmarshallObject(in, refMap),
+ readUnsignedLong(in), (Long) unmarshallObject(in, refMap));
+ }
+ throw new IllegalArgumentException("Unknown magic number " + magic);
+ }
+
+ private InternalCacheValue unmarshallInternalCacheValue(byte magic, ObjectInput in, UnmarshalledReferences refMap) throws IOException, ClassNotFoundException {
+ Object v = unmarshallObject(in, refMap);
+ switch (magic) {
+ case MAGICNUMBER_ICE_IMMORTAL:
+ return InternalEntryFactory.createValue(v);
+ case MAGICNUMBER_ICE_MORTAL:
+ return InternalEntryFactory.createValue(v,
+ readUnsignedLong(in), (Long) unmarshallObject(in, refMap),
+ -1, -1);
+ case MAGICNUMBER_ICE_TRANSIENT:
+ return InternalEntryFactory.createValue(v,
+ -1, -1,
+ readUnsignedLong(in), (Long) unmarshallObject(in, refMap));
+ case MAGICNUMBER_ICE_TRANSIENT_MORTAL:
+ return InternalEntryFactory.createValue(v,
+ readUnsignedLong(in), (Long) unmarshallObject(in, refMap),
+ readUnsignedLong(in), (Long) unmarshallObject(in, refMap));
+ }
+ throw new IllegalArgumentException("Unknown magic number " + magic);
+ }
+
private FastCopyHashMap unmarshallFastCopyHashMap(ObjectInput in, UnmarshalledReferences refMap) throws IOException, ClassNotFoundException {
FastCopyHashMap map = new FastCopyHashMap();
populateFromStream(in, refMap, map);
More information about the infinispan-commits
mailing list