Browse Source

updating the jawn framework (#3085)

* Update build.gradle

* updated framework, now using postgresql

* new version of the jawn framework

* Update benchmark_config.json

* update to newest gradle wrapper

* actually perform the update!
Anders 7 years ago
parent
commit
84e56b7b1e

+ 3 - 12
frameworks/Java/jawn/README.md

@@ -17,17 +17,8 @@ Point your browser at `localhost:8080/json`
 
 ### A couple of commands to get going with the benchmark framework
 
-toolset/run-tests.py --install server --test jawn --verbose --install-only
+tfb --test jawn
 
-toolset/run-tests.py --test jawn --mode verify
+tfb --sleep 5 --duration 10 --clean --test jawn
 
-toolset/run-tests.py --test jawn
-
-toolset/run-tests.py --test jawn --type fortune --sleep 5
-
-
-
-### Problems with the mounting of FrameworkBenchmarks?
-* **On host**:     vagrant gem install vagrant-vbguest
-* **In guest OS**: sudo mount.vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3`,dmode=777,fmode=777 FrameworkBenchmarks /FrameworkBenchmarks
-export FWROOT=/FrameworkBenchmarks
+tfb --sleep 5 --type fortune --test jawn

+ 2 - 2
frameworks/Java/jawn/benchmark_config.json

@@ -12,7 +12,7 @@
       "port": 8080,
       "approach": "Realistic",
       "classification": "Fullstack",
-      "database": "MySQL",
+      "database": "Postgres",
       "framework": "jawn",
       "language": "Java",
       "flavor": "None",
@@ -26,4 +26,4 @@
       "versus": "servlet"
     }
   }]
-}
+}

+ 1 - 1
frameworks/Java/jawn/build.gradle

@@ -19,7 +19,7 @@ repositories {
 
 dependencies {
     // Framework
-    def framework_version = '0.9.6'
+    def framework_version = '0.9.10'
     compile "net.javapla.jawn:jawn:${framework_version}"
 
 

BIN
frameworks/Java/jawn/gradle/wrapper/gradle-wrapper.jar


+ 1 - 2
frameworks/Java/jawn/gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,5 @@
-#Thu May 28 12:11:23 CEST 2015
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-bin.zip

+ 43 - 35
frameworks/Java/jawn/gradlew

@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/usr/bin/env sh
 
 ##############################################################################
 ##
@@ -6,20 +6,38 @@
 ##
 ##############################################################################
 
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
 
 APP_NAME="Gradle"
 APP_BASE_NAME=`basename "$0"`
 
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD="maximum"
 
-warn ( ) {
+warn () {
     echo "$*"
 }
 
-die ( ) {
+die () {
     echo
     echo "$*"
     echo
@@ -30,6 +48,7 @@ die ( ) {
 cygwin=false
 msys=false
 darwin=false
+nonstop=false
 case "`uname`" in
   CYGWIN* )
     cygwin=true
@@ -40,31 +59,11 @@ case "`uname`" in
   MINGW* )
     msys=true
     ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
 esac
 
-# For Cygwin, ensure paths are in UNIX format before anything is touched.
-if $cygwin ; then
-    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >&-
-APP_HOME="`pwd -P`"
-cd "$SAVED" >&-
-
 CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 
 # Determine the Java command to use to start the JVM.
@@ -90,7 +89,7 @@ location of your Java installation."
 fi
 
 # Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
     MAX_FD_LIMIT=`ulimit -H -n`
     if [ $? -eq 0 ] ; then
         if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@@ -114,6 +113,7 @@ fi
 if $cygwin ; then
     APP_HOME=`cygpath --path --mixed "$APP_HOME"`
     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
 
     # We build the pattern for arguments to be converted via cygpath
     ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
@@ -154,11 +154,19 @@ if $cygwin ; then
     esac
 fi
 
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
-    JVM_OPTS=("$@")
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
 }
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
 
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
+exec "$JAVACMD" "$@"

+ 4 - 10
frameworks/Java/jawn/gradlew.bat

@@ -8,14 +8,14 @@
 @rem Set local scope for the variables with windows NT shell
 if "%OS%"=="Windows_NT" setlocal
 
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
 set DIRNAME=%~dp0
 if "%DIRNAME%" == "" set DIRNAME=.
 set APP_BASE_NAME=%~n0
 set APP_HOME=%DIRNAME%
 
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
 @rem Find java.exe
 if defined JAVA_HOME goto findJavaFromJavaHome
 
@@ -46,10 +46,9 @@ echo location of your Java installation.
 goto fail
 
 :init
-@rem Get command-line arguments, handling Windowz variants
+@rem Get command-line arguments, handling Windows variants
 
 if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
 
 :win9xME_args
 @rem Slurp the command line arguments.
@@ -60,11 +59,6 @@ set _SKIP=2
 if "x%~1" == "x" goto execute
 
 set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
 
 :execute
 @rem Setup the command line

+ 0 - 1
frameworks/Java/jawn/source_code

@@ -7,7 +7,6 @@
 ./jawn/src/main/java/app/controllers/FortunesController.java
 ./jawn/src/main/java/app/db
 ./jawn/src/main/java/app/db/DbManager.java
-./jawn/src/main/java/app/db/DbModule.java
 ./jawn/src/main/java/app/models
 ./jawn/src/main/java/app/models/Fortune.java
 ./jawn/src/main/java/app/models/Message.java

+ 9 - 28
frameworks/Java/jawn/src/main/java/app/BenchmarkMain.java

@@ -14,27 +14,9 @@ public class BenchmarkMain extends Jawn {
     private static final String message = "Hello, World!";
     private static final byte[] bytemessage = message.getBytes();
     
-    String jdbcParams = 
-        "jdbcCompliantTruncation=false" +
-        "&elideSetAutoCommits=true" +
-        "&useLocalSessionState=true" +
-        "&cachePrepStmts=true" +
-        "&cacheCallableStmts=true" +
-        "&alwaysSendSetIsolation=false" +
-        "&prepStmtCacheSize=4096" +
-        "&cacheServerConfiguration=true" +
-        "&prepStmtCacheSqlLimit=2048" +
-        "&zeroDateTimeBehavior=convertToNull" +
-        "&traceProtocol=false" +
-        "&useUnbufferedInput=false" +
-        "&useReadAheadInput=false" +
-        "&maintainTimeStats=false" +
-        "&useServerPrepStmts=true" +
-        "&cacheRSMetadata=true" +
-        "&useSSL=false";
 
     String host = "TFB-database:5432";
-    String dbUrl = "jdbc:postgresql://"+host+"/hello_world";//"jdbc:mysql://"+host+"/hello_world?";
+    String dbUrl = "jdbc:postgresql://"+host+"/hello_world";
     
     // implicit constructor
     {
@@ -42,12 +24,11 @@ public class BenchmarkMain extends Jawn {
         server()
             .port(8080)
             .webappPath("webapp")
-            .serverPerformance(PERFORMANCE_MODE.HIGHEST)
-            .contextPath("/");
+            .serverPerformance(PERFORMANCE_MODE.HIGHEST);
         
         
-        get("/queries",DbController.class, "queries");
-        get("/updates",DbController.class, "updates");
+        get("/queries",DbController.class, DbController::getQueries);
+        get("/updates",DbController.class, DbController::getUpdates);
         
         get("/json", (context) -> Results.json(new Message(message)));
         get("/plaintext", (context) -> Results.text(bytemessage));
@@ -62,7 +43,7 @@ public class BenchmarkMain extends Jawn {
         database(Modes.PROD)
             .jdbc()
             .driver("org.postgresql.Driver")
-            .url(dbUrl)// + jdbcParams)
+            .url(dbUrl)
             .user("benchmarkdbuser")
             .password("benchmarkdbpass")
             .maxPoolSize(32)
@@ -70,16 +51,16 @@ public class BenchmarkMain extends Jawn {
         
         database(Modes.TEST)
             .jdbc()
-            .driver("com.mysql.cj.jdbc.Driver")
-            .url("jdbc:mysql://172.16.0.16/hello_world?" + jdbcParams)
+            .driver("org.postgresql.Driver")
+            .url("jdbc:postgresql://172.16.0.16/hello_world")
             .user("benchmarkdbuser")
             .password("benchmarkdbpass")
             .letFrameworkHandleConnectionPool(true);
     
         database(Modes.DEV)
             .jdbc()
-            .driver("com.mysql.cj.jdbc.Driver")
-            .url("jdbc:mysql://172.16.0.16/hello_world?" + jdbcParams)
+            .driver("org.postgresql.Driver")
+            .url("jdbc:postgresql://172.16.0.16:5432/hello_world")
             .user("benchmarkdbuser")
             .password("benchmarkdbpass")
             .letFrameworkHandleConnectionPool(true);

+ 10 - 5
frameworks/Java/jawn/src/main/java/app/db/DbManager.java

@@ -21,6 +21,10 @@ import com.google.inject.Singleton;
 
 @Singleton
 public class DbManager {
+    
+    private static final String UPDATE_WORLD = "UPDATE world SET randomNumber = ? WHERE id= ?";
+    private static final String SELECT_WORLD = "SELECT id, randomNumber FROM world WHERE id = ?";
+    private static final String SELECT_FORTUNE = "SELECT id, message FROM fortune";
 
     private DataSource source;
 
@@ -33,7 +37,7 @@ public class DbManager {
     
     public World getWorld(int id) {
         try (Connection connection = source.getConnection()) {
-            PreparedStatement statement = connection.prepareStatement("SELECT id, randomNumber FROM World WHERE id = ?");
+            PreparedStatement statement = connection.prepareStatement(SELECT_WORLD, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
             statement.setInt(1, id);
             ResultSet set = statement.executeQuery();
             
@@ -52,7 +56,7 @@ public class DbManager {
         try (final Connection connection = source.getConnection()) {
             
             for (int i = 0; i < number; i++) {
-                try (final PreparedStatement statement = connection.prepareStatement("SELECT id, randomNumber FROM World WHERE id = ?")) {
+                try (final PreparedStatement statement = connection.prepareStatement(SELECT_WORLD, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) {
                 
                     final int id = Helper.getRandomNumber();
                     
@@ -76,8 +80,8 @@ public class DbManager {
             
             for (int i = 0; i < number; i++) {
                 try (
-                    final PreparedStatement statement = connection.prepareStatement("SELECT id, randomNumber FROM World WHERE id = ?");
-                    final PreparedStatement update = connection.prepareStatement("UPDATE World SET randomNumber = ? WHERE id= ?")) {
+                    final PreparedStatement statement = connection.prepareStatement(SELECT_WORLD, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
+                    final PreparedStatement update = connection.prepareStatement(UPDATE_WORLD)) {
                 
                     final int id = Helper.getRandomNumber(),
                          newRand = Helper.getRandomNumber();
@@ -91,6 +95,7 @@ public class DbManager {
                     // update world
                     update.setInt(1, newRand);
                     update.setInt(2, id);
+                    update.execute();
                     
                     // return updated world
                     worlds[i].randomNumber = newRand;
@@ -105,7 +110,7 @@ public class DbManager {
     public List<Fortune> fetchAllFortunes() {
         List<Fortune> list = new ArrayList<>();
         try (Connection connection = source.getConnection()) {
-            PreparedStatement fetch = connection.prepareStatement("SELECT id, message FROM Fortune");
+            PreparedStatement fetch = connection.prepareStatement(SELECT_FORTUNE, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
             ResultSet set = fetch.executeQuery();
 //            ResultSet set = connection
 //                    .createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)