[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