[infinispan-commits] Infinispan SVN: r335 - in trunk/core/src/main/java/org/infinispan/marshall/jboss: externalizers and 1 other directory.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Thu May 21 18:21:55 EDT 2009


Author: galder.zamarreno at jboss.com
Date: 2009-05-21 18:21:55 -0400 (Thu, 21 May 2009)
New Revision: 335

Added:
   trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java
   trunk/core/src/main/java/org/infinispan/marshall/jboss/NumberClassExternalizer.java
Removed:
   trunk/core/src/main/java/org/infinispan/marshall/jboss/CustomObjectTable.java
   trunk/core/src/main/java/org/infinispan/marshall/jboss/ExternalizerClassFactory.java
   trunk/core/src/main/java/org/infinispan/marshall/jboss/MagicNumberClassTable.java
   trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/InternalCachedEntryExternalizer.java
   trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/RequestIgnoredResponseExternalizer.java
   trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/UnsuccessfulResponseExternalizer.java
Modified:
   trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java
Log:
[ISPN-59] (Add unit test that verifies number of written bytes) Some minor class name refactoring to reflect the new implementation and remove deprecated classes.

Copied: trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java (from rev 334, trunk/core/src/main/java/org/infinispan/marshall/jboss/CustomObjectTable.java)
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java	                        (rev 0)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java	2009-05-21 22:21:55 UTC (rev 335)
@@ -0,0 +1,270 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.infinispan.marshall.jboss;
+
+import net.jcip.annotations.Immutable;
+
+import org.infinispan.CacheException;
+import org.infinispan.atomic.AtomicHashMap;
+import org.infinispan.commands.LockControlCommand;
+import org.infinispan.commands.control.StateTransferControlCommand;
+import org.infinispan.commands.read.GetKeyValueCommand;
+import org.infinispan.commands.remote.ClusteredGetCommand;
+import org.infinispan.commands.remote.MultipleRpcCommand;
+import org.infinispan.commands.remote.SingleRpcCommand;
+import org.infinispan.commands.tx.CommitCommand;
+import org.infinispan.commands.tx.PrepareCommand;
+import org.infinispan.commands.tx.RollbackCommand;
+import org.infinispan.commands.write.ClearCommand;
+import org.infinispan.commands.write.InvalidateCommand;
+import org.infinispan.commands.write.InvalidateL1Command;
+import org.infinispan.commands.write.PutKeyValueCommand;
+import org.infinispan.commands.write.PutMapCommand;
+import org.infinispan.commands.write.RemoveCommand;
+import org.infinispan.commands.write.ReplaceCommand;
+import org.infinispan.container.entries.ImmortalCacheEntry;
+import org.infinispan.container.entries.ImmortalCacheValue;
+import org.infinispan.container.entries.MortalCacheEntry;
+import org.infinispan.container.entries.MortalCacheValue;
+import org.infinispan.container.entries.TransientCacheEntry;
+import org.infinispan.container.entries.TransientCacheValue;
+import org.infinispan.container.entries.TransientMortalCacheEntry;
+import org.infinispan.container.entries.TransientMortalCacheValue;
+import org.infinispan.loaders.bucket.Bucket;
+import org.infinispan.marshall.MarshalledValue;
+import org.infinispan.marshall.jboss.externalizers.ArrayListExternalizer;
+import org.infinispan.marshall.jboss.externalizers.BucketExternalizer;
+import org.infinispan.marshall.jboss.externalizers.DeltaAwareExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ExceptionResponseExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ExtendedResponseExternalizer;
+import org.infinispan.marshall.jboss.externalizers.GlobalTransactionExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ImmortalCacheEntryExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ImmortalCacheValueExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ImmutableMapExternalizer;
+import org.infinispan.marshall.jboss.externalizers.JGroupsAddressExternalizer;
+import org.infinispan.marshall.jboss.externalizers.LinkedListExternalizer;
+import org.infinispan.marshall.jboss.externalizers.MapExternalizer;
+import org.infinispan.marshall.jboss.externalizers.MarshalledValueExternalizer;
+import org.infinispan.marshall.jboss.externalizers.MortalCacheEntryExternalizer;
+import org.infinispan.marshall.jboss.externalizers.MortalCacheValueExternalizer;
+import org.infinispan.marshall.jboss.externalizers.ReplicableCommandExternalizer;
+import org.infinispan.marshall.jboss.externalizers.SetExternalizer;
+import org.infinispan.marshall.jboss.externalizers.SingletonListExternalizer;
+import org.infinispan.marshall.jboss.externalizers.StateTransferControlCommandExternalizer;
+import org.infinispan.marshall.jboss.externalizers.SuccessfulResponseExternalizer;
+import org.infinispan.marshall.jboss.externalizers.TransactionLogExternalizer;
+import org.infinispan.marshall.jboss.externalizers.TransientCacheEntryExternalizer;
+import org.infinispan.marshall.jboss.externalizers.TransientCacheValueExternalizer;
+import org.infinispan.marshall.jboss.externalizers.TransientMortalCacheEntryExternalizer;
+import org.infinispan.marshall.jboss.externalizers.TransientMortalCacheValueExternalizer;
+import org.infinispan.remoting.responses.ExceptionResponse;
+import org.infinispan.remoting.responses.ExtendedResponse;
+import org.infinispan.remoting.responses.RequestIgnoredResponse;
+import org.infinispan.remoting.responses.SuccessfulResponse;
+import org.infinispan.remoting.responses.UnsuccessfulResponse;
+import org.infinispan.remoting.transport.Transport;
+import org.infinispan.remoting.transport.jgroups.JGroupsAddress;
+import org.infinispan.transaction.xa.GlobalTransaction;
+import org.infinispan.util.FastCopyHashMap;
+import org.infinispan.util.Util;
+import org.jboss.marshalling.Marshaller;
+import org.jboss.marshalling.ObjectTable;
+import org.jboss.marshalling.Unmarshaller;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.IdentityHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+/**
+ * Constant ObjectTable that marshalls constant instances regardless of whether 
+ * these are generic objects such as UnsuccessfulResponse.INSTANCE, or home grown 
+ * Externalizer implementations. In both cases, this is a hugely efficient way of 
+ * sending around constant singleton objects. 
+ *
+ * @author Galder Zamarreño
+ * @since 4.0
+ */
+public class ConstantObjectTable implements ObjectTable {
+   private static final Map<String, String> EXTERNALIZERS = new HashMap<String, String>();
+
+   static {
+      EXTERNALIZERS.put(GlobalTransaction.class.getName(), GlobalTransactionExternalizer.class.getName());
+      EXTERNALIZERS.put(JGroupsAddress.class.getName(), JGroupsAddressExternalizer.class.getName());
+      EXTERNALIZERS.put(ArrayList.class.getName(), ArrayListExternalizer.class.getName());
+      EXTERNALIZERS.put(LinkedList.class.getName(), LinkedListExternalizer.class.getName());
+      EXTERNALIZERS.put(HashMap.class.getName(), MapExternalizer.class.getName());
+      EXTERNALIZERS.put(TreeMap.class.getName(), MapExternalizer.class.getName());
+      EXTERNALIZERS.put(HashSet.class.getName(), SetExternalizer.class.getName());
+      EXTERNALIZERS.put(TreeSet.class.getName(), SetExternalizer.class.getName());
+      EXTERNALIZERS.put("org.infinispan.util.Immutables$ImmutableMapWrapper", ImmutableMapExternalizer.class.getName());
+      EXTERNALIZERS.put(MarshalledValue.class.getName(), MarshalledValueExternalizer.class.getName());
+      EXTERNALIZERS.put(FastCopyHashMap.class.getName(), MapExternalizer.class.getName());
+      EXTERNALIZERS.put("java.util.Collections$SingletonList", SingletonListExternalizer.class.getName());
+      EXTERNALIZERS.put("org.infinispan.transaction.TransactionLog$LogEntry", TransactionLogExternalizer.class.getName());
+      EXTERNALIZERS.put(ExtendedResponse.class.getName(), ExtendedResponseExternalizer.class.getName());
+      EXTERNALIZERS.put(SuccessfulResponse.class.getName(), SuccessfulResponseExternalizer.class.getName());
+      EXTERNALIZERS.put(ExceptionResponse.class.getName(), ExceptionResponseExternalizer.class.getName());
+      EXTERNALIZERS.put(AtomicHashMap.class.getName(), DeltaAwareExternalizer.class.getName());
+
+      EXTERNALIZERS.put(StateTransferControlCommand.class.getName(), StateTransferControlCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(ClusteredGetCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(MultipleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(SingleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(GetKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(PutKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(RemoveCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(InvalidateCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(ReplaceCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(ClearCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(PutMapCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(PrepareCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(CommitCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(RollbackCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(InvalidateL1Command.class.getName(), ReplicableCommandExternalizer.class.getName());
+      EXTERNALIZERS.put(LockControlCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
+
+      EXTERNALIZERS.put(ImmortalCacheEntry.class.getName(), ImmortalCacheEntryExternalizer.class.getName());
+      EXTERNALIZERS.put(MortalCacheEntry.class.getName(), MortalCacheEntryExternalizer.class.getName());
+      EXTERNALIZERS.put(TransientCacheEntry.class.getName(), TransientCacheEntryExternalizer.class.getName());
+      EXTERNALIZERS.put(TransientMortalCacheEntry.class.getName(), TransientMortalCacheEntryExternalizer.class.getName());    
+      EXTERNALIZERS.put(ImmortalCacheValue.class.getName(), ImmortalCacheValueExternalizer.class.getName());
+      EXTERNALIZERS.put(MortalCacheValue.class.getName(), MortalCacheValueExternalizer.class.getName());
+      EXTERNALIZERS.put(TransientCacheValue.class.getName(), TransientCacheValueExternalizer.class.getName());
+      EXTERNALIZERS.put(TransientMortalCacheValue.class.getName(), TransientMortalCacheValueExternalizer.class.getName());
+      
+      EXTERNALIZERS.put(Bucket.class.getName(), BucketExternalizer.class.getName());      
+   }
+
+   /** Contains list of singleton objects written such as constant objects, 
+    * singleton ReadWriter implementations...etc. When writing, index of each 
+    * object is written, and when reading, index is used to find the instance 
+    * in this list.*/
+   private final List<Object> objects = new ArrayList<Object>();
+   /** Contains mapping of constant instances to their writers */
+   private final Map<Object, Writer> writers = new IdentityHashMap<Object, Writer>();
+   /** Contains mapping of custom object externalizer classes to their 
+    * Externalizer instances. Do not use this map for storing Externalizer 
+    * implementations for user classes. For these, please use weak key based 
+    * maps, i.e WeakHashMap */
+   private final Map<Class<?>, Externalizer> externalizers = new IdentityHashMap<Class<?>, Externalizer>();
+   private byte index;
+   private final Transport transport;
+   private final NumberClassExternalizer classTable = new NumberClassExternalizer();
+   
+   public ConstantObjectTable(Transport transport) {
+      this.transport = transport;
+   }
+
+   public void init() {
+      // Init singletons
+      objects.add(RequestIgnoredResponse.INSTANCE);
+      writers.put(RequestIgnoredResponse.INSTANCE, new InstanceWriter(index++));
+      objects.add(UnsuccessfulResponse.INSTANCE);
+      writers.put(UnsuccessfulResponse.INSTANCE, new InstanceWriter(index++));
+      
+      try {
+         for (Map.Entry<String, String> entry : EXTERNALIZERS.entrySet()) {
+            Class typeClazz = Util.loadClass(entry.getKey());
+            Externalizer delegate = (Externalizer) Util.getInstance(entry.getValue());
+            if (delegate instanceof StateTransferControlCommandExternalizer) {
+               ((StateTransferControlCommandExternalizer) delegate).init(transport);
+            }
+            if (delegate instanceof ClassExternalizer.ClassWritable) {
+               ((ClassExternalizer.ClassWritable) delegate).setClassExternalizer(classTable);
+            }
+            Externalizer rwrt = new DelegatingReadWriter(index++, delegate);
+            objects.add(rwrt);
+            externalizers.put(typeClazz, rwrt);
+         }
+         
+      } catch (IOException e) {
+         throw new CacheException("Unable to open load magicnumbers.properties", e);
+      } catch (ClassNotFoundException e) {
+         throw new CacheException("Unable to load one of the classes defined in the magicnumbers.properties", e);
+      } catch (Exception e) {
+         throw new CacheException("Unable to instantiate Externalizer class", e);
+      }
+   }
+
+   public void stop() {
+      classTable.stop();
+      writers.clear();
+      objects.clear();
+      externalizers.clear();
+   }
+
+   public Writer getObjectWriter(Object o) throws IOException {
+      Object singleton = writers.get(o);
+      if (singleton == null) {
+         return externalizers.get(o.getClass()); 
+      }
+      return writers.get(o);
+   }
+
+   public Object readObject(Unmarshaller unmarshaller) throws IOException, ClassNotFoundException {
+      Object o = objects.get(unmarshaller.readUnsignedByte());
+      if (o instanceof Externalizer) {
+         return ((Externalizer) o).readObject(unmarshaller);
+      }
+      return o;
+   }
+   
+   @Immutable
+   static class InstanceWriter implements Writer {
+      private final byte id;
+
+      InstanceWriter(byte objectId) {
+         this.id = objectId;
+      }
+
+      public void writeObject(Marshaller marshaller, Object object) throws IOException {
+         marshaller.write(id);
+      }
+   }   
+   
+   @Immutable
+   static class DelegatingReadWriter implements Externalizer {
+      private final byte id;
+      private final Externalizer delegate;
+
+      DelegatingReadWriter(byte objectId, Externalizer delegate) {
+         this.id = objectId;
+         this.delegate = delegate;
+      }
+
+      public void writeObject(Marshaller marshaller, Object object) throws IOException {
+         marshaller.write(id);
+         delegate.writeObject(marshaller, object);
+      }
+
+      public Object readObject(Unmarshaller unmarshaller) throws IOException, ClassNotFoundException {
+         return delegate.readObject(unmarshaller);
+      }
+   }   
+}

Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/CustomObjectTable.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/CustomObjectTable.java	2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/CustomObjectTable.java	2009-05-21 22:21:55 UTC (rev 335)
@@ -1,268 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.infinispan.marshall.jboss;
-
-import net.jcip.annotations.Immutable;
-
-import org.infinispan.CacheException;
-import org.infinispan.atomic.AtomicHashMap;
-import org.infinispan.commands.LockControlCommand;
-import org.infinispan.commands.control.StateTransferControlCommand;
-import org.infinispan.commands.read.GetKeyValueCommand;
-import org.infinispan.commands.remote.ClusteredGetCommand;
-import org.infinispan.commands.remote.MultipleRpcCommand;
-import org.infinispan.commands.remote.SingleRpcCommand;
-import org.infinispan.commands.tx.CommitCommand;
-import org.infinispan.commands.tx.PrepareCommand;
-import org.infinispan.commands.tx.RollbackCommand;
-import org.infinispan.commands.write.ClearCommand;
-import org.infinispan.commands.write.InvalidateCommand;
-import org.infinispan.commands.write.InvalidateL1Command;
-import org.infinispan.commands.write.PutKeyValueCommand;
-import org.infinispan.commands.write.PutMapCommand;
-import org.infinispan.commands.write.RemoveCommand;
-import org.infinispan.commands.write.ReplaceCommand;
-import org.infinispan.container.entries.ImmortalCacheEntry;
-import org.infinispan.container.entries.ImmortalCacheValue;
-import org.infinispan.container.entries.MortalCacheEntry;
-import org.infinispan.container.entries.MortalCacheValue;
-import org.infinispan.container.entries.TransientCacheEntry;
-import org.infinispan.container.entries.TransientCacheValue;
-import org.infinispan.container.entries.TransientMortalCacheEntry;
-import org.infinispan.container.entries.TransientMortalCacheValue;
-import org.infinispan.loaders.bucket.Bucket;
-import org.infinispan.marshall.MarshalledValue;
-import org.infinispan.marshall.jboss.externalizers.ArrayListExternalizer;
-import org.infinispan.marshall.jboss.externalizers.BucketExternalizer;
-import org.infinispan.marshall.jboss.externalizers.DeltaAwareExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ExceptionResponseExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ExtendedResponseExternalizer;
-import org.infinispan.marshall.jboss.externalizers.GlobalTransactionExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ImmortalCacheEntryExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ImmortalCacheValueExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ImmutableMapExternalizer;
-import org.infinispan.marshall.jboss.externalizers.JGroupsAddressExternalizer;
-import org.infinispan.marshall.jboss.externalizers.LinkedListExternalizer;
-import org.infinispan.marshall.jboss.externalizers.MapExternalizer;
-import org.infinispan.marshall.jboss.externalizers.MarshalledValueExternalizer;
-import org.infinispan.marshall.jboss.externalizers.MortalCacheEntryExternalizer;
-import org.infinispan.marshall.jboss.externalizers.MortalCacheValueExternalizer;
-import org.infinispan.marshall.jboss.externalizers.ReplicableCommandExternalizer;
-import org.infinispan.marshall.jboss.externalizers.SetExternalizer;
-import org.infinispan.marshall.jboss.externalizers.SingletonListExternalizer;
-import org.infinispan.marshall.jboss.externalizers.StateTransferControlCommandExternalizer;
-import org.infinispan.marshall.jboss.externalizers.SuccessfulResponseExternalizer;
-import org.infinispan.marshall.jboss.externalizers.TransactionLogExternalizer;
-import org.infinispan.marshall.jboss.externalizers.TransientCacheEntryExternalizer;
-import org.infinispan.marshall.jboss.externalizers.TransientCacheValueExternalizer;
-import org.infinispan.marshall.jboss.externalizers.TransientMortalCacheEntryExternalizer;
-import org.infinispan.marshall.jboss.externalizers.TransientMortalCacheValueExternalizer;
-import org.infinispan.remoting.responses.ExceptionResponse;
-import org.infinispan.remoting.responses.ExtendedResponse;
-import org.infinispan.remoting.responses.RequestIgnoredResponse;
-import org.infinispan.remoting.responses.SuccessfulResponse;
-import org.infinispan.remoting.responses.UnsuccessfulResponse;
-import org.infinispan.remoting.transport.Transport;
-import org.infinispan.remoting.transport.jgroups.JGroupsAddress;
-import org.infinispan.transaction.xa.GlobalTransaction;
-import org.infinispan.util.FastCopyHashMap;
-import org.infinispan.util.Util;
-import org.jboss.marshalling.Marshaller;
-import org.jboss.marshalling.ObjectTable;
-import org.jboss.marshalling.Unmarshaller;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-/**
- * Custom ObjectTable that deals with both constant instances and 
- * externalizer-like ReadWriter implementations.
- *
- * @author Galder Zamarreño
- * @since 4.0
- */
-public class CustomObjectTable implements ObjectTable {
-   private static final Map<String, String> WRITERS = new HashMap<String, String>();
-
-   static {
-      WRITERS.put(GlobalTransaction.class.getName(), GlobalTransactionExternalizer.class.getName());
-      WRITERS.put(JGroupsAddress.class.getName(), JGroupsAddressExternalizer.class.getName());
-      WRITERS.put(ArrayList.class.getName(), ArrayListExternalizer.class.getName());
-      WRITERS.put(LinkedList.class.getName(), LinkedListExternalizer.class.getName());
-      WRITERS.put(HashMap.class.getName(), MapExternalizer.class.getName());
-      WRITERS.put(TreeMap.class.getName(), MapExternalizer.class.getName());
-      WRITERS.put(HashSet.class.getName(), SetExternalizer.class.getName());
-      WRITERS.put(TreeSet.class.getName(), SetExternalizer.class.getName());
-      WRITERS.put("org.infinispan.util.Immutables$ImmutableMapWrapper", ImmutableMapExternalizer.class.getName());
-      WRITERS.put(MarshalledValue.class.getName(), MarshalledValueExternalizer.class.getName());
-      WRITERS.put(FastCopyHashMap.class.getName(), MapExternalizer.class.getName());
-      WRITERS.put("java.util.Collections$SingletonList", SingletonListExternalizer.class.getName());
-      WRITERS.put("org.infinispan.transaction.TransactionLog$LogEntry", TransactionLogExternalizer.class.getName());
-      WRITERS.put(ExtendedResponse.class.getName(), ExtendedResponseExternalizer.class.getName());
-      WRITERS.put(SuccessfulResponse.class.getName(), SuccessfulResponseExternalizer.class.getName());
-      WRITERS.put(ExceptionResponse.class.getName(), ExceptionResponseExternalizer.class.getName());
-      WRITERS.put(AtomicHashMap.class.getName(), DeltaAwareExternalizer.class.getName());
-
-      WRITERS.put(StateTransferControlCommand.class.getName(), StateTransferControlCommandExternalizer.class.getName());
-      WRITERS.put(ClusteredGetCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(MultipleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(SingleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(GetKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(PutKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(RemoveCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(InvalidateCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(ReplaceCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(ClearCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(PutMapCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(PrepareCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(CommitCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(RollbackCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(InvalidateL1Command.class.getName(), ReplicableCommandExternalizer.class.getName());
-      WRITERS.put(LockControlCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-
-      WRITERS.put(ImmortalCacheEntry.class.getName(), ImmortalCacheEntryExternalizer.class.getName());
-      WRITERS.put(MortalCacheEntry.class.getName(), MortalCacheEntryExternalizer.class.getName());
-      WRITERS.put(TransientCacheEntry.class.getName(), TransientCacheEntryExternalizer.class.getName());
-      WRITERS.put(TransientMortalCacheEntry.class.getName(), TransientMortalCacheEntryExternalizer.class.getName());    
-      WRITERS.put(ImmortalCacheValue.class.getName(), ImmortalCacheValueExternalizer.class.getName());
-      WRITERS.put(MortalCacheValue.class.getName(), MortalCacheValueExternalizer.class.getName());
-      WRITERS.put(TransientCacheValue.class.getName(), TransientCacheValueExternalizer.class.getName());
-      WRITERS.put(TransientMortalCacheValue.class.getName(), TransientMortalCacheValueExternalizer.class.getName());
-      
-      WRITERS.put(Bucket.class.getName(), BucketExternalizer.class.getName());      
-   }
-
-   /** Contains list of singleton objects written such as constant objects, 
-    * singleton ReadWriter implementations...etc. When writing, index of each 
-    * object is written, and when reading, index is used to find the instance 
-    * in this list.*/
-   private final List<Object> objects = new ArrayList<Object>();
-   /** Contains mapping of constant instances to their writers */
-   private final Map<Object, Writer> writers = new IdentityHashMap<Object, Writer>();
-   /** Contains mapping of custom object externalizer classes to their 
-    * ReadWriter instances. Do not use this map for storing ReadWriter 
-    * implementations for user classes. For these, please use weak key based 
-    * maps, i.e WeakHashMap */
-   private final Map<Class<?>, Externalizer> readwriters = new IdentityHashMap<Class<?>, Externalizer>();
-   private byte index;
-   private final Transport transport;
-   private final MagicNumberClassTable classTable = new MagicNumberClassTable();
-   
-   public CustomObjectTable(Transport transport) {
-      this.transport = transport;
-   }
-
-   public void init() {
-      // Init singletons
-      objects.add(RequestIgnoredResponse.INSTANCE);
-      writers.put(RequestIgnoredResponse.INSTANCE, new InstanceWriter(index++));
-      objects.add(UnsuccessfulResponse.INSTANCE);
-      writers.put(UnsuccessfulResponse.INSTANCE, new InstanceWriter(index++));
-      
-      try {
-         for (Map.Entry<String, String> entry : WRITERS.entrySet()) {
-            Class typeClazz = Util.loadClass(entry.getKey());
-            Externalizer delegate = (Externalizer) Util.getInstance(entry.getValue());
-            if (delegate instanceof StateTransferControlCommandExternalizer) {
-               ((StateTransferControlCommandExternalizer) delegate).init(transport);
-            }
-            if (delegate instanceof ClassExternalizer.ClassWritable) {
-               ((ClassExternalizer.ClassWritable) delegate).setClassExternalizer(classTable);
-            }
-            Externalizer rwrt = new DelegatingReadWriter(index++, delegate);
-            objects.add(rwrt);
-            readwriters.put(typeClazz, rwrt);
-         }
-         
-      } catch (IOException e) {
-         throw new CacheException("Unable to open load magicnumbers.properties", e);
-      } catch (ClassNotFoundException e) {
-         throw new CacheException("Unable to load one of the classes defined in the magicnumbers.properties", e);
-      } catch (Exception e) {
-         throw new CacheException("Unable to instantiate Externalizer class", e);
-      }
-   }
-
-   public void stop() {
-      classTable.stop();
-      writers.clear();
-      objects.clear();
-      readwriters.clear();
-   }
-
-   public Writer getObjectWriter(Object o) throws IOException {
-      Object singleton = writers.get(o);
-      if (singleton == null) {
-         return readwriters.get(o.getClass()); 
-      }
-      return writers.get(o);
-   }
-
-   public Object readObject(Unmarshaller unmarshaller) throws IOException, ClassNotFoundException {
-      Object o = objects.get(unmarshaller.readUnsignedByte());
-      if (o instanceof Externalizer) {
-         return ((Externalizer) o).readObject(unmarshaller);
-      }
-      return o;
-   }
-   
-   @Immutable
-   static class InstanceWriter implements Writer {
-      private final byte id;
-
-      InstanceWriter(byte objectId) {
-         this.id = objectId;
-      }
-
-      public void writeObject(Marshaller marshaller, Object object) throws IOException {
-         marshaller.write(id);
-      }
-   }   
-   
-   @Immutable
-   static class DelegatingReadWriter implements Externalizer {
-      private final byte id;
-      private final Externalizer delegate;
-
-      DelegatingReadWriter(byte objectId, Externalizer delegate) {
-         this.id = objectId;
-         this.delegate = delegate;
-      }
-
-      public void writeObject(Marshaller marshaller, Object object) throws IOException {
-         marshaller.write(id);
-         delegate.writeObject(marshaller, object);
-      }
-
-      public Object readObject(Unmarshaller unmarshaller) throws IOException, ClassNotFoundException {
-         return delegate.readObject(unmarshaller);
-      }
-   }   
-}

Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/ExternalizerClassFactory.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/ExternalizerClassFactory.java	2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/ExternalizerClassFactory.java	2009-05-21 22:21:55 UTC (rev 335)
@@ -1,172 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.infinispan.marshall.jboss;
-
-import net.jcip.annotations.Immutable;
-import org.infinispan.CacheException;
-import org.infinispan.atomic.AtomicHashMap;
-import org.infinispan.commands.LockControlCommand;
-import org.infinispan.commands.control.StateTransferControlCommand;
-import org.infinispan.commands.read.GetKeyValueCommand;
-import org.infinispan.commands.remote.ClusteredGetCommand;
-import org.infinispan.commands.remote.MultipleRpcCommand;
-import org.infinispan.commands.remote.SingleRpcCommand;
-import org.infinispan.commands.tx.CommitCommand;
-import org.infinispan.commands.tx.PrepareCommand;
-import org.infinispan.commands.tx.RollbackCommand;
-import org.infinispan.commands.write.ClearCommand;
-import org.infinispan.commands.write.InvalidateCommand;
-import org.infinispan.commands.write.InvalidateL1Command;
-import org.infinispan.commands.write.PutKeyValueCommand;
-import org.infinispan.commands.write.PutMapCommand;
-import org.infinispan.commands.write.RemoveCommand;
-import org.infinispan.commands.write.ReplaceCommand;
-import org.infinispan.container.entries.ImmortalCacheEntry;
-import org.infinispan.container.entries.ImmortalCacheValue;
-import org.infinispan.container.entries.MortalCacheEntry;
-import org.infinispan.container.entries.MortalCacheValue;
-import org.infinispan.container.entries.TransientCacheEntry;
-import org.infinispan.container.entries.TransientCacheValue;
-import org.infinispan.container.entries.TransientMortalCacheEntry;
-import org.infinispan.container.entries.TransientMortalCacheValue;
-import org.infinispan.loaders.bucket.Bucket;
-import org.infinispan.marshall.MarshalledValue;
-import org.infinispan.marshall.jboss.externalizers.*;
-import org.infinispan.remoting.responses.ExceptionResponse;
-import org.infinispan.remoting.responses.ExtendedResponse;
-import org.infinispan.remoting.responses.SuccessfulResponse;
-import org.infinispan.remoting.transport.Transport;
-import org.infinispan.remoting.transport.jgroups.JGroupsAddress;
-import org.infinispan.transaction.xa.GlobalTransaction;
-import org.infinispan.util.FastCopyHashMap;
-import org.infinispan.util.Util;
-import org.jboss.marshalling.ClassExternalizerFactory;
-import org.jboss.marshalling.Externalizer;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.WeakHashMap;
-
-/**
- * CustomExternalizerFactory.
- *
- * @author Galder Zamarreño
- * @since 4.0
- * @deprecated No longer in use. A purely ObjectTable based solution is now in use.
- */
- at Immutable
- at Deprecated
-public class ExternalizerClassFactory implements ClassExternalizerFactory {
-   private static final Map<String, String> EXTERNALIZERS = new HashMap<String, String>();
-
-//   static {
-//      EXTERNALIZERS.put(GlobalTransaction.class.getName(), GlobalTransactionExternalizer.class.getName());
-//      EXTERNALIZERS.put(JGroupsAddress.class.getName(), JGroupsAddressExternalizer.class.getName());
-//      EXTERNALIZERS.put(ArrayList.class.getName(), ArrayListExternalizer.class.getName());
-//      EXTERNALIZERS.put(LinkedList.class.getName(), LinkedListExternalizer.class.getName());
-//      EXTERNALIZERS.put(HashMap.class.getName(), MapExternalizer.class.getName());
-//      EXTERNALIZERS.put(TreeMap.class.getName(), MapExternalizer.class.getName());
-//      EXTERNALIZERS.put(HashSet.class.getName(), SetExternalizer.class.getName());
-//      EXTERNALIZERS.put(TreeSet.class.getName(), SetExternalizer.class.getName());
-//      EXTERNALIZERS.put("org.infinispan.util.Immutables$ImmutableMapWrapper", ImmutableMapExternalizer.class.getName());
-//      EXTERNALIZERS.put(MarshalledValue.class.getName(), MarshalledValueExternalizer.class.getName());
-//      EXTERNALIZERS.put(FastCopyHashMap.class.getName(), MapExternalizer.class.getName());
-//      EXTERNALIZERS.put("java.util.Collections$SingletonList", SingletonListExternalizer.class.getName());
-//      EXTERNALIZERS.put("org.infinispan.transaction.TransactionLog$LogEntry", TransactionLogExternalizer.class.getName());
-//      EXTERNALIZERS.put(ExtendedResponse.class.getName(), ExtendedResponseExternalizer.class.getName());
-//      EXTERNALIZERS.put(SuccessfulResponse.class.getName(), SuccessfulResponseExternalizer.class.getName());
-//      EXTERNALIZERS.put(ExceptionResponse.class.getName(), ExceptionResponseExternalizer.class.getName());
-//      EXTERNALIZERS.put(AtomicHashMap.class.getName(), DeltaAwareExternalizer.class.getName());
-//
-//      EXTERNALIZERS.put(StateTransferControlCommand.class.getName(), StateTransferControlCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(ClusteredGetCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(MultipleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(SingleRpcCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(GetKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(PutKeyValueCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(RemoveCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(InvalidateCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(ReplaceCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(ClearCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(PutMapCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(PrepareCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(CommitCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(RollbackCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(InvalidateL1Command.class.getName(), ReplicableCommandExternalizer.class.getName());
-//      EXTERNALIZERS.put(LockControlCommand.class.getName(), ReplicableCommandExternalizer.class.getName());
-//
-//      EXTERNALIZERS.put(ImmortalCacheEntry.class.getName(), ImmortalCacheEntryExternalizer.class.getName());
-//      EXTERNALIZERS.put(MortalCacheEntry.class.getName(), MortalCacheEntryExternalizer.class.getName());
-//      EXTERNALIZERS.put(TransientCacheEntry.class.getName(), TransientCacheEntryExternalizer.class.getName());
-//      EXTERNALIZERS.put(TransientMortalCacheEntry.class.getName(), TransientMortalCacheEntryExternalizer.class.getName());    
-//      EXTERNALIZERS.put(ImmortalCacheValue.class.getName(), ImmortalCacheValueExternalizer.class.getName());
-//      EXTERNALIZERS.put(MortalCacheValue.class.getName(), MortalCacheValueExternalizer.class.getName());
-//      EXTERNALIZERS.put(TransientCacheValue.class.getName(), TransientCacheValueExternalizer.class.getName());
-//      EXTERNALIZERS.put(TransientMortalCacheValue.class.getName(), TransientMortalCacheValueExternalizer.class.getName());
-//      
-//      EXTERNALIZERS.put(Bucket.class.getName(), BucketExternalizer.class.getName());
-//   }
-//
-//   private final Map<Class<?>, Externalizer> externalizers = new WeakHashMap<Class<?>, Externalizer>();
-//   private final Transport transport;
-//   private final CustomObjectTable objectTable;
-//
-//   public ExternalizerClassFactory(Transport transport, CustomObjectTable objectTable) {
-//      this.transport = transport;
-//      this.objectTable = objectTable;
-//   }
-//
-//   public void init() {
-//      try {
-//         for (Map.Entry<String, String> entry : EXTERNALIZERS.entrySet()) {
-//            Class typeClazz = Util.loadClass(entry.getKey());
-//            Externalizer ext = (Externalizer) Util.getInstance(entry.getValue());
-//            if (ext instanceof StateTransferControlCommandExternalizer) {
-//               ((StateTransferControlCommandExternalizer) ext).init(transport);
-//            }
-//            externalizers.put(typeClazz, ext);
-//            objectTable.add(ext);
-//         }
-//      } catch (IOException e) {
-//         throw new CacheException("Unable to open load magicnumbers.properties", e);
-//      } catch (ClassNotFoundException e) {
-//         throw new CacheException("Unable to load one of the classes defined in the magicnumbers.properties", e);
-//      } catch (Exception e) {
-//         throw new CacheException("Unable to instantiate Externalizer class", e);
-//      }
-//   }
-
-//   public void stop() {
-//      externalizers.clear();
-//   }
-
-   public Externalizer getExternalizer(Class<?> clazz) {
-//      return externalizers.get(clazz);
-      return null;
-   }
-}

Modified: trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java	2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java	2009-05-21 22:21:55 UTC (rev 335)
@@ -60,7 +60,7 @@
    private ClassLoader defaultClassLoader;
    private MarshallingConfiguration configuration;
    private MarshallerFactory factory;
-   private CustomObjectTable objectTable;
+   private ConstantObjectTable objectTable;
 
    @Inject
    public void init(ClassLoader defaultCl, Transport transport) {
@@ -177,8 +177,8 @@
       return in.readObject();
    }
 
-   private CustomObjectTable createCustomObjectTable(Transport transport) {
-      CustomObjectTable objectTable = new CustomObjectTable(transport);
+   private ConstantObjectTable createCustomObjectTable(Transport transport) {
+      ConstantObjectTable objectTable = new ConstantObjectTable(transport);
       objectTable.init();
       return objectTable;
    }

Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/MagicNumberClassTable.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/MagicNumberClassTable.java	2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/MagicNumberClassTable.java	2009-05-21 22:21:55 UTC (rev 335)
@@ -1,129 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.infinispan.marshall.jboss;
-
-import net.jcip.annotations.Immutable;
-import org.infinispan.CacheException;
-import org.infinispan.commands.LockControlCommand;
-import org.infinispan.commands.read.GetKeyValueCommand;
-import org.infinispan.commands.remote.ClusteredGetCommand;
-import org.infinispan.commands.remote.MultipleRpcCommand;
-import org.infinispan.commands.remote.SingleRpcCommand;
-import org.infinispan.commands.tx.CommitCommand;
-import org.infinispan.commands.tx.PrepareCommand;
-import org.infinispan.commands.tx.RollbackCommand;
-import org.infinispan.commands.write.ClearCommand;
-import org.infinispan.commands.write.InvalidateCommand;
-import org.infinispan.commands.write.InvalidateL1Command;
-import org.infinispan.commands.write.PutKeyValueCommand;
-import org.infinispan.commands.write.PutMapCommand;
-import org.infinispan.commands.write.RemoveCommand;
-import org.infinispan.commands.write.ReplaceCommand;
-import org.infinispan.util.FastCopyHashMap;
-import org.infinispan.util.Util;
-import org.jboss.marshalling.Marshaller;
-import org.jboss.marshalling.Unmarshaller;
-import org.jboss.marshalling.util.IdentityIntMap;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-/**
- * MagicNumberClassTable.
- *
- * @author Galder Zamarreño
- * @since 4.0
- */
- at Immutable
-public class MagicNumberClassTable implements ClassExternalizer {
-   private static final List<String> MAGIC_NUMBERS = new ArrayList<String>();
-
-   static {
-      MAGIC_NUMBERS.add(HashMap.class.getName());
-      MAGIC_NUMBERS.add(TreeMap.class.getName());
-      MAGIC_NUMBERS.add(FastCopyHashMap.class.getName());
-      
-      MAGIC_NUMBERS.add(HashSet.class.getName());
-      MAGIC_NUMBERS.add(TreeSet.class.getName());
-      
-      MAGIC_NUMBERS.add(ClusteredGetCommand.class.getName());
-      MAGIC_NUMBERS.add(MultipleRpcCommand.class.getName());
-      MAGIC_NUMBERS.add(SingleRpcCommand.class.getName());
-      MAGIC_NUMBERS.add(GetKeyValueCommand.class.getName());
-      MAGIC_NUMBERS.add(PutKeyValueCommand.class.getName());
-      MAGIC_NUMBERS.add(RemoveCommand.class.getName());
-      MAGIC_NUMBERS.add(InvalidateCommand.class.getName());
-      MAGIC_NUMBERS.add(ReplaceCommand.class.getName());
-      MAGIC_NUMBERS.add(ClearCommand.class.getName());
-      MAGIC_NUMBERS.add(PutMapCommand.class.getName());
-      MAGIC_NUMBERS.add(PrepareCommand.class.getName());
-      MAGIC_NUMBERS.add(CommitCommand.class.getName());
-      MAGIC_NUMBERS.add(RollbackCommand.class.getName());
-      MAGIC_NUMBERS.add(InvalidateL1Command.class.getName());
-      MAGIC_NUMBERS.add(LockControlCommand.class.getName());
-   }
-   
-   /** Class to int mapping providing magic number to be written. Do not use 
-    * this map for storing user classes. For these, please use weak key based 
-    * maps, i.e WeakHashMap */
-   private final IdentityIntMap<Class<?>> numbers = new IdentityIntMap<Class<?>>();
-   /** Contains list of class objects written. When writing, index of each 
-    * class object object, or magic number, is written, and when reading, index 
-    * is used to find the instance in this list.*/
-   private final List<Class<?>> classes = new ArrayList<Class<?>>();
-   private byte index;
-
-   public MagicNumberClassTable() {
-      try {
-         for (String entry : MAGIC_NUMBERS) {
-            Class clazz = Util.loadClass(entry);
-            numbers.put(clazz, index++);
-            classes.add(clazz);
-         }
-      } catch (ClassNotFoundException e) {
-         throw new CacheException("Unable to load one of the classes defined in the magicnumbers.properties", e);
-      } catch (Exception e) {
-         throw new CacheException("Unable to instantiate Externalizer class", e);
-      }
-   }
-
-   public void stop() {
-      classes.clear();
-      numbers.clear();
-   }
-
-   public void writeClass(Marshaller marshaller, Class<?> clazz) throws IOException {
-      int number = numbers.get(clazz, -1);
-      marshaller.writeByte(number);
-   }
-
-   public Class<?> readClass(Unmarshaller unmarshaller) throws IOException {
-      int magicNumber = unmarshaller.readUnsignedByte();
-      return classes.get(magicNumber);
-   }
-   
-}

Copied: trunk/core/src/main/java/org/infinispan/marshall/jboss/NumberClassExternalizer.java (from rev 334, trunk/core/src/main/java/org/infinispan/marshall/jboss/MagicNumberClassTable.java)
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/NumberClassExternalizer.java	                        (rev 0)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/NumberClassExternalizer.java	2009-05-21 22:21:55 UTC (rev 335)
@@ -0,0 +1,129 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.infinispan.marshall.jboss;
+
+import net.jcip.annotations.Immutable;
+import org.infinispan.CacheException;
+import org.infinispan.commands.LockControlCommand;
+import org.infinispan.commands.read.GetKeyValueCommand;
+import org.infinispan.commands.remote.ClusteredGetCommand;
+import org.infinispan.commands.remote.MultipleRpcCommand;
+import org.infinispan.commands.remote.SingleRpcCommand;
+import org.infinispan.commands.tx.CommitCommand;
+import org.infinispan.commands.tx.PrepareCommand;
+import org.infinispan.commands.tx.RollbackCommand;
+import org.infinispan.commands.write.ClearCommand;
+import org.infinispan.commands.write.InvalidateCommand;
+import org.infinispan.commands.write.InvalidateL1Command;
+import org.infinispan.commands.write.PutKeyValueCommand;
+import org.infinispan.commands.write.PutMapCommand;
+import org.infinispan.commands.write.RemoveCommand;
+import org.infinispan.commands.write.ReplaceCommand;
+import org.infinispan.util.FastCopyHashMap;
+import org.infinispan.util.Util;
+import org.jboss.marshalling.Marshaller;
+import org.jboss.marshalling.Unmarshaller;
+import org.jboss.marshalling.util.IdentityIntMap;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+/**
+ * MagicNumberClassTable.
+ *
+ * @author Galder Zamarreño
+ * @since 4.0
+ */
+ at Immutable
+public class NumberClassExternalizer implements ClassExternalizer {
+   private static final List<String> MAGIC_NUMBERS = new ArrayList<String>();
+
+   static {
+      MAGIC_NUMBERS.add(HashMap.class.getName());
+      MAGIC_NUMBERS.add(TreeMap.class.getName());
+      MAGIC_NUMBERS.add(FastCopyHashMap.class.getName());
+      
+      MAGIC_NUMBERS.add(HashSet.class.getName());
+      MAGIC_NUMBERS.add(TreeSet.class.getName());
+      
+      MAGIC_NUMBERS.add(ClusteredGetCommand.class.getName());
+      MAGIC_NUMBERS.add(MultipleRpcCommand.class.getName());
+      MAGIC_NUMBERS.add(SingleRpcCommand.class.getName());
+      MAGIC_NUMBERS.add(GetKeyValueCommand.class.getName());
+      MAGIC_NUMBERS.add(PutKeyValueCommand.class.getName());
+      MAGIC_NUMBERS.add(RemoveCommand.class.getName());
+      MAGIC_NUMBERS.add(InvalidateCommand.class.getName());
+      MAGIC_NUMBERS.add(ReplaceCommand.class.getName());
+      MAGIC_NUMBERS.add(ClearCommand.class.getName());
+      MAGIC_NUMBERS.add(PutMapCommand.class.getName());
+      MAGIC_NUMBERS.add(PrepareCommand.class.getName());
+      MAGIC_NUMBERS.add(CommitCommand.class.getName());
+      MAGIC_NUMBERS.add(RollbackCommand.class.getName());
+      MAGIC_NUMBERS.add(InvalidateL1Command.class.getName());
+      MAGIC_NUMBERS.add(LockControlCommand.class.getName());
+   }
+   
+   /** Class to int mapping providing magic number to be written. Do not use 
+    * this map for storing user classes. For these, please use weak key based 
+    * maps, i.e WeakHashMap */
+   private final IdentityIntMap<Class<?>> numbers = new IdentityIntMap<Class<?>>();
+   /** Contains list of class objects written. When writing, index of each 
+    * class object object, or magic number, is written, and when reading, index 
+    * is used to find the instance in this list.*/
+   private final List<Class<?>> classes = new ArrayList<Class<?>>();
+   private byte index;
+
+   public NumberClassExternalizer() {
+      try {
+         for (String entry : MAGIC_NUMBERS) {
+            Class clazz = Util.loadClass(entry);
+            numbers.put(clazz, index++);
+            classes.add(clazz);
+         }
+      } catch (ClassNotFoundException e) {
+         throw new CacheException("Unable to load one of the classes defined in the magicnumbers.properties", e);
+      } catch (Exception e) {
+         throw new CacheException("Unable to instantiate Externalizer class", e);
+      }
+   }
+
+   public void stop() {
+      classes.clear();
+      numbers.clear();
+   }
+
+   public void writeClass(Marshaller marshaller, Class<?> clazz) throws IOException {
+      int number = numbers.get(clazz, -1);
+      marshaller.writeByte(number);
+   }
+
+   public Class<?> readClass(Unmarshaller unmarshaller) throws IOException {
+      int magicNumber = unmarshaller.readUnsignedByte();
+      return classes.get(magicNumber);
+   }
+   
+}

Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/InternalCachedEntryExternalizer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/InternalCachedEntryExternalizer.java	2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/InternalCachedEntryExternalizer.java	2009-05-21 22:21:55 UTC (rev 335)
@@ -1,88 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.infinispan.marshall.jboss.externalizers;
-
-import net.jcip.annotations.Immutable;
-import org.infinispan.container.entries.InternalCacheEntry;
-import org.infinispan.container.entries.InternalEntryFactory;
-import org.infinispan.marshall.jboss.MarshallUtil;
-import org.jboss.marshalling.Creator;
-import org.jboss.marshalling.Externalizer;
-import org.jboss.marshalling.Marshaller;
-import org.jboss.marshalling.Unmarshaller;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- * InternalCachedEntryExternalizer.
- *
- * @author Galder Zamarreño
- * @since 4.0
- * @deprecated Use individual cached entry externalizers instead
- */
- at Immutable
- at Deprecated
-public class InternalCachedEntryExternalizer implements Externalizer {
-
-   /**
-    * The serialVersionUID
-    */
-   private static final long serialVersionUID = -3475239737916428837L;
-
-   public void writeExternal(Object subject, ObjectOutput output) throws IOException {
-      InternalCacheEntry ice = (InternalCacheEntry) subject;
-      output.writeObject(ice.getKey());
-      output.writeObject(ice.getValue());
-      if (ice.canExpire()) {
-         output.writeBoolean(true);
-         MarshallUtil.writeUnsignedLong(output, ice.getCreated());
-         output.writeLong(ice.getLifespan()); // could be negative so should not use unsigned longs
-         MarshallUtil.writeUnsignedLong(output, ice.getLastUsed());
-         output.writeLong(ice.getMaxIdle()); // could be negative so should not use unsigned longs
-      } else {
-         output.writeBoolean(false);
-      }
-   }
-
-   public Object createExternal(Class<?> subjectType, ObjectInput input, Creator defaultCreator)
-         throws IOException, ClassNotFoundException {
-      Object k = input.readObject();
-      Object v = input.readObject();
-      boolean canExpire = input.readBoolean();
-      if (canExpire) {
-         long created = MarshallUtil.readUnsignedLong(input);
-         long lifespan = input.readLong(); // could be negative so should not use unsigned longs
-         long lastUsed = MarshallUtil.readUnsignedLong(input);
-         long maxIdle = input.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);
-      }
-   }
-
-   public void readExternal(Object subject, ObjectInput input) throws IOException,
-                                                                      ClassNotFoundException {
-      // No-op
-   }
-}

Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/RequestIgnoredResponseExternalizer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/RequestIgnoredResponseExternalizer.java	2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/RequestIgnoredResponseExternalizer.java	2009-05-21 22:21:55 UTC (rev 335)
@@ -1,31 +0,0 @@
-package org.infinispan.marshall.jboss.externalizers;
-
-import org.infinispan.remoting.responses.RequestIgnoredResponse;
-import org.jboss.marshalling.Creator;
-import org.jboss.marshalling.Externalizer;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- * Externalizes RequestIgnoredResponses
- *
- * @author Manik Surtani
- * @since 4.0
- * @deprecated Not needed RequestIgnoredResponseExternalizer, it's more 
- * performant adding singleton instance to ObjectTable, see 
- * RequestIgnoredResponse example in CustomObjectTable
- */
- at Deprecated
-public class RequestIgnoredResponseExternalizer implements Externalizer {
-   public void writeExternal(Object o, ObjectOutput objectOutput) throws IOException {
-   }
-
-   public Object createExternal(Class<?> aClass, ObjectInput objectInput, Creator creator) throws IOException, ClassNotFoundException {
-      return RequestIgnoredResponse.INSTANCE;
-   }
-
-   public void readExternal(Object o, ObjectInput objectInput) throws IOException, ClassNotFoundException {
-   }
-}

Deleted: trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/UnsuccessfulResponseExternalizer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/UnsuccessfulResponseExternalizer.java	2009-05-21 22:11:21 UTC (rev 334)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/externalizers/UnsuccessfulResponseExternalizer.java	2009-05-21 22:21:55 UTC (rev 335)
@@ -1,33 +0,0 @@
-package org.infinispan.marshall.jboss.externalizers;
-
-import org.infinispan.remoting.responses.UnsuccessfulResponse;
-import org.jboss.marshalling.Creator;
-import org.jboss.marshalling.Externalizer;
-import org.jboss.marshalling.Marshaller;
-import org.jboss.marshalling.Unmarshaller;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- * Externalizes an UnsuccessfulResponse
- *
- * @author Manik Surtani
- * @since 4.0
- * @deprecated Not needed UnsuccessfulResponseExternalizer, it's more 
- * performant adding singleton instance to ObjectTable, see 
- * RequestIgnoredResponse example in CustomObjectTable
- */
- at Deprecated
-public class UnsuccessfulResponseExternalizer implements Externalizer {
-   public void writeExternal(Object o, ObjectOutput objectOutput) throws IOException {
-   }
-
-   public Object createExternal(Class<?> aClass, ObjectInput objectInput, Creator creator) throws IOException, ClassNotFoundException {
-      return UnsuccessfulResponse.INSTANCE;
-   }
-
-   public void readExternal(Object o, ObjectInput objectInput) throws IOException, ClassNotFoundException {
-   }
-}




More information about the infinispan-commits mailing list