[infinispan-commits] Infinispan SVN: r521 - trunk/core/src/main/java/org/infinispan/marshall/jboss.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Wed Jul 8 05:03:29 EDT 2009


Author: galder.zamarreno at jboss.com
Date: 2009-07-08 05:03:28 -0400 (Wed, 08 Jul 2009)
New Revision: 521

Modified:
   trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java
Log:
Make singleton instances use ExternalizerAdapter as well to avoid an instanceof call when reading objects.

Modified: trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java	2009-07-08 08:30:45 UTC (rev 520)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/ConstantObjectTable.java	2009-07-08 09:03:28 UTC (rev 521)
@@ -187,10 +187,12 @@
 
    public void init(RemoteCommandFactory cmdFactory, org.infinispan.marshall.Marshaller ispnMarshaller) {
       // Init singletons
-      objects.add(RequestIgnoredResponse.INSTANCE);
-      writers.put(RequestIgnoredResponse.class, new ExternalizerAdapter(index++, new InstanceWriter()));
-      objects.add(UnsuccessfulResponse.INSTANCE);
-      writers.put(UnsuccessfulResponse.class, new ExternalizerAdapter(index++, new InstanceWriter()));
+      ExternalizerAdapter adapter = new ExternalizerAdapter(index++, new InstanceWriter(RequestIgnoredResponse.INSTANCE));
+      objects.add(adapter);
+      writers.put(RequestIgnoredResponse.class, adapter);
+      adapter = new ExternalizerAdapter(index++, new InstanceWriter(UnsuccessfulResponse.INSTANCE));
+      objects.add(adapter);
+      writers.put(UnsuccessfulResponse.class, adapter);
       
       try {
          for (Map.Entry<String, String> entry : EXTERNALIZERS.entrySet()) {
@@ -226,20 +228,23 @@
    }
 
    public Object readObject(Unmarshaller unmarshaller) throws IOException, ClassNotFoundException {
-      Object o = objects.get(unmarshaller.readUnsignedByte());
-      if (o instanceof ExternalizerAdapter) {
-         return ((ExternalizerAdapter) o).readObject(unmarshaller);
-      }
-      return o;
+      ExternalizerAdapter adapter = (ExternalizerAdapter) objects.get(unmarshaller.readUnsignedByte());
+      return adapter.readObject(unmarshaller);
    }
    
    static class InstanceWriter implements Externalizer {
+      private final Object singleton;
+      
+      InstanceWriter(Object singleton) {
+         this.singleton = singleton;
+      }
+      
       public void writeObject(ObjectOutput output, Object object) throws IOException {
          // no-op
       }
       
       public Object readObject(ObjectInput input) throws IOException, ClassNotFoundException {
-         throw new CacheException("Read on constant instances shouldn't be called");
+         return singleton;
       }
    }
    




More information about the infinispan-commits mailing list