Browse Source

flag for single and multiple db queries to provide the correct response type

Cody Lerum 11 years ago
parent
commit
ed827e2c92

+ 3 - 3
undertow/benchmark_config

@@ -24,7 +24,7 @@
     "mysql" : {
     "mysql" : {
       "setup_file": "setup",
       "setup_file": "setup",
       "db_url": "/db/mysql",
       "db_url": "/db/mysql",
-      "query_url": "/db/mysql?queries=",
+      "query_url": "/queries/mysql?queries=",
       "fortune_url": "/fortunes/mysql",
       "fortune_url": "/fortunes/mysql",
       "update_url": "/updates/mysql?queries=",
       "update_url": "/updates/mysql?queries=",
       "port": 8080,
       "port": 8080,
@@ -45,7 +45,7 @@
     "postgresql" : {
     "postgresql" : {
       "setup_file": "setup",
       "setup_file": "setup",
       "db_url": "/db/postgresql",
       "db_url": "/db/postgresql",
-      "query_url": "/db/postgresql?queries=",
+      "query_url": "/queries/postgresql?queries=",
       "fortune_url": "/fortunes/postgresql",
       "fortune_url": "/fortunes/postgresql",
       "update_url": "/updates/postgresql?queries=",
       "update_url": "/updates/postgresql?queries=",
       "port": 8080,
       "port": 8080,
@@ -66,7 +66,7 @@
     "mongodb" : {
     "mongodb" : {
       "setup_file": "setup",
       "setup_file": "setup",
       "db_url": "/db/mongodb",
       "db_url": "/db/mongodb",
-      "query_url": "/db/mongodb?queries=",
+      "query_url": "/queries/mongodb?queries=",
       "fortune_url": "/fortunes/mongodb",
       "fortune_url": "/fortunes/mongodb",
       "update_url": "/updates/mongodb?queries=",
       "update_url": "/updates/mongodb?queries=",
       "port": 8080,
       "port": 8080,

+ 16 - 5
undertow/src/main/java/hello/DbMongoHandler.java

@@ -18,10 +18,12 @@ import static hello.HelloWebServer.JSON_UTF8;
 final class DbMongoHandler implements HttpHandler {
 final class DbMongoHandler implements HttpHandler {
   private final ObjectMapper objectMapper;
   private final ObjectMapper objectMapper;
   private final DB database;
   private final DB database;
+  private final boolean multiple;
 
 
-  DbMongoHandler(ObjectMapper objectMapper, DB database) {
+  DbMongoHandler(ObjectMapper objectMapper, DB database, boolean multiple) {
     this.objectMapper = Objects.requireNonNull(objectMapper);
     this.objectMapper = Objects.requireNonNull(objectMapper);
     this.database = Objects.requireNonNull(database);
     this.database = Objects.requireNonNull(database);
+    this.multiple = multiple;
   }
   }
 
 
   @Override
   @Override
@@ -30,7 +32,13 @@ final class DbMongoHandler implements HttpHandler {
       exchange.dispatch(this);
       exchange.dispatch(this);
       return;
       return;
     }
     }
-    int queries = Helper.getQueries(exchange);
+    
+    int queries = 1;
+    if(multiple)
+    {
+      queries = Helper.getQueries(exchange);
+    }
+    
     World[] worlds = new World[queries];
     World[] worlds = new World[queries];
     for (int i = 0; i < queries; i++) {
     for (int i = 0; i < queries; i++) {
       DBObject object = database.getCollection("World").findOne(
       DBObject object = database.getCollection("World").findOne(
@@ -45,13 +53,16 @@ final class DbMongoHandler implements HttpHandler {
     }
     }
     exchange.getResponseHeaders().put(
     exchange.getResponseHeaders().put(
         Headers.CONTENT_TYPE, JSON_UTF8);
         Headers.CONTENT_TYPE, JSON_UTF8);
-    if (queries == 1)
+    
+    if (multiple)
     {
     {
-      exchange.getResponseSender().send(objectMapper.writeValueAsString(worlds[0]));
+      // If a multiple query then response must be an array
+      exchange.getResponseSender().send(objectMapper.writeValueAsString(worlds));
     }
     }
     else
     else
     {
     {
-      exchange.getResponseSender().send(objectMapper.writeValueAsString(worlds));
+      // If a single query then response must be an object
+      exchange.getResponseSender().send(objectMapper.writeValueAsString(worlds[0]));
     }
     }
   }
   }
 }
 }

+ 18 - 5
undertow/src/main/java/hello/DbSqlHandler.java

@@ -1,11 +1,13 @@
 package hello;
 package hello;
 
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
+
 import io.undertow.server.HttpHandler;
 import io.undertow.server.HttpHandler;
 import io.undertow.server.HttpServerExchange;
 import io.undertow.server.HttpServerExchange;
 import io.undertow.util.Headers;
 import io.undertow.util.Headers;
 
 
 import javax.sql.DataSource;
 import javax.sql.DataSource;
+
 import java.sql.Connection;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSet;
@@ -19,10 +21,12 @@ import static hello.HelloWebServer.JSON_UTF8;
 final class DbSqlHandler implements HttpHandler {
 final class DbSqlHandler implements HttpHandler {
   private final ObjectMapper objectMapper;
   private final ObjectMapper objectMapper;
   private final DataSource database;
   private final DataSource database;
+  private final boolean multiple;
 
 
-  DbSqlHandler(ObjectMapper objectMapper, DataSource database) {
+  DbSqlHandler(ObjectMapper objectMapper, DataSource database, boolean multiple) {
     this.objectMapper = Objects.requireNonNull(objectMapper);
     this.objectMapper = Objects.requireNonNull(objectMapper);
     this.database = Objects.requireNonNull(database);
     this.database = Objects.requireNonNull(database);
+    this.multiple = multiple;
   }
   }
 
 
   @Override
   @Override
@@ -31,7 +35,13 @@ final class DbSqlHandler implements HttpHandler {
       exchange.dispatch(this);
       exchange.dispatch(this);
       return;
       return;
     }
     }
-    int queries = Helper.getQueries(exchange);
+    
+    int queries = 1;
+    if(multiple)
+    {
+      queries = Helper.getQueries(exchange);
+    }
+    
     World[] worlds = new World[queries];
     World[] worlds = new World[queries];
     try (Connection connection = database.getConnection();
     try (Connection connection = database.getConnection();
          PreparedStatement statement = connection.prepareStatement(
          PreparedStatement statement = connection.prepareStatement(
@@ -50,13 +60,16 @@ final class DbSqlHandler implements HttpHandler {
     }
     }
     exchange.getResponseHeaders().put(
     exchange.getResponseHeaders().put(
         Headers.CONTENT_TYPE, JSON_UTF8);
         Headers.CONTENT_TYPE, JSON_UTF8);
-    if (queries == 1)
+    
+    if (multiple)
     {
     {
-      exchange.getResponseSender().send(objectMapper.writeValueAsString(worlds[0]));
+      // If a multiple query then response must be an array
+      exchange.getResponseSender().send(objectMapper.writeValueAsString(worlds));
     }
     }
     else
     else
     {
     {
-      exchange.getResponseSender().send(objectMapper.writeValueAsString(worlds));
+      // If a single query then response must be an object
+      exchange.getResponseSender().send(objectMapper.writeValueAsString(worlds[0]));
     }
     }
   }
   }
 }
 }

+ 9 - 3
undertow/src/main/java/hello/HelloWebServer.java

@@ -124,11 +124,17 @@ public final class HelloWebServer {
             .addPrefixPath("/json",
             .addPrefixPath("/json",
                 new JsonHandler(objectMapper))
                 new JsonHandler(objectMapper))
             .addPrefixPath("/db/mysql",
             .addPrefixPath("/db/mysql",
-                new DbSqlHandler(objectMapper, mysql))
+                new DbSqlHandler(objectMapper, mysql, false))
+            .addPrefixPath("/queries/mysql",
+                new DbSqlHandler(objectMapper, mysql, true))
             .addPrefixPath("/db/postgresql",
             .addPrefixPath("/db/postgresql",
-                new DbSqlHandler(objectMapper, postgresql))
+                new DbSqlHandler(objectMapper, postgresql, false))
+            .addPrefixPath("/queries/postgresql",
+                new DbSqlHandler(objectMapper, postgresql, true))
             .addPrefixPath("/db/mongodb",
             .addPrefixPath("/db/mongodb",
-                new DbMongoHandler(objectMapper, mongodb))
+                new DbMongoHandler(objectMapper, mongodb, false))
+            .addPrefixPath("/queries/mongodb",
+                new DbMongoHandler(objectMapper, mongodb, true))
             .addPrefixPath("/fortunes/mysql",
             .addPrefixPath("/fortunes/mysql",
                 new FortunesSqlHandler(mustacheFactory, mysql))
                 new FortunesSqlHandler(mustacheFactory, mysql))
             .addPrefixPath("/fortunes/postgresql",
             .addPrefixPath("/fortunes/postgresql",