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