You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2014/12/11 08:56:25 UTC

[3/3] incubator-calcite git commit: Make JsonHandler and JsonService thread-safe

Make JsonHandler and JsonService thread-safe


Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/cfa1847b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/cfa1847b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/cfa1847b

Branch: refs/heads/master
Commit: cfa1847bc916eeb07aa73eadbe0257f2dfbc9212
Parents: 0ab7f5e
Author: Julian Hyde <jh...@apache.org>
Authored: Wed Dec 10 20:23:34 2014 -0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Wed Dec 10 23:03:32 2014 -0800

----------------------------------------------------------------------
 .../calcite/avatica/remote/JsonHandler.java     | 19 ++++++------------
 .../calcite/avatica/remote/JsonService.java     | 21 ++++++++++----------
 .../avatica/remote/LocalJsonService.java        | 11 +++++-----
 3 files changed, 21 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/cfa1847b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java
index 80593e9..dee0636 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java
@@ -16,7 +16,6 @@
  */
 package org.apache.calcite.avatica.remote;
 
-import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import java.io.IOException;
@@ -31,15 +30,11 @@ import java.io.StringWriter;
  */
 public class JsonHandler implements Handler {
   private final Service service;
-  protected final ObjectMapper mapper;
-  protected final StringWriter w = new StringWriter();
+
+  protected static final ObjectMapper MAPPER = JsonService.MAPPER;
 
   public JsonHandler(Service service) {
-    super();
     this.service = service;
-    mapper = new ObjectMapper();
-    mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
-    mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
   }
 
   public String apply(String jsonRequest) {
@@ -53,15 +48,13 @@ public class JsonHandler implements Handler {
   }
 
   private <T> T decode(String request, Class<T> valueType) throws IOException {
-    return mapper.readValue(request, valueType);
+    return MAPPER.readValue(request, valueType);
   }
 
   private <T> String encode(T response) throws IOException {
-    assert w.getBuffer().length() == 0;
-    mapper.writeValue(w, response);
-    final String s = w.toString();
-    w.getBuffer().setLength(0);
-    return s;
+    final StringWriter w = new StringWriter();
+    MAPPER.writeValue(w, response);
+    return w.toString();
   }
 
   protected RuntimeException handle(IOException e) {

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/cfa1847b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
index 68f8782..3de4ef0 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
@@ -27,13 +27,14 @@ import java.io.StringWriter;
  * that encodes requests and responses as JSON.
  */
 public abstract class JsonService implements Service {
-  protected final ObjectMapper mapper;
-  protected final StringWriter w = new StringWriter();
+  protected static final ObjectMapper MAPPER;
+  static {
+    MAPPER = new ObjectMapper();
+    MAPPER.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
+    MAPPER.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
+  }
 
   public JsonService() {
-    mapper = new ObjectMapper();
-    mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
-    mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
   }
 
   /** Derived class should implement this method to transport requests and
@@ -41,15 +42,13 @@ public abstract class JsonService implements Service {
   public abstract String apply(String request);
 
   private <T> T decode(String response, Class<T> valueType) throws IOException {
-    return mapper.readValue(response, valueType);
+    return MAPPER.readValue(response, valueType);
   }
 
   private <T> String encode(T request) throws IOException {
-    assert w.getBuffer().length() == 0;
-    mapper.writeValue(w, request);
-    final String s = w.toString();
-    w.getBuffer().setLength(0);
-    return s;
+    final StringWriter w = new StringWriter();
+    MAPPER.writeValue(w, request);
+    return w.toString();
   }
 
   protected RuntimeException handle(IOException e) {

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/cfa1847b/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalJsonService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalJsonService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalJsonService.java
index 66b4b7d..0af6300 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalJsonService.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalJsonService.java
@@ -17,6 +17,7 @@
 package org.apache.calcite.avatica.remote;
 
 import java.io.IOException;
+import java.io.StringWriter;
 
 /**
  * Implementation of {@link org.apache.calcite.avatica.remote.Service}
@@ -31,13 +32,11 @@ public class LocalJsonService extends JsonService {
 
   @Override public String apply(String request) {
     try {
-      Request request2 = mapper.readValue(request, Request.class);
+      Request request2 = MAPPER.readValue(request, Request.class);
       Response response2 = request2.accept(service);
-      assert w.getBuffer().length() == 0;
-      mapper.writeValue(w, response2);
-      final String response = w.toString();
-      w.getBuffer().setLength(0);
-      return response;
+      final StringWriter w = new StringWriter();
+      MAPPER.writeValue(w, response2);
+      return w.toString();
     } catch (IOException e) {
       throw handle(e);
     }