Browse Source

Separate /db and /queries endpoint (#3348)

Radoslav Petrov 7 years ago
parent
commit
33974a6689

+ 3 - 3
frameworks/Java/servlet/benchmark_config.json

@@ -62,7 +62,7 @@
     "raw": {
       "setup_file": "setup_mysql",
       "db_url": "/servlet/db",
-      "query_url": "/servlet/db?queries=",
+      "query_url": "/servlet/queries?queries=",
       "fortune_url": "/servlet/fortunes",
       "update_url": "/servlet/update?queries=",
       "port": 8080,
@@ -83,7 +83,7 @@
     "postgres-raw": {
       "setup_file": "setup_postgresql",
       "db_url": "/servlet/db",
-      "query_url": "/servlet/db?queries=",
+      "query_url": "/servlet/queries?queries=",
       "cached_query_url": "/servlet/cached-worlds?queries=",
       "fortune_url": "/servlet/fortunes",
       "update_url": "/servlet/update?queries=",
@@ -142,4 +142,4 @@
       "versus": "servlet"
     }
   }]
-}
+}

+ 60 - 0
frameworks/Java/servlet/src/main/java/hello/DbSQLServlet.java

@@ -0,0 +1,60 @@
+package hello;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
+
+import javax.annotation.Resource;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
+
+/**
+ * Handles the single-query database test using a SQL database with a
+ * Servlet-container managed pool.
+ */
+@SuppressWarnings("serial")
+public class DbSQLServlet extends HttpServlet {
+	// Database details.
+	private static final String DB_QUERY = "SELECT * FROM World WHERE id = ?";
+	private static final int DB_ROWS = 10000;
+
+	// Database connection pool.
+	@Resource(name = "jdbc/hello_world")
+	private DataSource dataSource;
+
+	@Override
+	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
+			IOException {
+		// Reference the data source.
+		final Random random = ThreadLocalRandom.current();
+		World world = null;
+
+		// Fetch some rows from the database.
+		try (Connection conn = dataSource.getConnection()) {
+			try (PreparedStatement statement = conn.prepareStatement(DB_QUERY,
+					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) {
+				statement.setInt(1, random.nextInt(DB_ROWS) + 1);
+				try (ResultSet results = statement.executeQuery()) {
+					results.next(); // Here the expectation is ONLY only one
+									// result row
+					world = new World(results.getInt("id"), results.getInt("randomNumber"));
+				}
+			}
+		} catch (SQLException sqlex) {
+			throw new ServletException(sqlex);
+		}
+
+		// Set content type to JSON
+		res.setHeader(Common.HEADER_CONTENT_TYPE, Common.CONTENT_TYPE_JSON);
+
+		// Write JSON encoded message to the response.
+		Common.MAPPER.writeValue(res.getOutputStream(), world);
+	}
+}

+ 6 - 13
frameworks/Java/servlet/src/main/java/hello/DbPoolServlet.java → frameworks/Java/servlet/src/main/java/hello/QueriesSQLServlet.java

@@ -16,10 +16,10 @@ import javax.servlet.http.HttpServletResponse;
 import javax.sql.DataSource;
 
 /**
- * Database connectivity (with a Servlet-container managed pool) test.
+ * Handles the multi-query database test using a SQL database with a Servlet-container managed pool.
  */
 @SuppressWarnings("serial")
-public class DbPoolServlet extends HttpServlet {
+public class QueriesSQLServlet extends HttpServlet {
 	// Database details.
 	private static final String DB_QUERY = "SELECT * FROM World WHERE id = ?";
 	private static final int DB_ROWS = 10000;
@@ -31,14 +31,12 @@ public class DbPoolServlet extends HttpServlet {
 	@Override
 	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
 			IOException {
-		// Reference the data source.
-		final DataSource source = dataSource;
 		final int count = Common.normalise(req.getParameter("queries"));
 		final World[] worlds = new World[count];
 		final Random random = ThreadLocalRandom.current();
 
 		// Fetch some rows from the database.
-		try (Connection conn = source.getConnection()) {
+		try (Connection conn = dataSource.getConnection()) {
 			try (PreparedStatement statement = conn.prepareStatement(DB_QUERY,
 					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) {
 				// Run the query the number of times requested.
@@ -47,9 +45,8 @@ public class DbPoolServlet extends HttpServlet {
 					statement.setInt(1, id);
 
 					try (ResultSet results = statement.executeQuery()) {
-						if (results.next()) {
-							worlds[i] = new World(id, results.getInt("randomNumber"));
-						}
+						results.next();
+						worlds[i] = new World(id, results.getInt("randomNumber"));
 					}
 				}
 			}
@@ -61,10 +58,6 @@ public class DbPoolServlet extends HttpServlet {
 		res.setHeader(Common.HEADER_CONTENT_TYPE, Common.CONTENT_TYPE_JSON);
 
 		// Write JSON encoded message to the response.
-		if (count == 1) {
-			Common.MAPPER.writeValue(res.getOutputStream(), worlds[0]);
-		} else {
-			Common.MAPPER.writeValue(res.getOutputStream(), worlds);
-		}
+		Common.MAPPER.writeValue(res.getOutputStream(), worlds);
 	}
 }

+ 10 - 1
frameworks/Java/servlet/src/main/resources/WEB-INF/mysql/web.xml

@@ -5,13 +5,22 @@
 	version="2.4">
 	<servlet>
 		<servlet-name>db</servlet-name>
-		<servlet-class>hello.DbPoolServlet</servlet-class>
+		<servlet-class>hello.DbSQLServlet</servlet-class>
 		<load-on-startup>1</load-on-startup>
 	</servlet>
 	<servlet-mapping>
 		<servlet-name>db</servlet-name>
 		<url-pattern>/db</url-pattern>
 	</servlet-mapping>
+	<servlet>
+		<servlet-name>queries</servlet-name>
+		<servlet-class>hello.QueriesSQLServlet</servlet-class>
+		<load-on-startup>1</load-on-startup>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>queries</servlet-name>
+		<url-pattern>/queries</url-pattern>
+	</servlet-mapping>
 	<servlet>
 		<servlet-name>fortunes</servlet-name>
 		<servlet-class>hello.FortunesServlet</servlet-class>

+ 12 - 3
frameworks/Java/servlet/src/main/resources/WEB-INF/postgresql/web.xml

@@ -4,14 +4,23 @@
 	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
 	version="2.4">
 	<servlet>
-		<servlet-name>postgres</servlet-name>
-		<servlet-class>hello.DbPoolServlet</servlet-class>
+		<servlet-name>db</servlet-name>
+		<servlet-class>hello.DbSQLServlet</servlet-class>
 		<load-on-startup>1</load-on-startup>
 	</servlet>
 	<servlet-mapping>
-		<servlet-name>postgres</servlet-name>
+		<servlet-name>db</servlet-name>
 		<url-pattern>/db</url-pattern>
 	</servlet-mapping>
+	<servlet>
+		<servlet-name>queries</servlet-name>
+		<servlet-class>hello.QueriesSQLServlet</servlet-class>
+		<load-on-startup>1</load-on-startup>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>queries</servlet-name>
+		<url-pattern>/queries</url-pattern>
+	</servlet-mapping>
 	<servlet>
 		<servlet-name>postgres-update</servlet-name>
 		<servlet-class>hello.PostgresUpdateServlet</servlet-class>