diff --git a/appengine-java8/postgres/README.md b/appengine-java8/cloudsql-postgres/README.md
similarity index 95%
rename from appengine-java8/postgres/README.md
rename to appengine-java8/cloudsql-postgres/README.md
index a787ceeff18..82588983f11 100644
--- a/appengine-java8/postgres/README.md
+++ b/appengine-java8/cloudsql-postgres/README.md
@@ -1,6 +1,6 @@
# Postgre SQL sample for Google App Engine J8
-
+
This sample demonstrates how to use [PostgreSql](https://cloud.google.com/sql/) on Google App
diff --git a/appengine-java8/postgres/pom.xml b/appengine-java8/cloudsql-postgres/pom.xml
similarity index 97%
rename from appengine-java8/postgres/pom.xml
rename to appengine-java8/cloudsql-postgres/pom.xml
index 40d16e2af3a..b9a0eaea38a 100644
--- a/appengine-java8/postgres/pom.xml
+++ b/appengine-java8/cloudsql-postgres/pom.xml
@@ -48,7 +48,6 @@
-
com.google.appengine
appengine-api-1.0-sdk
diff --git a/appengine-java8/postgres/src/main/java/com/example/appengine/postgresql/PostgreSqlServlet.java b/appengine-java8/cloudsql-postgres/src/main/java/com/example/appengine/postgresql/PostgreSqlServlet.java
similarity index 58%
rename from appengine-java8/postgres/src/main/java/com/example/appengine/postgresql/PostgreSqlServlet.java
rename to appengine-java8/cloudsql-postgres/src/main/java/com/example/appengine/postgresql/PostgreSqlServlet.java
index ba2ac4442ff..430c0894c76 100644
--- a/appengine-java8/postgres/src/main/java/com/example/appengine/postgresql/PostgreSqlServlet.java
+++ b/appengine-java8/cloudsql-postgres/src/main/java/com/example/appengine/postgresql/PostgreSqlServlet.java
@@ -17,12 +17,8 @@
package com.example.appengine.postgresql;
import com.google.common.base.Stopwatch;
-
import java.io.IOException;
import java.io.PrintWriter;
-import java.net.Inet4Address;
-import java.net.Inet6Address;
-import java.net.InetAddress;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
@@ -31,7 +27,6 @@
import java.sql.Timestamp;
import java.util.Date;
import java.util.concurrent.TimeUnit;
-
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
@@ -42,7 +37,7 @@
@SuppressWarnings("serial")
// With @WebServlet annotation the webapp/WEB-INF/web.xml is no longer required.
@WebServlet(name = "PostgreSQL",
- description = "PostgreSQL: Write low order IP address to PostgreSQL",
+ description = "PostgreSQL: Write timestamps of visitors to PostgreSQL",
urlPatterns = "/postgresql")
public class PostgreSqlServlet extends HttpServlet {
@@ -52,11 +47,11 @@ public class PostgreSqlServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException,
ServletException {
- final String createTableSql = "CREATE TABLE IF NOT EXISTS visits ( visit_id SERIAL NOT NULL, "
- + "user_ip VARCHAR(46) NOT NULL, ts timestamp NOT NULL, "
+ final String createTableSql = "CREATE TABLE IF NOT EXISTS visits ( "
+ + "visit_id SERIAL NOT NULL, ts timestamp NOT NULL, "
+ "PRIMARY KEY (visit_id) );";
- final String createVisitSql = "INSERT INTO visits (user_ip, ts) VALUES (?, ?);";
- final String selectSql = "SELECT user_ip, ts FROM visits ORDER BY ts DESC "
+ final String createVisitSql = "INSERT INTO visits (ts) VALUES (?);";
+ final String selectSql = "SELECT ts FROM visits ORDER BY ts DESC "
+ "LIMIT 10;";
String path = req.getRequestURI();
@@ -67,55 +62,34 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOExc
PrintWriter out = resp.getWriter();
resp.setContentType("text/plain");
- // store only the first two octets of a users ip address
- String userIp = req.getRemoteAddr();
- InetAddress address = InetAddress.getByName(userIp);
- if (address instanceof Inet6Address) {
- // nest indexOf calls to find the second occurrence of a character in a string
- // an alternative is to use Apache Commons Lang: StringUtils.ordinalIndexOf()
- userIp = userIp.substring(0, userIp.indexOf(":", userIp.indexOf(":") + 1)) + ":*:*:*:*:*:*";
- } else if (address instanceof Inet4Address) {
- userIp = userIp.substring(0, userIp.indexOf(".", userIp.indexOf(".") + 1)) + ".*.*";
- }
-
Stopwatch stopwatch = Stopwatch.createStarted();
try (PreparedStatement statementCreateVisit = conn.prepareStatement(createVisitSql)) {
conn.createStatement().executeUpdate(createTableSql);
- statementCreateVisit.setString(1, userIp);
- statementCreateVisit.setTimestamp(2, new Timestamp(new Date().getTime()));
+ statementCreateVisit.setTimestamp(1, new Timestamp(new Date().getTime()));
statementCreateVisit.executeUpdate();
try (ResultSet rs = conn.prepareStatement(selectSql).executeQuery()) {
stopwatch.stop();
out.print("Last 10 visits:\n");
while (rs.next()) {
- String savedIp = rs.getString("user_ip");
String timeStamp = rs.getString("ts");
- out.println("Time: " + timeStamp + " Addr: " + savedIp);
+ out.println("Visited at time: " + timeStamp);
}
- out.println("Elapsed: " + stopwatch.elapsed(TimeUnit.MILLISECONDS));
}
} catch (SQLException e) {
throw new ServletException("SQL error", e);
}
+ out.println("Query time (ms):" + stopwatch.elapsed(TimeUnit.MILLISECONDS));
}
@Override
public void init() throws ServletException {
+ String url = System.getProperty("postgresql");
+ log("connecting to: " + url);
try {
- String url = System.getProperty("postgresql");
- log("connecting to: " + url);
- try {
- Class.forName("org.postgresql.Driver");
- conn = DriverManager.getConnection(url);
- } catch (ClassNotFoundException e) {
- throw new ServletException("Error loading JDBC Driver", e);
- } catch (SQLException e) {
- throw new ServletException("Unable to connect to PostGre", e);
- }
-
- } finally {
- // Nothing really to do here.
+ conn = DriverManager.getConnection(url);
+ } catch (SQLException e) {
+ throw new ServletException("Unable to connect to PostgreSQL", e);
}
}
}
diff --git a/appengine-java8/postgres/src/main/webapp/WEB-INF/appengine-web.xml b/appengine-java8/cloudsql-postgres/src/main/webapp/WEB-INF/appengine-web.xml
similarity index 100%
rename from appengine-java8/postgres/src/main/webapp/WEB-INF/appengine-web.xml
rename to appengine-java8/cloudsql-postgres/src/main/webapp/WEB-INF/appengine-web.xml
diff --git a/appengine-java8/postgres/src/main/webapp/WEB-INF/web.xml b/appengine-java8/cloudsql-postgres/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from appengine-java8/postgres/src/main/webapp/WEB-INF/web.xml
rename to appengine-java8/cloudsql-postgres/src/main/webapp/WEB-INF/web.xml
diff --git a/appengine-java8/cloudsql/pom.xml b/appengine-java8/cloudsql/pom.xml
index 4c613de18d7..ccca59c0ed2 100644
--- a/appengine-java8/cloudsql/pom.xml
+++ b/appengine-java8/cloudsql/pom.xml
@@ -48,7 +48,6 @@
-
com.google.appengine
appengine-api-1.0-sdk
@@ -78,8 +77,9 @@
com.google.cloud.sql
- mysql-socket-factory
- 1.0.4
+
+ mysql-socket-factory
+ 1.0.5
diff --git a/appengine-java8/cloudsql/src/main/java/com/example/appengine/cloudsql/CloudSqlServlet.java b/appengine-java8/cloudsql/src/main/java/com/example/appengine/cloudsql/CloudSqlServlet.java
index 5e30119ade7..09822cc0c65 100644
--- a/appengine-java8/cloudsql/src/main/java/com/example/appengine/cloudsql/CloudSqlServlet.java
+++ b/appengine-java8/cloudsql/src/main/java/com/example/appengine/cloudsql/CloudSqlServlet.java
@@ -44,7 +44,8 @@
// [START example]
@SuppressWarnings("serial")
// With @WebServlet annotation the webapp/WEB-INF/web.xml is no longer required.
-@WebServlet(name = "CloudSQL", description = "CloudSQL: Write low order IP address to Cloud SQL",
+@WebServlet(name = "CloudSQL",
+ description = "CloudSQL: Write timestamps of visitors to Cloud SQL",
urlPatterns = "/cloudsql")
public class CloudSqlServlet extends HttpServlet {
Connection conn;
@@ -52,12 +53,13 @@ public class CloudSqlServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException,
ServletException {
- final String createTableSql = "CREATE TABLE IF NOT EXISTS visits ( visit_id INT NOT NULL "
- + "AUTO_INCREMENT, user_ip VARCHAR(46) NOT NULL, timestamp DATETIME NOT NULL, "
- + "PRIMARY KEY (visit_id) )";
- final String createVisitSql = "INSERT INTO visits (user_ip, timestamp) VALUES (?, ?)";
- final String selectSql = "SELECT user_ip, timestamp FROM visits ORDER BY timestamp DESC "
- + "LIMIT 10";
+
+ final String createTableSql = "CREATE TABLE IF NOT EXISTS visits ( "
+ + "visit_id SERIAL NOT NULL, ts timestamp NOT NULL, "
+ + "PRIMARY KEY (visit_id) );";
+ final String createVisitSql = "INSERT INTO visits (ts) VALUES (?);";
+ final String selectSql = "SELECT ts FROM visits ORDER BY ts DESC "
+ + "LIMIT 10;";
String path = req.getRequestURI();
if (path.startsWith("/favicon.ico")) {
@@ -67,37 +69,24 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOExc
PrintWriter out = resp.getWriter();
resp.setContentType("text/plain");
- // store only the first two octets of a users ip address
- String userIp = req.getRemoteAddr();
- InetAddress address = InetAddress.getByName(userIp);
- if (address instanceof Inet6Address) {
- // nest indexOf calls to find the second occurrence of a character in a string
- // an alternative is to use Apache Commons Lang: StringUtils.ordinalIndexOf()
- userIp = userIp.substring(0, userIp.indexOf(":", userIp.indexOf(":") + 1)) + ":*:*:*:*:*:*";
- } else if (address instanceof Inet4Address) {
- userIp = userIp.substring(0, userIp.indexOf(".", userIp.indexOf(".") + 1)) + ".*.*";
- }
-
Stopwatch stopwatch = Stopwatch.createStarted();
try (PreparedStatement statementCreateVisit = conn.prepareStatement(createVisitSql)) {
conn.createStatement().executeUpdate(createTableSql);
- statementCreateVisit.setString(1, userIp);
- statementCreateVisit.setTimestamp(2, new Timestamp(new Date().getTime()));
+ statementCreateVisit.setTimestamp(1, new Timestamp(new Date().getTime()));
statementCreateVisit.executeUpdate();
try (ResultSet rs = conn.prepareStatement(selectSql).executeQuery()) {
stopwatch.stop();
out.print("Last 10 visits:\n");
while (rs.next()) {
- String savedIp = rs.getString("user_ip");
- String timeStamp = rs.getString("timestamp");
- out.print("Time: " + timeStamp + " Addr: " + savedIp + "\n");
+ String timeStamp = rs.getString("ts");
+ out.println("Visited at time: " + timeStamp);
}
- out.println("Elapsed: " + stopwatch.elapsed(TimeUnit.MILLISECONDS));
}
} catch (SQLException e) {
throw new ServletException("SQL error", e);
}
+ out.println("Query time (ms):" + stopwatch.elapsed(TimeUnit.MILLISECONDS));
}
@Override
diff --git a/appengine-java8/pom.xml b/appengine-java8/pom.xml
index f626dc0da1b..3b3b23e92d4 100644
--- a/appengine-java8/pom.xml
+++ b/appengine-java8/pom.xml
@@ -41,6 +41,7 @@
appidentity
bigtable
cloudsql
+ cloudsql-postgres
datastore
datastore-indexes
datastore-indexes-exploding
@@ -62,7 +63,6 @@
metadata
multitenancy
oauth2
- postgres
pubsub
requests
remote-client