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

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Wed Jul 28 02:23:30 EDT 2010


Author: galder.zamarreno at jboss.com
Date: 2010-07-28 02:23:30 -0400 (Wed, 28 Jul 2010)
New Revision: 2112

Added:
   trunk/core/src/test/java/org/infinispan/marshall/MarshalledValueSingleNodeTest.java
Modified:
   trunk/core/src/main/java/org/infinispan/marshall/MarshalledValue.java
   trunk/core/src/main/java/org/infinispan/marshall/Marshaller.java
   trunk/core/src/main/java/org/infinispan/marshall/VersionAwareMarshaller.java
   trunk/core/src/main/java/org/infinispan/marshall/jboss/GenericJBossMarshaller.java
   trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java
   trunk/core/src/test/java/org/infinispan/marshall/TestObjectStreamMarshaller.java
Log:
[ISPN-552] (Tree facade caches cannot be configured with lazy deserialization) Reverted fix and use instead Marshaller.isMarshallable to make decision early on.

Modified: trunk/core/src/main/java/org/infinispan/marshall/MarshalledValue.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/MarshalledValue.java	2010-07-27 16:31:49 UTC (rev 2111)
+++ trunk/core/src/main/java/org/infinispan/marshall/MarshalledValue.java	2010-07-28 06:23:30 UTC (rev 2112)
@@ -61,7 +61,11 @@
    public MarshalledValue(Object instance, boolean equalityPreferenceForInstance, StreamingMarshaller marshaller) throws NotSerializableException {
       if (instance == null) throw new NullPointerException("Null values cannot be wrapped as MarshalledValues!");
 
-      this.instance = instance;
+      if (marshaller.isMarshallable(instance))
+         this.instance = instance;
+      else
+         throw new NotSerializableException("Marshalled values can only wrap Objects that can be serialized or marshalled!  Instance of " 
+               + instance.getClass() + " won't serialize or marshall.");
       this.equalityPreferenceForInstance = equalityPreferenceForInstance;
       this.marshaller = marshaller;
    }

Modified: trunk/core/src/main/java/org/infinispan/marshall/Marshaller.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/Marshaller.java	2010-07-27 16:31:49 UTC (rev 2111)
+++ trunk/core/src/main/java/org/infinispan/marshall/Marshaller.java	2010-07-28 06:23:30 UTC (rev 2112)
@@ -77,5 +77,13 @@
     * @throws Exception
     */
    ByteBuffer objectToBuffer(Object o) throws IOException;
+
+   /**
+    * A method that checks whether the given object is marshallable as per the rules of this marshaller.
+    * 
+    * @param o object to verify whether it's marshallable or not
+    * @return true if the object is marshallable, otherwise false
+    */
+   boolean isMarshallable(Object o);
 }
 

Modified: trunk/core/src/main/java/org/infinispan/marshall/VersionAwareMarshaller.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/VersionAwareMarshaller.java	2010-07-27 16:31:49 UTC (rev 2111)
+++ trunk/core/src/main/java/org/infinispan/marshall/VersionAwareMarshaller.java	2010-07-28 06:23:30 UTC (rev 2112)
@@ -188,4 +188,9 @@
    public Object objectFromByteBuffer(byte[] buf) throws IOException, ClassNotFoundException {
       return objectFromByteBuffer(buf, 0, buf.length);
    }
+
+   @Override
+   public boolean isMarshallable(Object o) {
+      return defaultMarshaller.isMarshallable(o);
+   }
 }
\ No newline at end of file

Modified: trunk/core/src/main/java/org/infinispan/marshall/jboss/GenericJBossMarshaller.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/GenericJBossMarshaller.java	2010-07-27 16:31:49 UTC (rev 2111)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/GenericJBossMarshaller.java	2010-07-28 06:23:30 UTC (rev 2112)
@@ -17,11 +17,13 @@
 import org.jboss.marshalling.reflect.SunReflectiveCreator;
 
 import java.io.ByteArrayInputStream;
+import java.io.Externalizable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.io.OutputStream;
+import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.net.URL;
 
@@ -197,6 +199,11 @@
       return objectToByteBuffer(o, DEFAULT_BUF_SIZE);
    }
 
+   @Override
+   public boolean isMarshallable(Object o) {
+      return (o instanceof Serializable || o instanceof Externalizable);
+   }
+
    protected static class DebuggingExceptionListener implements ExceptionListener {
       private static final URL[] EMPTY_URLS = {};
       private static final Class[] EMPTY_CLASSES = {};

Modified: trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java	2010-07-27 16:31:49 UTC (rev 2111)
+++ trunk/core/src/main/java/org/infinispan/marshall/jboss/JBossMarshaller.java	2010-07-28 06:23:30 UTC (rev 2112)
@@ -26,7 +26,9 @@
 import org.infinispan.io.ByteBuffer;
 import org.infinispan.io.ExposedByteArrayOutputStream;
 import org.infinispan.marshall.AbstractStreamingMarshaller;
+import org.infinispan.marshall.Marshallable;
 import org.infinispan.marshall.StreamingMarshaller;
+import org.infinispan.util.ReflectionUtil;
 import org.infinispan.util.Util;
 import org.infinispan.util.logging.Log;
 import org.infinispan.util.logging.LogFactory;
@@ -79,6 +81,11 @@
       if (objectTable != null) objectTable.stop();
    }
 
+   @Override
+   public boolean isMarshallable(Object o) {
+      return super.isMarshallable(o) || ReflectionUtil.isAnnotationPresent(o.getClass(), Marshallable.class);
+   }
+
    private ConstantObjectTable createCustomObjectTable(RemoteCommandsFactory cmdFactory, StreamingMarshaller ispnMarshaller) {
       ConstantObjectTable objectTable = new ConstantObjectTable();
       objectTable.start(cmdFactory, ispnMarshaller);

Added: trunk/core/src/test/java/org/infinispan/marshall/MarshalledValueSingleNodeTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/marshall/MarshalledValueSingleNodeTest.java	                        (rev 0)
+++ trunk/core/src/test/java/org/infinispan/marshall/MarshalledValueSingleNodeTest.java	2010-07-28 06:23:30 UTC (rev 2112)
@@ -0,0 +1,48 @@
+package org.infinispan.marshall;
+
+import org.infinispan.CacheException;
+import org.infinispan.config.Configuration;
+import org.infinispan.manager.EmbeddedCacheManager;
+import org.infinispan.test.SingleCacheManagerTest;
+import org.infinispan.test.fwk.TestCacheManagerFactory;
+import org.testng.annotations.Test;
+
+/**
+ * // TODO: Document this
+ *
+ * @author Galder Zamarreño
+ * @since // TODO
+ */
+ at Test(groups = "functional", testName = "marshall.MarshalledValueSingleNodeTest")
+public class MarshalledValueSingleNodeTest extends SingleCacheManagerTest {
+
+   @Override
+   protected EmbeddedCacheManager createCacheManager() throws Exception {
+      // start a single cache instance
+      Configuration c = getDefaultStandaloneConfig(true);
+      c.setInvocationBatchingEnabled(true);
+      c.setUseLazyDeserialization(true);
+      EmbeddedCacheManager cm = TestCacheManagerFactory.createCacheManager(c, true);
+      cache = cm.getCache();
+      return cm;
+   }
+
+   public void testNonSerializable() {
+      try {
+         cache.put("Hello", new Object());
+         assert false : "Should have failed";
+      }
+      catch (CacheException expected) {
+         System.out.println("");
+      }
+
+      try {
+         cache.put(new Object(), "Hello");
+         assert false : "Should have failed";
+      }
+      catch (CacheException expected) {
+
+      }
+   }
+
+}

Modified: trunk/core/src/test/java/org/infinispan/marshall/TestObjectStreamMarshaller.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/marshall/TestObjectStreamMarshaller.java	2010-07-27 16:31:49 UTC (rev 2111)
+++ trunk/core/src/test/java/org/infinispan/marshall/TestObjectStreamMarshaller.java	2010-07-28 06:23:30 UTC (rev 2112)
@@ -5,15 +5,7 @@
 import org.infinispan.io.ExposedByteArrayOutputStream;
 import org.infinispan.util.Util;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
+import java.io.*;
 
 /**
  * A dummy marshaller impl that uses object streams converted via XStream as current JBoss Marshalling implementation
@@ -90,6 +82,11 @@
       return objectFromObjectStream(new ObjectInputStream(new ByteArrayInputStream(buf)));
    }
 
+   @Override
+   public boolean isMarshallable(Object o) {
+      return (o instanceof Serializable || o instanceof Externalizable);
+   }
+
    private void debug(String s) {
       if (debugXml) {
          System.out.println("TestObjectStreamMarshaller: " + s);



More information about the infinispan-commits mailing list