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);
+    }
   }
 }

Reply via email to