IGNITE-2100: Removed dedicated Externalizable support.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/2e2d4748 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/2e2d4748 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/2e2d4748 Branch: refs/heads/ignite-2100 Commit: 2e2d474840d453638248124220083bff5f486bfd Parents: 6a038cb Author: vozerov-gridgain <[email protected]> Authored: Tue Dec 15 13:21:36 2015 +0300 Committer: vozerov-gridgain <[email protected]> Committed: Tue Dec 15 13:21:36 2015 +0300 ---------------------------------------------------------------------- .../internal/binary/BinaryClassDescriptor.java | 84 ++++---------------- .../ignite/internal/binary/BinaryContext.java | 4 +- .../internal/binary/BinaryFieldAccessor.java | 3 - .../ignite/internal/binary/BinaryUtils.java | 3 - .../ignite/internal/binary/BinaryWriteMode.java | 3 - .../binary/BinaryMarshallerSelfTest.java | 31 ++++---- 6 files changed, 32 insertions(+), 96 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/2e2d4748/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java index 88147a5..d348942 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java @@ -18,7 +18,6 @@ package org.apache.ignite.internal.binary; import java.io.Externalizable; -import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Constructor; @@ -165,26 +164,22 @@ public class BinaryClassDescriptor { useOptMarshaller = !predefined && useDfltSerialization && initUseOptimizedMarshallerFlag(); - BinaryWriteMode mode0; - if (excluded) - mode0 = BinaryWriteMode.EXCLUSION; + mode = BinaryWriteMode.EXCLUSION; else { if (cls == BinaryEnumObjectImpl.class) - mode0 = BinaryWriteMode.BINARY_ENUM; + mode = BinaryWriteMode.BINARY_ENUM; else - mode0 = serializer != null ? BinaryWriteMode.BINARY : BinaryUtils.mode(cls); + mode = serializer != null ? BinaryWriteMode.BINARY : BinaryUtils.mode(cls); } - if (!useDfltSerialization && mode0 == BinaryWriteMode.EXTERNALIZABLE) { - mode0 = BinaryWriteMode.OBJECT; + if (useOptMarshaller) { + // TODO: IGNITE-2100: Correct warning. U.warn(ctx.log(), "Ignored \"Externalizable\" interface for class (use " + "BinaryTypeConfiguration.setUseDefaultSerialization(true) to enable it): " + cls.getName()); } - mode = mode0; - switch (mode) { case P_BYTE: case P_BOOLEAN: @@ -237,7 +232,6 @@ public class BinaryClassDescriptor { break; case BINARY: - case EXTERNALIZABLE: ctor = constructor(cls); fields = null; stableFieldsMeta = null; @@ -280,8 +274,11 @@ public class BinaryClassDescriptor { schemaBuilder.addField(fieldId); - if (metaDataEnabled) + if (metaDataEnabled) { + assert stableFieldsMeta != null; + stableFieldsMeta.put(name, fieldInfo.mode().typeId()); + } } } } @@ -297,29 +294,9 @@ public class BinaryClassDescriptor { throw new BinaryObjectException("Invalid mode: " + mode); } - if (mode == BinaryWriteMode.BINARY || mode == BinaryWriteMode.EXTERNALIZABLE || - mode == BinaryWriteMode.OBJECT) { - Method readResolveMtd0 = U.findNonPublicMethod(cls, "readResolve"); - Method writeReplaceMtd0 = U.findNonPublicMethod(cls, "writeReplace"); - - if (useDfltSerialization) { - readResolveMtd = readResolveMtd0; - writeReplaceMtd = writeReplaceMtd0; - } - else { - if (readResolveMtd0 != null) { - U.warn(ctx.log(), "Ignored \"readResolve()\" method for class (use " + - "BinaryTypeConfiguration.setUseDefaultSerialization(true) to enable it): " + cls.getName()); - } - - if (writeReplaceMtd0 != null) { - U.warn(ctx.log(), "Ignored \"writeReplace()\" method for class (use " + - "BinaryTypeConfiguration.setUseDefaultSerialization(true) to enable it): " + cls.getName()); - } - - readResolveMtd = null; - writeReplaceMtd = null; - } + if (mode == BinaryWriteMode.BINARY || mode == BinaryWriteMode.OBJECT) { + readResolveMtd = U.findNonPublicMethod(cls, "readResolve"); + writeReplaceMtd = U.findNonPublicMethod(cls, "writeReplace"); } else { readResolveMtd = null; @@ -640,25 +617,6 @@ public class BinaryClassDescriptor { break; - case EXTERNALIZABLE: - if (preWrite(writer, obj)) { - writer.rawWriter(); - - try { - ((Externalizable)obj).writeExternal(writer); - - postWrite(writer, obj); - } - catch (IOException e) { - throw new BinaryObjectException("Failed to write Externalizable object: " + obj, e); - } - finally { - writer.popSchema(); - } - } - - break; - case OBJECT: if (preWrite(writer, obj)) { try { @@ -704,21 +662,6 @@ public class BinaryClassDescriptor { break; - case EXTERNALIZABLE: - res = newInstance(); - - reader.setHandle(res); - - try { - ((Externalizable)res).readExternal(reader); - } - catch (IOException | ClassNotFoundException e) { - throw new BinaryObjectException("Failed to read Externalizable object: " + - res.getClass().getName(), e); - } - - break; - case OBJECT: res = newInstance(); @@ -827,6 +770,9 @@ public class BinaryClassDescriptor { @SuppressWarnings("unchecked") private boolean initUseOptimizedMarshallerFlag() { for (Class c = cls; c != null && !c.equals(Object.class); c = c.getSuperclass()) { + if (Externalizable.class.isAssignableFrom(c)) + return true; + try { Method writeObj = c.getDeclaredMethod("writeObject", ObjectOutputStream.class); Method readObj = c.getDeclaredMethod("readObject", ObjectInputStream.class); http://git-wip-us.apache.org/repos/asf/ignite/blob/2e2d4748/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java index f227238..73fc71d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java @@ -137,7 +137,7 @@ public class BinaryContext implements Externalizable { private IgniteLogger log; /** */ - private final OptimizedMarshaller optmMarsh = new OptimizedMarshaller(); + private final OptimizedMarshaller optmMarsh = new OptimizedMarshaller(false); /** Compact footer flag. */ private boolean compactFooter; @@ -216,6 +216,8 @@ public class BinaryContext implements Externalizable { // Classes with overriden default serialziation flag. registerPredefinedType(AffinityKey.class, 0, false); + registerPredefinedType(BinaryObjectImpl.class, 0, false); + registerPredefinedType(BinaryObjectOffheapImpl.class, 0, false); registerPredefinedType(GridMapEntry.class, 60); registerPredefinedType(IgniteBiTuple.class, 61); http://git-wip-us.apache.org/repos/asf/ignite/blob/2e2d4748/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java index 8050edd..2d69cbd 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java @@ -105,7 +105,6 @@ public abstract class BinaryFieldAccessor { case OBJECT_ARR: case BINARY_OBJ: case BINARY: - case EXTERNALIZABLE: return new DefaultFinalClassAccessor(field, id, mode, false); default: @@ -624,7 +623,6 @@ public abstract class BinaryFieldAccessor { break; case BINARY: - case EXTERNALIZABLE: case OBJECT: writer.writeObjectField(val); @@ -825,7 +823,6 @@ public abstract class BinaryFieldAccessor { break; case BINARY: - case EXTERNALIZABLE: case OBJECT: val = reader.readObject(id); http://git-wip-us.apache.org/repos/asf/ignite/blob/2e2d4748/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java index 9e5260b..c999657 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java @@ -33,7 +33,6 @@ import org.jetbrains.annotations.Nullable; import org.jsr166.ConcurrentHashMap8; import java.io.ByteArrayInputStream; -import java.io.Externalizable; import java.lang.reflect.Array; import java.math.BigDecimal; import java.math.BigInteger; @@ -952,8 +951,6 @@ public class BinaryUtils { return BinaryWriteMode.BINARY_OBJ; else if (Binarylizable.class.isAssignableFrom(cls)) return BinaryWriteMode.BINARY; - else if (Externalizable.class.isAssignableFrom(cls)) - return BinaryWriteMode.EXTERNALIZABLE; else if (isSpecialCollection(cls)) return BinaryWriteMode.COL; else if (isSpecialMap(cls)) http://git-wip-us.apache.org/repos/asf/ignite/blob/2e2d4748/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriteMode.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriteMode.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriteMode.java index 90127f4..30e0458 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriteMode.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriteMode.java @@ -151,9 +151,6 @@ public enum BinaryWriteMode { BINARY(GridBinaryMarshaller.BINARY_OBJ), /** */ - EXTERNALIZABLE(GridBinaryMarshaller.OBJ), - - /** */ OBJECT(GridBinaryMarshaller.OBJ), /** */ http://git-wip-us.apache.org/repos/asf/ignite/blob/2e2d4748/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java index 496d072..fcd511b 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java @@ -436,23 +436,6 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { /** * @throws Exception If failed. */ - public void testExternalizableHashCode() throws Exception { - SimpleExternalizable sim1 = new SimpleExternalizable("Simple"); - SimpleExternalizable sim2 = new SimpleExternalizable("Simple"); - - BinaryMarshaller marsh = binaryMarshaller(); - - BinaryObjectImpl sim1Binary = marshal(sim1, marsh); - BinaryObjectImpl sim2Binary = marshal(sim2, marsh); - - assertEquals(sim1.hashCode(), sim2.hashCode()); - assertEquals(sim1.hashCode(), sim1Binary.hashCode()); - assertEquals(sim2.hashCode(), sim2Binary.hashCode()); - } - - /** - * @throws Exception If failed. - */ public void testExternalizableInEnclosing() throws Exception { SimpleEnclosingObject obj = new SimpleEnclosingObject(); obj.simpl = new SimpleExternalizable("field"); @@ -798,6 +781,13 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { private String name; /** + * {@link Externalizable} support. + */ + public TestQueue() { + // No-op. + } + + /** * @param name Name. */ public TestQueue(String name) { @@ -4068,6 +4058,13 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { private String field; /** + * {@link Externalizable} support. + */ + public SimpleExternalizable() { + // No-op. + } + + /** * @param field Field. */ public SimpleExternalizable(String field) {
