Repository: geode Updated Branches: refs/heads/feature/GEODE-2995 fd303dff5 -> a460ee7c2
GEODE-2995: Adding Service Loading for all codecs or type TypeCodec Project: http://git-wip-us.apache.org/repos/asf/geode/repo Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/a460ee7c Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/a460ee7c Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/a460ee7c Branch: refs/heads/feature/GEODE-2995 Commit: a460ee7c2a577980932bc5643b02bba9d51c6d91 Parents: fd303df Author: Udo Kohlmeyer <[email protected]> Authored: Tue Jun 13 17:15:00 2017 -0700 Committer: Udo Kohlmeyer <[email protected]> Committed: Tue Jun 13 17:15:00 2017 -0700 ---------------------------------------------------------------------- .../apache/geode/serialization/TypeCodec.java | 2 ++ .../geode/serialization/codec/BinaryCodec.java | 6 +++++ .../geode/serialization/codec/BooleanCodec.java | 6 +++++ .../geode/serialization/codec/ByteCodec.java | 6 +++++ .../geode/serialization/codec/DoubleCodec.java | 6 +++++ .../geode/serialization/codec/FloatCodec.java | 6 +++++ .../geode/serialization/codec/IntCodec.java | 6 +++++ .../geode/serialization/codec/JSONCodec.java | 6 +++++ .../geode/serialization/codec/LongCodec.java | 6 +++++ .../geode/serialization/codec/ShortCodec.java | 6 +++++ .../geode/serialization/codec/StringCodec.java | 6 +++++ .../registry/SerializationCodecRegistry.java | 12 ++++++++++ .../org.apache.geode.serialization.TypeCodec | 10 +++++++++ .../geode/client/protocol/OpsProcessorTest.java | 5 +++++ .../registry/CodecRegistryJUnitTest.java | 23 ++++++++++++++++---- 15 files changed, 108 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/TypeCodec.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/TypeCodec.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/TypeCodec.java index a4eec96..f2c7f90 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/TypeCodec.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/TypeCodec.java @@ -18,4 +18,6 @@ public interface TypeCodec<T> { T decode(byte[] incoming); byte[] encode(T incoming); + + SerializationType getSerializationType(); } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/BinaryCodec.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/BinaryCodec.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/BinaryCodec.java index 13a4b37..e1445fc 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/BinaryCodec.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/BinaryCodec.java @@ -16,6 +16,7 @@ */ package org.apache.geode.serialization.codec; +import org.apache.geode.serialization.SerializationType; import org.apache.geode.serialization.TypeCodec; public class BinaryCodec implements TypeCodec<byte[]> { @@ -28,4 +29,9 @@ public class BinaryCodec implements TypeCodec<byte[]> { public byte[] encode(byte[] incoming) { return incoming; } + + @Override + public SerializationType getSerializationType() { + return SerializationType.BINARY; + } } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/BooleanCodec.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/BooleanCodec.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/BooleanCodec.java index 445bb97..002fd6c 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/BooleanCodec.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/BooleanCodec.java @@ -16,6 +16,7 @@ */ package org.apache.geode.serialization.codec; +import org.apache.geode.serialization.SerializationType; import org.apache.geode.serialization.TypeCodec; import java.nio.ByteBuffer; @@ -30,4 +31,9 @@ public class BooleanCodec implements TypeCodec<Boolean> { public byte[] encode(Boolean incoming) { return ByteBuffer.allocate(Byte.BYTES).put(incoming ? (byte) 1 : (byte) 0).array(); } + + @Override + public SerializationType getSerializationType() { + return SerializationType.BOOLEAN; + } } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/ByteCodec.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/ByteCodec.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/ByteCodec.java index 30d4238..366e032 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/ByteCodec.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/ByteCodec.java @@ -16,6 +16,7 @@ */ package org.apache.geode.serialization.codec; +import org.apache.geode.serialization.SerializationType; import org.apache.geode.serialization.TypeCodec; import java.nio.ByteBuffer; @@ -30,4 +31,9 @@ public class ByteCodec implements TypeCodec<Byte> { public byte[] encode(Byte incoming) { return ByteBuffer.allocate(Byte.BYTES).put(incoming).array(); } + + @Override + public SerializationType getSerializationType() { + return SerializationType.BYTE; + } } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/DoubleCodec.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/DoubleCodec.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/DoubleCodec.java index e312d69..6f6746e 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/DoubleCodec.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/DoubleCodec.java @@ -16,6 +16,7 @@ */ package org.apache.geode.serialization.codec; +import org.apache.geode.serialization.SerializationType; import org.apache.geode.serialization.TypeCodec; import java.nio.ByteBuffer; @@ -30,4 +31,9 @@ public class DoubleCodec implements TypeCodec<Double> { public byte[] encode(Double incoming) { return ByteBuffer.allocate(Double.BYTES).putDouble(incoming).array(); } + + @Override + public SerializationType getSerializationType() { + return SerializationType.DOUBLE; + } } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/FloatCodec.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/FloatCodec.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/FloatCodec.java index 87d2704..825528f 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/FloatCodec.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/FloatCodec.java @@ -16,6 +16,7 @@ */ package org.apache.geode.serialization.codec; +import org.apache.geode.serialization.SerializationType; import org.apache.geode.serialization.TypeCodec; import java.nio.ByteBuffer; @@ -30,4 +31,9 @@ public class FloatCodec implements TypeCodec<Float> { public byte[] encode(Float incoming) { return ByteBuffer.allocate(Float.BYTES).putFloat(incoming).array(); } + + @Override + public SerializationType getSerializationType() { + return SerializationType.FLOAT; + } } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/IntCodec.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/IntCodec.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/IntCodec.java index 45f5204..66f7c12 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/IntCodec.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/IntCodec.java @@ -16,6 +16,7 @@ */ package org.apache.geode.serialization.codec; +import org.apache.geode.serialization.SerializationType; import org.apache.geode.serialization.TypeCodec; import java.nio.ByteBuffer; @@ -31,4 +32,9 @@ public class IntCodec implements TypeCodec<Integer> { public byte[] encode(Integer incoming) { return ByteBuffer.allocate(Integer.BYTES).putInt(incoming).array(); } + + @Override + public SerializationType getSerializationType() { + return SerializationType.INT; + } } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/JSONCodec.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/JSONCodec.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/JSONCodec.java index 3ef91b4..7a551e7 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/JSONCodec.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/JSONCodec.java @@ -18,6 +18,7 @@ package org.apache.geode.serialization.codec; import org.apache.geode.pdx.JSONFormatter; import org.apache.geode.pdx.PdxInstance; +import org.apache.geode.serialization.SerializationType; import org.apache.geode.serialization.TypeCodec; public class JSONCodec implements TypeCodec<PdxInstance> { @@ -30,4 +31,9 @@ public class JSONCodec implements TypeCodec<PdxInstance> { public byte[] encode(PdxInstance incoming) { return JSONFormatter.toJSONByteArray(incoming); } + + @Override + public SerializationType getSerializationType() { + return SerializationType.JSON; + } } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/LongCodec.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/LongCodec.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/LongCodec.java index 394f56f..aa509df 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/LongCodec.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/LongCodec.java @@ -16,6 +16,7 @@ */ package org.apache.geode.serialization.codec; +import org.apache.geode.serialization.SerializationType; import org.apache.geode.serialization.TypeCodec; import java.nio.ByteBuffer; @@ -30,4 +31,9 @@ public class LongCodec implements TypeCodec<Long> { public byte[] encode(Long incoming) { return ByteBuffer.allocate(Long.BYTES).putLong(incoming).array(); } + + @Override + public SerializationType getSerializationType() { + return SerializationType.LONG; + } } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/ShortCodec.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/ShortCodec.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/ShortCodec.java index 634c343..4e84a22 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/ShortCodec.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/ShortCodec.java @@ -16,6 +16,7 @@ */ package org.apache.geode.serialization.codec; +import org.apache.geode.serialization.SerializationType; import org.apache.geode.serialization.TypeCodec; import java.nio.ByteBuffer; @@ -30,4 +31,9 @@ public class ShortCodec implements TypeCodec<Short> { public byte[] encode(Short incoming) { return ByteBuffer.allocate(Short.BYTES).putShort(incoming).array(); } + + @Override + public SerializationType getSerializationType() { + return SerializationType.SHORT; + } } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/StringCodec.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/StringCodec.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/StringCodec.java index b4168a9..d62ac1d 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/StringCodec.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/codec/StringCodec.java @@ -16,6 +16,7 @@ */ package org.apache.geode.serialization.codec; +import org.apache.geode.serialization.SerializationType; import org.apache.geode.serialization.TypeCodec; import java.nio.charset.Charset; @@ -32,4 +33,9 @@ public class StringCodec implements TypeCodec<String> { public byte[] encode(String incoming) { return incoming.getBytes(UTF8); } + + @Override + public SerializationType getSerializationType() { + return SerializationType.STRING; + } } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/java/org/apache/geode/serialization/registry/SerializationCodecRegistry.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/registry/SerializationCodecRegistry.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/registry/SerializationCodecRegistry.java index 278770b..2c88306 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/registry/SerializationCodecRegistry.java +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/registry/SerializationCodecRegistry.java @@ -20,10 +20,18 @@ import org.apache.geode.serialization.registry.exception.CodecAlreadyRegisteredF import org.apache.geode.serialization.registry.exception.CodecNotRegisteredForTypeException; import java.util.HashMap; +import java.util.ServiceLoader; public class SerializationCodecRegistry { private HashMap<SerializationType, TypeCodec> codecRegistry = new HashMap<>(); + public SerializationCodecRegistry() throws CodecAlreadyRegisteredForTypeException { + ServiceLoader<TypeCodec> typeCodecs = ServiceLoader.load(TypeCodec.class); + for (TypeCodec typeCodec : typeCodecs) { + register(typeCodec.getSerializationType(), typeCodec); + } + } + public synchronized void register(SerializationType serializationType, TypeCodec<?> typeCodec) throws CodecAlreadyRegisteredForTypeException { if (codecRegistry.containsKey(serializationType)) { @@ -46,4 +54,8 @@ public class SerializationCodecRegistry { } return typeCodec; } + + public void shutdown() { + codecRegistry.clear(); + } } http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.serialization.TypeCodec ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.serialization.TypeCodec b/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.serialization.TypeCodec new file mode 100644 index 0000000..1b7b333 --- /dev/null +++ b/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.serialization.TypeCodec @@ -0,0 +1,10 @@ +org.apache.geode.serialization.codec.BinaryCodec +org.apache.geode.serialization.codec.BooleanCodec +org.apache.geode.serialization.codec.ByteCodec +org.apache.geode.serialization.codec.DoubleCodec +org.apache.geode.serialization.codec.FloatCodec +org.apache.geode.serialization.codec.IntCodec +org.apache.geode.serialization.codec.JSONCodec +org.apache.geode.serialization.codec.LongCodec +org.apache.geode.serialization.codec.ShortCodec +org.apache.geode.serialization.codec.StringCodec http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/test/java/org/apache/geode/client/protocol/OpsProcessorTest.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/test/java/org/apache/geode/client/protocol/OpsProcessorTest.java b/geode-protobuf/src/test/java/org/apache/geode/client/protocol/OpsProcessorTest.java index 10f4f2b..271b934 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/client/protocol/OpsProcessorTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/client/protocol/OpsProcessorTest.java @@ -52,6 +52,11 @@ public class OpsProcessorTest { public byte[] encode(String incoming) { return incoming.getBytes(); } + + @Override + public SerializationType getSerializationType() { + return null; + } }); ClientProtocol.Request messageRequest = ClientProtocol.Request.newBuilder() http://git-wip-us.apache.org/repos/asf/geode/blob/a460ee7c/geode-protobuf/src/test/java/org/apache/geode/serialization/registry/CodecRegistryJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/test/java/org/apache/geode/serialization/registry/CodecRegistryJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/serialization/registry/CodecRegistryJUnitTest.java index da63f31..a6c3e78 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/serialization/registry/CodecRegistryJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/serialization/registry/CodecRegistryJUnitTest.java @@ -19,15 +19,28 @@ import org.apache.geode.serialization.TypeCodec; import org.apache.geode.serialization.registry.exception.CodecAlreadyRegisteredForTypeException; import org.apache.geode.serialization.registry.exception.CodecNotRegisteredForTypeException; import org.apache.geode.test.junit.categories.UnitTest; +import org.junit.After; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.mockito.Mockito; @Category(UnitTest.class) public class CodecRegistryJUnitTest { + private SerializationCodecRegistry codecRegistry; + @Before + public void startup() throws CodecAlreadyRegisteredForTypeException { + codecRegistry = new SerializationCodecRegistry(); + } + + @After + public void tearDown(){ + codecRegistry.shutdown(); + } + @Test public void testRegisterCodec() throws CodecAlreadyRegisteredForTypeException { - SerializationCodecRegistry codecRegistry = new SerializationCodecRegistry(); Assert.assertEquals(0, codecRegistry.getRegisteredCodecCount()); codecRegistry.register(SerializationType.INT, new DummyTypeCodec()); Assert.assertEquals(1, codecRegistry.getRegisteredCodecCount()); @@ -36,7 +49,6 @@ public class CodecRegistryJUnitTest { @Test public void testRegisteringCodecForRegisteredType_throwsException() throws CodecAlreadyRegisteredForTypeException { - SerializationCodecRegistry codecRegistry = new SerializationCodecRegistry(); codecRegistry.register(SerializationType.INT, new DummyTypeCodec()); boolean caughtException = false; @@ -52,7 +64,6 @@ public class CodecRegistryJUnitTest { @Test public void testGetRegisteredCodec() throws CodecAlreadyRegisteredForTypeException, CodecNotRegisteredForTypeException { - SerializationCodecRegistry codecRegistry = new SerializationCodecRegistry(); TypeCodec expectedCodec = new DummyTypeCodec(); codecRegistry.register(SerializationType.INT, expectedCodec); Assert.assertEquals(1, codecRegistry.getRegisteredCodecCount()); @@ -62,7 +73,6 @@ public class CodecRegistryJUnitTest { @Test public void testGetCodecForUnregisteredType_throwsException() { - SerializationCodecRegistry codecRegistry = new SerializationCodecRegistry(); boolean caughtException = false; try { codecRegistry.getCodecForType(SerializationType.INT); @@ -83,5 +93,10 @@ public class CodecRegistryJUnitTest { public byte[] encode(Object incoming) { return new byte[0]; } + + @Override + public SerializationType getSerializationType() { + return Mockito.mock(SerializationType.class); + } } }
