Browse Source

Added bechmarks for the play2 netty backend (#3143)

* Upgrade Play

* Set server-header for all backends

* Also enable netty backend by default

* Make sure we purge all target directory for a clean run

* Use akka-http for existing tests

* Added netty test for each akka-http test

* Set netty transpot to native

* Update hikaricp/mysql config flags

* Set parallelism-max of default dispatcher to 40

* Update play-slick

* Upgrade jOOQ to version 3.10.2

* Enhanced a select * query in jOOQ

* Upgrade sbt
Matthias Kurz 7 years ago
parent
commit
bcce98ba72
60 changed files with 653 additions and 77 deletions
  1. 86 0
      frameworks/Java/play2-java/benchmark_config.json
  2. 1 1
      frameworks/Java/play2-java/play2-java-ebean-hikaricp/build.sbt
  3. 40 3
      frameworks/Java/play2-java/play2-java-ebean-hikaricp/conf/application.conf
  4. 1 1
      frameworks/Java/play2-java/play2-java-ebean-hikaricp/project/build.properties
  5. 1 1
      frameworks/Java/play2-java/play2-java-ebean-hikaricp/project/plugins.sbt
  6. 1 1
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/controllers/Application.java
  7. 2 2
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/DefaultCatalog.java
  8. 2 2
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/HelloWorld.java
  9. 1 1
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/Indexes.java
  10. 1 1
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/Keys.java
  11. 1 1
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/Tables.java
  12. 2 2
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/tables/Fortune.java
  13. 2 2
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/tables/World.java
  14. 2 2
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/tables/records/FortuneRecord.java
  15. 2 2
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/tables/records/WorldRecord.java
  16. 2 2
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/build.sbt
  17. 40 3
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/conf/application.conf
  18. 1 1
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/project/build.properties
  19. 1 1
      frameworks/Java/play2-java/play2-java-jooq-hikaricp/project/plugins.sbt
  20. 1 1
      frameworks/Java/play2-java/play2-java-jpa-hikaricp/build.sbt
  21. 40 3
      frameworks/Java/play2-java/play2-java-jpa-hikaricp/conf/application.conf
  22. 1 1
      frameworks/Java/play2-java/play2-java-jpa-hikaricp/project/build.properties
  23. 1 1
      frameworks/Java/play2-java/play2-java-jpa-hikaricp/project/plugins.sbt
  24. 1 1
      frameworks/Java/play2-java/play2-java/build.sbt
  25. 34 1
      frameworks/Java/play2-java/play2-java/conf/application.conf
  26. 1 1
      frameworks/Java/play2-java/play2-java/project/build.properties
  27. 1 1
      frameworks/Java/play2-java/play2-java/project/plugins.sbt
  28. 2 2
      frameworks/Java/play2-java/setup_java.sh
  29. 2 2
      frameworks/Java/play2-java/setup_java_ebean_hikaricp.sh
  30. 10 0
      frameworks/Java/play2-java/setup_java_ebean_hikaricp_netty.sh
  31. 2 2
      frameworks/Java/play2-java/setup_java_jooq_hikaricp.sh
  32. 10 0
      frameworks/Java/play2-java/setup_java_jooq_hikaricp_netty.sh
  33. 2 2
      frameworks/Java/play2-java/setup_java_jpa_hikaricp.sh
  34. 10 0
      frameworks/Java/play2-java/setup_java_jpa_hikaricp_netty.sh
  35. 10 0
      frameworks/Java/play2-java/setup_java_netty.sh
  36. 109 0
      frameworks/Scala/play2-scala/benchmark_config.json
  37. 1 1
      frameworks/Scala/play2-scala/play2-scala-anorm/build.sbt
  38. 40 3
      frameworks/Scala/play2-scala/play2-scala-anorm/conf/application.conf
  39. 1 1
      frameworks/Scala/play2-scala/play2-scala-anorm/project/build.properties
  40. 1 1
      frameworks/Scala/play2-scala/play2-scala-anorm/project/plugins.sbt
  41. 1 1
      frameworks/Scala/play2-scala/play2-scala-reactivemongo/build.sbt
  42. 34 1
      frameworks/Scala/play2-scala/play2-scala-reactivemongo/conf/application.conf
  43. 1 1
      frameworks/Scala/play2-scala/play2-scala-reactivemongo/project/build.properties
  44. 1 1
      frameworks/Scala/play2-scala/play2-scala-reactivemongo/project/plugins.sbt
  45. 2 2
      frameworks/Scala/play2-scala/play2-scala-slick/build.sbt
  46. 42 4
      frameworks/Scala/play2-scala/play2-scala-slick/conf/application.conf
  47. 1 1
      frameworks/Scala/play2-scala/play2-scala-slick/project/build.properties
  48. 1 1
      frameworks/Scala/play2-scala/play2-scala-slick/project/plugins.sbt
  49. 1 1
      frameworks/Scala/play2-scala/play2-scala/build.sbt
  50. 34 1
      frameworks/Scala/play2-scala/play2-scala/conf/application.conf
  51. 1 1
      frameworks/Scala/play2-scala/play2-scala/project/build.properties
  52. 1 1
      frameworks/Scala/play2-scala/play2-scala/project/plugins.sbt
  53. 2 2
      frameworks/Scala/play2-scala/setup_scala.sh
  54. 2 2
      frameworks/Scala/play2-scala/setup_scala_anorm.sh
  55. 14 0
      frameworks/Scala/play2-scala/setup_scala_anorm_netty.sh
  56. 14 0
      frameworks/Scala/play2-scala/setup_scala_netty.sh
  57. 2 2
      frameworks/Scala/play2-scala/setup_scala_reactivemongo.sh
  58. 14 0
      frameworks/Scala/play2-scala/setup_scala_reactivemongo_netty.sh
  59. 2 2
      frameworks/Scala/play2-scala/setup_scala_slick.sh
  60. 14 0
      frameworks/Scala/play2-scala/setup_scala_slick_netty.sh

+ 86 - 0
frameworks/Java/play2-java/benchmark_config.json

@@ -22,6 +22,26 @@
         "json_url": "/json", 
         "plaintext_url": "/plaintext"
       }, 
+      "java-netty": {
+        "display_name": "play2-java-netty", 
+        "setup_file": "setup_java_netty", 
+        "framework": "play2", 
+        "language": "Java", 
+        "flavor": "None",
+        "orm": "Raw", 
+        "os": "Linux", 
+        "database": "None", 
+        "approach": "Realistic", 
+        "classification": "Fullstack", 
+        "platform": "Netty", 
+        "webserver": "None", 
+        "database_os": "Linux", 
+        "notes": "", 
+        "versus": "netty", 
+        "port": "9000", 
+        "json_url": "/json", 
+        "plaintext_url": "/plaintext"
+      }, 
       "java-ebean-hikaricp": {
         "display_name": "play2-java-ebean-hikaricp", 
         "setup_file": "setup_java_ebean_hikaricp", 
@@ -44,6 +64,28 @@
         "fortune_url": "/fortunes", 
         "update_url": "/update?queries="
       }, 
+      "java-ebean-hikaricp-netty": {
+        "display_name": "play2-java-ebean-hikaricp-netty", 
+        "setup_file": "setup_java_ebean_hikaricp_netty", 
+        "framework": "play2", 
+        "language": "Java", 
+        "flavor": "None",
+        "orm": "Full", 
+        "os": "Linux", 
+        "database": "MySQL", 
+        "approach": "Realistic", 
+        "classification": "Fullstack", 
+        "platform": "Netty", 
+        "webserver": "None", 
+        "database_os": "Linux", 
+        "notes": "", 
+        "versus": "netty", 
+        "port": "9000", 
+        "db_url": "/db", 
+        "query_url": "/queries?queries=", 
+        "fortune_url": "/fortunes", 
+        "update_url": "/update?queries="
+      }, 
       "java-jpa-hikaricp": {
         "display_name": "play2-java-jpa-hikaricp", 
         "setup_file": "setup_java_jpa_hikaricp", 
@@ -66,6 +108,28 @@
         "fortune_url": "/fortunes", 
         "update_url": "/update?queries="
       },
+      "java-jpa-hikaricp-netty": {
+        "display_name": "play2-java-jpa-hikaricp-netty", 
+        "setup_file": "setup_java_jpa_hikaricp_netty", 
+        "framework": "play2", 
+        "language": "Java", 
+        "flavor": "None",
+        "orm": "Full", 
+        "os": "Linux", 
+        "database": "MySQL", 
+        "approach": "Realistic", 
+        "classification": "Fullstack", 
+        "platform": "Netty", 
+        "webserver": "None", 
+        "database_os": "Linux", 
+        "notes": "", 
+        "versus": "netty", 
+        "port": "9000", 
+        "db_url": "/db", 
+        "query_url": "/queries?queries=", 
+        "fortune_url": "/fortunes", 
+        "update_url": "/update?queries="
+      },
       "java-jooq-hikaricp": {
         "display_name": "play2-java-jooq-hikaricp", 
         "setup_file": "setup_java_jooq_hikaricp", 
@@ -87,6 +151,28 @@
         "query_url": "/queries?queries=", 
         "fortune_url": "/fortunes", 
         "update_url": "/update?queries="
+      },
+      "java-jooq-hikaricp-netty": {
+        "display_name": "play2-java-jooq-hikaricp-netty", 
+        "setup_file": "setup_java_jooq_hikaricp_netty", 
+        "framework": "play2", 
+        "language": "Java", 
+        "flavor": "None",
+        "orm": "Full", 
+        "os": "Linux", 
+        "database": "MySQL", 
+        "approach": "Realistic", 
+        "classification": "Fullstack", 
+        "platform": "Netty", 
+        "webserver": "None", 
+        "database_os": "Linux", 
+        "notes": "", 
+        "versus": "netty", 
+        "port": "9000", 
+        "db_url": "/db", 
+        "query_url": "/queries?queries=", 
+        "fortune_url": "/fortunes", 
+        "update_url": "/update?queries="
       }
     }
   ]

+ 1 - 1
frameworks/Java/play2-java/play2-java-ebean-hikaricp/build.sbt

@@ -2,7 +2,7 @@ name := "play2-java-ebean-hikaricp"
 
 version := "1.0-SNAPSHOT"
 
-lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean)
+lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean, PlayNettyServer)
 
 scalaVersion := "2.12.4"
 

+ 40 - 3
frameworks/Java/play2-java/play2-java-ebean-hikaricp/conf/application.conf

@@ -13,7 +13,40 @@ play.i18n.langs = [ "en" ]
 # Disable default filters
 play.filters.enabled = [ ]
 
-play.server.akka.server-header = "Play2"
+play.server.server-header = "Play2"
+
+play.server {
+  netty {
+    transport = "native"
+
+    option {
+      SO_BACKLOG = 256
+
+      child {
+        SO_KEEPALIVE = true
+        TCP_NODELAY = true
+
+        # The default is 1 since Linux Kernel 3.13
+        # You can check via "cat /proc/sys/net/ipv4/tcp_fastopen"
+        # However 3 would be better, but we can't change it to that value because we don't have root permission when running the benchmarks
+        TCP_FASTOPEN = 1
+      }
+    }
+  }
+}
+
+akka {
+  actor {
+    default-dispatcher {
+      fork-join-executor {
+        # The TechEmpower benchmark environment uses 4x 10-Core E7-4850 CPUs in the application server
+        # That is 40 physical cores / 80 hyperthreaded cores
+        # https://www.techempower.com/benchmarks/#section=environment
+        parallelism-max = 40
+      }
+    }
+  }
+}
 
 # Number of database connections
 # https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
@@ -43,8 +76,11 @@ db {
         password = "benchmarkdbpass"
         hikaricp {
             dataSource {
+                characterEncoding=UTF-8
+                dontTrackOpenResources=true
+                dontCheckOnDuplicateKeyUpdateInSQL=true
                 cachePrepStmts=true
-                prepStmtCacheSize=250
+                prepStmtCacheSize=500
                 prepStmtCacheSqlLimit=2048
                 useServerPrepStmts=true
                 useLocalSessionState=true
@@ -61,7 +97,8 @@ db {
                 traceProtocol=false
                 jdbcCompliantTruncation=false
                 useUnbufferedInput=false
-                #useReadAheadInput=false
+                useReadAheadInput=true
+                useSSL=false
             }
             maximumPoolSize = ${fixedConnectionPool}
         }

+ 1 - 1
frameworks/Java/play2-java/play2-java-ebean-hikaricp/project/build.properties

@@ -1 +1 @@
-sbt.version=1.0.2
+sbt.version=1.0.4

+ 1 - 1
frameworks/Java/play2-java/play2-java-ebean-hikaricp/project/plugins.sbt

@@ -1,3 +1,3 @@
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.7")
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.9")
 
 addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "4.0.6")

+ 1 - 1
frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/controllers/Application.java

@@ -52,7 +52,7 @@ public class Application extends Controller {
     public CompletionStage<Result> fortunes() {
         return CompletableFuture.supplyAsync(() -> {
             final List<FortuneRecord> fortunes = this.db.withConnection(connection -> {
-                return DSL.using(connection, DIALECT).selectFrom(FORTUNE).fetch();
+                return DSL.using(connection, DIALECT).select(FORTUNE.ID, FORTUNE.MESSAGE).from(FORTUNE).fetchInto(FortuneRecord.class);
             });
             fortunes.add(new FortuneRecord(UInteger.valueOf(0), "Additional fortune added at request time."));
             Collections.sort(fortunes, (f1, f2) -> f1.getMessage().compareTo(f2.getMessage()));

+ 2 - 2
frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/DefaultCatalog.java

@@ -20,14 +20,14 @@ import org.jooq.impl.CatalogImpl;
 @Generated(
     value = {
         "http://www.jooq.org",
-        "jOOQ version:3.10.1"
+        "jOOQ version:3.10.2"
     },
     comments = "This class is generated by jOOQ"
 )
 @SuppressWarnings({ "all", "unchecked", "rawtypes" })
 public class DefaultCatalog extends CatalogImpl {
 
-    private static final long serialVersionUID = 1833355075;
+    private static final long serialVersionUID = -1150433758;
 
     /**
      * The reference instance of <code></code>

+ 2 - 2
frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/HelloWorld.java

@@ -24,14 +24,14 @@ import org.jooq.impl.SchemaImpl;
 @Generated(
     value = {
         "http://www.jooq.org",
-        "jOOQ version:3.10.1"
+        "jOOQ version:3.10.2"
     },
     comments = "This class is generated by jOOQ"
 )
 @SuppressWarnings({ "all", "unchecked", "rawtypes" })
 public class HelloWorld extends SchemaImpl {
 
-    private static final long serialVersionUID = -1521404055;
+    private static final long serialVersionUID = 618173128;
 
     /**
      * The reference instance of <code>hello_world</code>

+ 1 - 1
frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/Indexes.java

@@ -20,7 +20,7 @@ import org.jooq.impl.AbstractKeys;
 @Generated(
     value = {
         "http://www.jooq.org",
-        "jOOQ version:3.10.1"
+        "jOOQ version:3.10.2"
     },
     comments = "This class is generated by jOOQ"
 )

+ 1 - 1
frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/Keys.java

@@ -24,7 +24,7 @@ import org.jooq.types.UInteger;
 @Generated(
     value = {
         "http://www.jooq.org",
-        "jOOQ version:3.10.1"
+        "jOOQ version:3.10.2"
     },
     comments = "This class is generated by jOOQ"
 )

+ 1 - 1
frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/Tables.java

@@ -16,7 +16,7 @@ import models.tables.World;
 @Generated(
     value = {
         "http://www.jooq.org",
-        "jOOQ version:3.10.1"
+        "jOOQ version:3.10.2"
     },
     comments = "This class is generated by jOOQ"
 )

+ 2 - 2
frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/tables/Fortune.java

@@ -33,14 +33,14 @@ import org.jooq.types.UInteger;
 @Generated(
     value = {
         "http://www.jooq.org",
-        "jOOQ version:3.10.1"
+        "jOOQ version:3.10.2"
     },
     comments = "This class is generated by jOOQ"
 )
 @SuppressWarnings({ "all", "unchecked", "rawtypes" })
 public class Fortune extends TableImpl<FortuneRecord> {
 
-    private static final long serialVersionUID = 943840722;
+    private static final long serialVersionUID = -271252495;
 
     /**
      * The reference instance of <code>hello_world.fortune</code>

+ 2 - 2
frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/tables/World.java

@@ -33,14 +33,14 @@ import org.jooq.types.UInteger;
 @Generated(
     value = {
         "http://www.jooq.org",
-        "jOOQ version:3.10.1"
+        "jOOQ version:3.10.2"
     },
     comments = "This class is generated by jOOQ"
 )
 @SuppressWarnings({ "all", "unchecked", "rawtypes" })
 public class World extends TableImpl<WorldRecord> {
 
-    private static final long serialVersionUID = 894226680;
+    private static final long serialVersionUID = 1665620473;
 
     /**
      * The reference instance of <code>hello_world.world</code>

+ 2 - 2
frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/tables/records/FortuneRecord.java

@@ -22,14 +22,14 @@ import org.jooq.types.UInteger;
 @Generated(
     value = {
         "http://www.jooq.org",
-        "jOOQ version:3.10.1"
+        "jOOQ version:3.10.2"
     },
     comments = "This class is generated by jOOQ"
 )
 @SuppressWarnings({ "all", "unchecked", "rawtypes" })
 public class FortuneRecord extends UpdatableRecordImpl<FortuneRecord> implements Record2<UInteger, String> {
 
-    private static final long serialVersionUID = -1978128230;
+    private static final long serialVersionUID = -1296721253;
 
     /**
      * Setter for <code>hello_world.fortune.id</code>.

+ 2 - 2
frameworks/Java/play2-java/play2-java-jooq-hikaricp/app/models/tables/records/WorldRecord.java

@@ -22,14 +22,14 @@ import org.jooq.types.UInteger;
 @Generated(
     value = {
         "http://www.jooq.org",
-        "jOOQ version:3.10.1"
+        "jOOQ version:3.10.2"
     },
     comments = "This class is generated by jOOQ"
 )
 @SuppressWarnings({ "all", "unchecked", "rawtypes" })
 public class WorldRecord extends UpdatableRecordImpl<WorldRecord> implements Record2<UInteger, Integer> {
 
-    private static final long serialVersionUID = -323588540;
+    private static final long serialVersionUID = -826288699;
 
     /**
      * Setter for <code>hello_world.world.id</code>.

+ 2 - 2
frameworks/Java/play2-java/play2-java-jooq-hikaricp/build.sbt

@@ -2,11 +2,11 @@ name := "play2-java-jooq-hikaricp"
 
 version := "1.0-SNAPSHOT"
 
-lazy val root = (project in file(".")).enablePlugins(PlayJava)
+lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayNettyServer)
 
 scalaVersion := "2.12.4"
 
-val jOOQVersion = "3.10.1"
+val jOOQVersion = "3.10.2"
 
 libraryDependencies ++= Seq(
   guice,

+ 40 - 3
frameworks/Java/play2-java/play2-java-jooq-hikaricp/conf/application.conf

@@ -13,7 +13,40 @@ play.i18n.langs = [ "en" ]
 # Disable default filters
 play.filters.enabled = [ ]
 
-play.server.akka.server-header = "Play2"
+play.server.server-header = "Play2"
+
+play.server {
+  netty {
+    transport = "native"
+
+    option {
+      SO_BACKLOG = 256
+
+      child {
+        SO_KEEPALIVE = true
+        TCP_NODELAY = true
+
+        # The default is 1 since Linux Kernel 3.13
+        # You can check via "cat /proc/sys/net/ipv4/tcp_fastopen"
+        # However 3 would be better, but we can't change it to that value because we don't have root permission when running the benchmarks
+        TCP_FASTOPEN = 1
+      }
+    }
+  }
+}
+
+akka {
+  actor {
+    default-dispatcher {
+      fork-join-executor {
+        # The TechEmpower benchmark environment uses 4x 10-Core E7-4850 CPUs in the application server
+        # That is 40 physical cores / 80 hyperthreaded cores
+        # https://www.techempower.com/benchmarks/#section=environment
+        parallelism-max = 40
+      }
+    }
+  }
+}
 
 # Number of database connections
 # https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
@@ -43,8 +76,11 @@ db {
         password = "benchmarkdbpass"
         hikaricp {
             dataSource {
+                characterEncoding=UTF-8
+                dontTrackOpenResources=true
+                dontCheckOnDuplicateKeyUpdateInSQL=true
                 cachePrepStmts=true
-                prepStmtCacheSize=250
+                prepStmtCacheSize=500
                 prepStmtCacheSqlLimit=2048
                 useServerPrepStmts=true
                 useLocalSessionState=true
@@ -61,7 +97,8 @@ db {
                 traceProtocol=false
                 jdbcCompliantTruncation=false
                 useUnbufferedInput=false
-                #useReadAheadInput=false
+                useReadAheadInput=true
+                useSSL=false
             }
             maximumPoolSize = ${fixedConnectionPool}
         }

+ 1 - 1
frameworks/Java/play2-java/play2-java-jooq-hikaricp/project/build.properties

@@ -1 +1 @@
-sbt.version=1.0.2
+sbt.version=1.0.4

+ 1 - 1
frameworks/Java/play2-java/play2-java-jooq-hikaricp/project/plugins.sbt

@@ -1 +1 @@
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.7")
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.9")

+ 1 - 1
frameworks/Java/play2-java/play2-java-jpa-hikaricp/build.sbt

@@ -2,7 +2,7 @@ name := "play2-java-jpa-hikaricp"
 
 version := "1.0-SNAPSHOT"
 
-lazy val root = (project in file(".")).enablePlugins(PlayJava)
+lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayNettyServer)
 
 scalaVersion := "2.12.4"
 

+ 40 - 3
frameworks/Java/play2-java/play2-java-jpa-hikaricp/conf/application.conf

@@ -13,7 +13,40 @@ play.i18n.langs = [ "en" ]
 # Disable default filters
 play.filters.enabled = [ ]
 
-play.server.akka.server-header = "Play2"
+play.server.server-header = "Play2"
+
+play.server {
+  netty {
+    transport = "native"
+
+    option {
+      SO_BACKLOG = 256
+
+      child {
+        SO_KEEPALIVE = true
+        TCP_NODELAY = true
+
+        # The default is 1 since Linux Kernel 3.13
+        # You can check via "cat /proc/sys/net/ipv4/tcp_fastopen"
+        # However 3 would be better, but we can't change it to that value because we don't have root permission when running the benchmarks
+        TCP_FASTOPEN = 1
+      }
+    }
+  }
+}
+
+akka {
+  actor {
+    default-dispatcher {
+      fork-join-executor {
+        # The TechEmpower benchmark environment uses 4x 10-Core E7-4850 CPUs in the application server
+        # That is 40 physical cores / 80 hyperthreaded cores
+        # https://www.techempower.com/benchmarks/#section=environment
+        parallelism-max = 40
+      }
+    }
+  }
+}
 
 # Number of database connections
 # https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
@@ -43,8 +76,11 @@ db {
         password = "benchmarkdbpass"
         hikaricp {
             dataSource {
+                characterEncoding=UTF-8
+                dontTrackOpenResources=true
+                dontCheckOnDuplicateKeyUpdateInSQL=true
                 cachePrepStmts=true
-                prepStmtCacheSize=250
+                prepStmtCacheSize=500
                 prepStmtCacheSqlLimit=2048
                 useServerPrepStmts=true
                 useLocalSessionState=true
@@ -61,7 +97,8 @@ db {
                 traceProtocol=false
                 jdbcCompliantTruncation=false
                 useUnbufferedInput=false
-                #useReadAheadInput=false
+                useReadAheadInput=true
+                useSSL=false
             }
             maximumPoolSize = ${fixedConnectionPool}
         }

+ 1 - 1
frameworks/Java/play2-java/play2-java-jpa-hikaricp/project/build.properties

@@ -1 +1 @@
-sbt.version=1.0.2
+sbt.version=1.0.4

+ 1 - 1
frameworks/Java/play2-java/play2-java-jpa-hikaricp/project/plugins.sbt

@@ -1 +1 @@
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.7")
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.9")

+ 1 - 1
frameworks/Java/play2-java/play2-java/build.sbt

@@ -2,7 +2,7 @@ name := "play2-java"
 
 version := "1.0-SNAPSHOT"
 
-lazy val root = (project in file(".")).enablePlugins(PlayJava)
+lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayNettyServer)
 
 scalaVersion := "2.12.4"
 

+ 34 - 1
frameworks/Java/play2-java/play2-java/conf/application.conf

@@ -13,4 +13,37 @@ play.i18n.langs = [ "en" ]
 # Disable default filters
 play.filters.enabled = [ ]
 
-play.server.akka.server-header = "Play2"
+play.server.server-header = "Play2"
+
+play.server {
+  netty {
+    transport = "native"
+
+    option {
+      SO_BACKLOG = 256
+
+      child {
+        SO_KEEPALIVE = true
+        TCP_NODELAY = true
+
+        # The default is 1 since Linux Kernel 3.13
+        # You can check via "cat /proc/sys/net/ipv4/tcp_fastopen"
+        # However 3 would be better, but we can't change it to that value because we don't have root permission when running the benchmarks
+        TCP_FASTOPEN = 1
+      }
+    }
+  }
+}
+
+akka {
+  actor {
+    default-dispatcher {
+      fork-join-executor {
+        # The TechEmpower benchmark environment uses 4x 10-Core E7-4850 CPUs in the application server
+        # That is 40 physical cores / 80 hyperthreaded cores
+        # https://www.techempower.com/benchmarks/#section=environment
+        parallelism-max = 40
+      }
+    }
+  }
+}

+ 1 - 1
frameworks/Java/play2-java/play2-java/project/build.properties

@@ -1 +1 @@
-sbt.version=1.0.2
+sbt.version=1.0.4

+ 1 - 1
frameworks/Java/play2-java/play2-java/project/plugins.sbt

@@ -1 +1 @@
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.7")
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.9")

+ 2 - 2
frameworks/Java/play2-java/setup_java.sh

@@ -4,7 +4,7 @@ fw_depends java sbt
 
 cd play2-java
 
-rm -rf target/universal/stage/RUNNING_PID
+rm -rf target/ project/target/ project/project/
 
 sbt stage
-target/universal/stage/bin/play2-java &
+target/universal/stage/bin/play2-java -Dplay.server.provider=play.core.server.AkkaHttpServerProvider &

+ 2 - 2
frameworks/Java/play2-java/setup_java_ebean_hikaricp.sh

@@ -4,7 +4,7 @@ fw_depends mysql java sbt
 
 cd play2-java-ebean-hikaricp
 
-rm -rf target/universal/stage/RUNNING_PID
+rm -rf target/ project/target/ project/project/
 
 sbt stage
-target/universal/stage/bin/play2-java-ebean-hikaricp &
+target/universal/stage/bin/play2-java-ebean-hikaricp -Dplay.server.provider=play.core.server.AkkaHttpServerProvider &

+ 10 - 0
frameworks/Java/play2-java/setup_java_ebean_hikaricp_netty.sh

@@ -0,0 +1,10 @@
+#!/bin/bash
+
+fw_depends mysql java sbt
+
+cd play2-java-ebean-hikaricp
+
+rm -rf target/ project/target/ project/project/
+
+sbt stage
+target/universal/stage/bin/play2-java-ebean-hikaricp -Dplay.server.provider=play.core.server.NettyServerProvider &

+ 2 - 2
frameworks/Java/play2-java/setup_java_jooq_hikaricp.sh

@@ -4,7 +4,7 @@ fw_depends mysql java sbt
 
 cd play2-java-jooq-hikaricp
 
-rm -rf target/universal/stage/RUNNING_PID
+rm -rf target/ project/target/ project/project/
 
 sbt stage
-target/universal/stage/bin/play2-java-jooq-hikaricp &
+target/universal/stage/bin/play2-java-jooq-hikaricp -Dplay.server.provider=play.core.server.AkkaHttpServerProvider &

+ 10 - 0
frameworks/Java/play2-java/setup_java_jooq_hikaricp_netty.sh

@@ -0,0 +1,10 @@
+#!/bin/bash
+
+fw_depends mysql java sbt
+
+cd play2-java-jooq-hikaricp
+
+rm -rf target/ project/target/ project/project/
+
+sbt stage
+target/universal/stage/bin/play2-java-jooq-hikaricp -Dplay.server.provider=play.core.server.NettyServerProvider &

+ 2 - 2
frameworks/Java/play2-java/setup_java_jpa_hikaricp.sh

@@ -4,7 +4,7 @@ fw_depends mysql java sbt
 
 cd play2-java-jpa-hikaricp
 
-rm -rf target/universal/stage/RUNNING_PID
+rm -rf target/ project/target/ project/project/
 
 sbt stage
-target/universal/stage/bin/play2-java-jpa-hikaricp &
+target/universal/stage/bin/play2-java-jpa-hikaricp -Dplay.server.provider=play.core.server.AkkaHttpServerProvider &

+ 10 - 0
frameworks/Java/play2-java/setup_java_jpa_hikaricp_netty.sh

@@ -0,0 +1,10 @@
+#!/bin/bash
+
+fw_depends mysql java sbt
+
+cd play2-java-jpa-hikaricp
+
+rm -rf target/ project/target/ project/project/
+
+sbt stage
+target/universal/stage/bin/play2-java-jpa-hikaricp -Dplay.server.provider=play.core.server.NettyServerProvider &

+ 10 - 0
frameworks/Java/play2-java/setup_java_netty.sh

@@ -0,0 +1,10 @@
+#!/bin/bash
+
+fw_depends java sbt
+
+cd play2-java
+
+rm -rf target/ project/target/ project/project/
+
+sbt stage
+target/universal/stage/bin/play2-java -Dplay.server.provider=play.core.server.NettyServerProvider &

+ 109 - 0
frameworks/Scala/play2-scala/benchmark_config.json

@@ -22,6 +22,26 @@
         "json_url": "/json", 
         "plaintext_url": "/plaintext"
       }, 
+      "scala-netty": {
+        "display_name": "play2-scala-netty", 
+        "setup_file": "setup_scala_netty", 
+        "framework": "play2", 
+        "language": "Scala", 
+        "flavor": "None",
+        "orm": "Raw", 
+        "os": "Linux", 
+        "database": "None", 
+        "approach": "Realistic", 
+        "classification": "Fullstack", 
+        "platform": "Netty", 
+        "webserver": "None", 
+        "database_os": "Linux", 
+        "notes": "", 
+        "versus": "netty", 
+        "port": "9000", 
+        "json_url": "/json", 
+        "plaintext_url": "/plaintext"
+      }, 
       "anorm-linux": {
         "display_name": "play2-scala-anorm-linux", 
         "setup_file": "setup_scala_anorm", 
@@ -44,6 +64,28 @@
         "fortune_url": "/fortunes", 
         "update_url": "/update?queries="
       }, 
+      "anorm-linux-netty": {
+        "display_name": "play2-scala-anorm-linux-netty", 
+        "setup_file": "setup_scala_anorm_netty", 
+        "framework": "play2", 
+        "language": "Scala", 
+        "flavor": "None",
+        "orm": "Full", 
+        "os": "Linux", 
+        "database": "MySQL", 
+        "approach": "Realistic", 
+        "classification": "Fullstack", 
+        "platform": "Netty", 
+        "webserver": "None", 
+        "database_os": "Linux", 
+        "notes": "", 
+        "versus": "netty", 
+        "port": "9000", 
+        "db_url": "/db", 
+        "query_url": "/queries?queries=", 
+        "fortune_url": "/fortunes", 
+        "update_url": "/update?queries="
+      }, 
       "anorm-windows": {
         "display_name": "play2-scala-anorm-windows", 
         "setup_file": "setup_scala_anorm", 
@@ -66,6 +108,28 @@
         "fortune_url": "/fortunes", 
         "update_url": "/update?queries="
       },
+      "anorm-windows-netty": {
+        "display_name": "play2-scala-anorm-windows-netty", 
+        "setup_file": "setup_scala_anorm_netty", 
+        "framework": "play2", 
+        "language": "Scala", 
+        "flavor": "None",
+        "orm": "Full", 
+        "os": "Windows", 
+        "database": "MySQL", 
+        "approach": "Realistic", 
+        "classification": "Fullstack", 
+        "platform": "Netty", 
+        "webserver": "None", 
+        "database_os": "Linux", 
+        "notes": "", 
+        "versus": "netty", 
+        "port": "9000", 
+        "db_url": "/db", 
+        "query_url": "/queries?queries=", 
+        "fortune_url": "/fortunes", 
+        "update_url": "/update?queries="
+      },
       "reactivemongo": {
         "display_name": "play2-scala-reactivemongo", 
         "setup_file": "setup_scala_reactivemongo", 
@@ -89,6 +153,29 @@
         "fortune_url": "/fortunes", 
         "update_url": "/update?queries="
       },
+      "reactivemongo-netty": {
+        "display_name": "play2-scala-reactivemongo-netty", 
+        "setup_file": "setup_scala_reactivemongo_netty", 
+        "framework": "play2", 
+        "language": "Scala", 
+        "flavor": "None",
+        "orm": "Full", 
+        "os": "Linux", 
+        "database": "MongoDB", 
+        "approach": "Realistic", 
+        "classification": "Fullstack", 
+        "platform": "Netty", 
+        "webserver": "None", 
+        "database_os": "Linux", 
+        "notes": "", 
+        "versus": "netty", 
+        "port": "9000",
+        "sleep":"8",
+        "db_url": "/db", 
+        "query_url": "/queries?queries=",
+        "fortune_url": "/fortunes", 
+        "update_url": "/update?queries="
+      },
       "slick": {
         "display_name": "play2-scala-slick", 
         "setup_file": "setup_scala_slick", 
@@ -110,6 +197,28 @@
         "query_url": "/queries?queries=", 
         "fortune_url": "/fortunes", 
         "update_url": "/update?queries="
+      },
+      "slick-netty": {
+        "display_name": "play2-scala-slick-netty", 
+        "setup_file": "setup_scala_slick_netty", 
+        "framework": "play2", 
+        "language": "Scala", 
+        "flavor": "None",
+        "orm": "Full", 
+        "os": "Linux", 
+        "database": "MySQL", 
+        "approach": "Realistic", 
+        "classification": "Fullstack", 
+        "platform": "Netty", 
+        "webserver": "None", 
+        "database_os": "Linux", 
+        "notes": "", 
+        "versus": "netty", 
+        "port": "9000", 
+        "db_url": "/db", 
+        "query_url": "/queries?queries=", 
+        "fortune_url": "/fortunes", 
+        "update_url": "/update?queries="
       }
     }
   ]

+ 1 - 1
frameworks/Scala/play2-scala/play2-scala-anorm/build.sbt

@@ -2,7 +2,7 @@ name := "play2-scala-anorm"
 
 version := "1.0-SNAPSHOT"
 
-lazy val root = (project in file(".")).enablePlugins(PlayScala)
+lazy val root = (project in file(".")).enablePlugins(PlayScala, PlayNettyServer)
 
 scalaVersion := "2.12.4"
 

+ 40 - 3
frameworks/Scala/play2-scala/play2-scala-anorm/conf/application.conf

@@ -13,7 +13,40 @@ play.i18n.langs = [ "en" ]
 # Disable default filters
 play.filters.enabled = [ ]
 
-play.server.akka.server-header = "Play2"
+play.server.server-header = "Play2"
+
+play.server {
+  netty {
+    transport = "native"
+
+    option {
+      SO_BACKLOG = 256
+
+      child {
+        SO_KEEPALIVE = true
+        TCP_NODELAY = true
+
+        # The default is 1 since Linux Kernel 3.13
+        # You can check via "cat /proc/sys/net/ipv4/tcp_fastopen"
+        # However 3 would be better, but we can't change it to that value because we don't have root permission when running the benchmarks
+        TCP_FASTOPEN = 1
+      }
+    }
+  }
+}
+
+akka {
+  actor {
+    default-dispatcher {
+      fork-join-executor {
+        # The TechEmpower benchmark environment uses 4x 10-Core E7-4850 CPUs in the application server
+        # That is 40 physical cores / 80 hyperthreaded cores
+        # https://www.techempower.com/benchmarks/#section=environment
+        parallelism-max = 40
+      }
+    }
+  }
+}
 
 # Number of database connections
 # https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
@@ -43,8 +76,11 @@ db {
         password = "benchmarkdbpass"
         hikaricp {
             dataSource {
+                characterEncoding=UTF-8
+                dontTrackOpenResources=true
+                dontCheckOnDuplicateKeyUpdateInSQL=true
                 cachePrepStmts=true
-                prepStmtCacheSize=250
+                prepStmtCacheSize=500
                 prepStmtCacheSqlLimit=2048
                 useServerPrepStmts=true
                 useLocalSessionState=true
@@ -61,7 +97,8 @@ db {
                 traceProtocol=false
                 jdbcCompliantTruncation=false
                 useUnbufferedInput=false
-                #useReadAheadInput=false
+                useReadAheadInput=true
+                useSSL=false
             }
             maximumPoolSize = ${fixedConnectionPool}
         }

+ 1 - 1
frameworks/Scala/play2-scala/play2-scala-anorm/project/build.properties

@@ -1 +1 @@
-sbt.version=1.0.2
+sbt.version=1.0.4

+ 1 - 1
frameworks/Scala/play2-scala/play2-scala-anorm/project/plugins.sbt

@@ -1 +1 @@
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.7")
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.9")

+ 1 - 1
frameworks/Scala/play2-scala/play2-scala-reactivemongo/build.sbt

@@ -2,7 +2,7 @@ name := "play2-scala-reactivemongo"
 
 version := "1.0-SNAPSHOT"
 
-lazy val root = (project in file(".")).enablePlugins(PlayScala)
+lazy val root = (project in file(".")).enablePlugins(PlayScala, PlayNettyServer)
 
 scalaVersion := "2.12.4"
 

+ 34 - 1
frameworks/Scala/play2-scala/play2-scala-reactivemongo/conf/application.conf

@@ -13,7 +13,40 @@ play.i18n.langs = [ "en" ]
 # Disable default filters
 play.filters.enabled = [ ]
 
-play.server.akka.server-header = "Play2"
+play.server.server-header = "Play2"
+
+play.server {
+  netty {
+    transport = "native"
+
+    option {
+      SO_BACKLOG = 256
+
+      child {
+        SO_KEEPALIVE = true
+        TCP_NODELAY = true
+
+        # The default is 1 since Linux Kernel 3.13
+        # You can check via "cat /proc/sys/net/ipv4/tcp_fastopen"
+        # However 3 would be better, but we can't change it to that value because we don't have root permission when running the benchmarks
+        TCP_FASTOPEN = 1
+      }
+    }
+  }
+}
+
+akka {
+  actor {
+    default-dispatcher {
+      fork-join-executor {
+        # The TechEmpower benchmark environment uses 4x 10-Core E7-4850 CPUs in the application server
+        # That is 40 physical cores / 80 hyperthreaded cores
+        # https://www.techempower.com/benchmarks/#section=environment
+        parallelism-max = 40
+      }
+    }
+  }
+}
 
 play.application.loader=AppLoader
 

+ 1 - 1
frameworks/Scala/play2-scala/play2-scala-reactivemongo/project/build.properties

@@ -1 +1 @@
-sbt.version=1.0.2
+sbt.version=1.0.4

+ 1 - 1
frameworks/Scala/play2-scala/play2-scala-reactivemongo/project/plugins.sbt

@@ -1 +1 @@
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.7")
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.9")

+ 2 - 2
frameworks/Scala/play2-scala/play2-scala-slick/build.sbt

@@ -2,13 +2,13 @@ name := "play2-scala-slick"
 
 version := "1.0-SNAPSHOT"
 
-lazy val root = (project in file(".")).enablePlugins(PlayScala)
+lazy val root = (project in file(".")).enablePlugins(PlayScala, PlayNettyServer)
 
 scalaVersion := "2.12.4"
 
 libraryDependencies ++= Seq(
   guice,
-  "com.typesafe.play" %% "play-slick" % "3.0.2",
+  "com.typesafe.play" %% "play-slick" % "3.0.3",
   "mysql" % "mysql-connector-java" % "5.1.44",
   filters
 )

+ 42 - 4
frameworks/Scala/play2-scala/play2-scala-slick/conf/application.conf

@@ -13,7 +13,40 @@ play.i18n.langs = [ "en" ]
 # Disable default filters
 play.filters.enabled = [ ]
 
-play.server.akka.server-header = "Play2"
+play.server.server-header = "Play2"
+
+play.server {
+  netty {
+    transport = "native"
+
+    option {
+      SO_BACKLOG = 256
+
+      child {
+        SO_KEEPALIVE = true
+        TCP_NODELAY = true
+
+        # The default is 1 since Linux Kernel 3.13
+        # You can check via "cat /proc/sys/net/ipv4/tcp_fastopen"
+        # However 3 would be better, but we can't change it to that value because we don't have root permission when running the benchmarks
+        TCP_FASTOPEN = 1
+      }
+    }
+  }
+}
+
+akka {
+  actor {
+    default-dispatcher {
+      fork-join-executor {
+        # The TechEmpower benchmark environment uses 4x 10-Core E7-4850 CPUs in the application server
+        # That is 40 physical cores / 80 hyperthreaded cores
+        # https://www.techempower.com/benchmarks/#section=environment
+        parallelism-max = 40
+      }
+    }
+  }
+}
 
 # Database configuration
 # ~~~~~
@@ -33,11 +66,15 @@ slick.dbs.default {
     # That is 8 physical cores
     # https://www.techempower.com/benchmarks/#section=environment
     numThreads=17
-    #queueSize=100
+
+    queueSize=2000
 
     properties {
+      characterEncoding=UTF-8
+      dontTrackOpenResources=true
+      dontCheckOnDuplicateKeyUpdateInSQL=true
       cachePrepStmts=true
-      prepStmtCacheSize=250
+      prepStmtCacheSize=500
       prepStmtCacheSqlLimit=2048
       useServerPrepStmts=true
       useLocalSessionState=true
@@ -54,7 +91,8 @@ slick.dbs.default {
       traceProtocol=false
       jdbcCompliantTruncation=false
       useUnbufferedInput=false
-      #useReadAheadInput=false
+      useReadAheadInput=true
+      useSSL=false
     }
   }
 }

+ 1 - 1
frameworks/Scala/play2-scala/play2-scala-slick/project/build.properties

@@ -1 +1 @@
-sbt.version=1.0.2
+sbt.version=1.0.4

+ 1 - 1
frameworks/Scala/play2-scala/play2-scala-slick/project/plugins.sbt

@@ -1 +1 @@
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.7")
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.9")

+ 1 - 1
frameworks/Scala/play2-scala/play2-scala/build.sbt

@@ -2,7 +2,7 @@ name := "play2-scala"
 
 version := "1.0-SNAPSHOT"
 
-lazy val root = (project in file(".")).enablePlugins(PlayScala)
+lazy val root = (project in file(".")).enablePlugins(PlayScala, PlayNettyServer)
 
 scalaVersion := "2.12.4"
 

+ 34 - 1
frameworks/Scala/play2-scala/play2-scala/conf/application.conf

@@ -13,4 +13,37 @@ play.i18n.langs = [ "en" ]
 # Disable default filters
 play.filters.enabled = [ ]
 
-play.server.akka.server-header = "Play2"
+play.server.server-header = "Play2"
+
+play.server {
+  netty {
+    transport = "native"
+
+    option {
+      SO_BACKLOG = 256
+
+      child {
+        SO_KEEPALIVE = true
+        TCP_NODELAY = true
+
+        # The default is 1 since Linux Kernel 3.13
+        # You can check via "cat /proc/sys/net/ipv4/tcp_fastopen"
+        # However 3 would be better, but we can't change it to that value because we don't have root permission when running the benchmarks
+        TCP_FASTOPEN = 1
+      }
+    }
+  }
+}
+
+akka {
+  actor {
+    default-dispatcher {
+      fork-join-executor {
+        # The TechEmpower benchmark environment uses 4x 10-Core E7-4850 CPUs in the application server
+        # That is 40 physical cores / 80 hyperthreaded cores
+        # https://www.techempower.com/benchmarks/#section=environment
+        parallelism-max = 40
+      }
+    }
+  }
+}

+ 1 - 1
frameworks/Scala/play2-scala/play2-scala/project/build.properties

@@ -1 +1 @@
-sbt.version=1.0.2
+sbt.version=1.0.4

+ 1 - 1
frameworks/Scala/play2-scala/play2-scala/project/plugins.sbt

@@ -1 +1 @@
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.7")
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.9")

+ 2 - 2
frameworks/Scala/play2-scala/setup_scala.sh

@@ -5,10 +5,10 @@ fw_depends java sbt
 cd play2-scala
 
 
-rm -rf ${TROOT}/play2-scala/target/universal/stage/RUNNING_PID
+rm -rf target/ project/target/ project/project/
 
 # Stage application.
 sbt stage
 
 # Execute Start script in background.
-${TROOT}/play2-scala/target/universal/stage/bin/play2-scala -J-server -J-Xms1g -J-Xmx1g -J-XX:NewSize=512m -J-XX:+UseG1GC -J-XX:MaxGCPauseMillis=30 -J-XX:-UseBiasedLocking -J-XX:+AlwaysPreTouch &
+${TROOT}/play2-scala/target/universal/stage/bin/play2-scala -Dplay.server.provider=play.core.server.AkkaHttpServerProvider -J-server -J-Xms1g -J-Xmx1g -J-XX:NewSize=512m -J-XX:+UseG1GC -J-XX:MaxGCPauseMillis=30 -J-XX:-UseBiasedLocking -J-XX:+AlwaysPreTouch &

+ 2 - 2
frameworks/Scala/play2-scala/setup_scala_anorm.sh

@@ -5,10 +5,10 @@ fw_depends mysql java sbt
 cd play2-scala-anorm
 sed -i "s|jdbc:mysql:\/\/.*:3306|jdbc:mysql://${DBHOST}:3306|g" ${TROOT}/play2-scala-anorm/conf/application.conf
 
-rm -f -r ${TROOT}/play2-scala-anorm/target/universal/stage/RUNNING_PID
+rm -rf target/ project/target/ project/project/
 
 # Stage application.
 sbt stage
 
 # Execute Start script in background.
-${TROOT}/play2-scala-anorm/target/universal/stage/bin/play2-scala-anorm &
+${TROOT}/play2-scala-anorm/target/universal/stage/bin/play2-scala-anorm -Dplay.server.provider=play.core.server.AkkaHttpServerProvider &

+ 14 - 0
frameworks/Scala/play2-scala/setup_scala_anorm_netty.sh

@@ -0,0 +1,14 @@
+#!/bin/bash
+
+fw_depends mysql java sbt
+
+cd play2-scala-anorm
+sed -i "s|jdbc:mysql:\/\/.*:3306|jdbc:mysql://${DBHOST}:3306|g" ${TROOT}/play2-scala-anorm/conf/application.conf
+
+rm -rf target/ project/target/ project/project/
+
+# Stage application.
+sbt stage
+
+# Execute Start script in background.
+${TROOT}/play2-scala-anorm/target/universal/stage/bin/play2-scala-anorm -Dplay.server.provider=play.core.server.NettyServerProvider &

+ 14 - 0
frameworks/Scala/play2-scala/setup_scala_netty.sh

@@ -0,0 +1,14 @@
+#!/bin/bash
+
+fw_depends java sbt
+
+cd play2-scala
+
+
+rm -rf target/ project/target/ project/project/
+
+# Stage application.
+sbt stage
+
+# Execute Start script in background.
+${TROOT}/play2-scala/target/universal/stage/bin/play2-scala -Dplay.server.provider=play.core.server.NettyServerProvider -J-server -J-Xms1g -J-Xmx1g -J-XX:NewSize=512m -J-XX:+UseG1GC -J-XX:MaxGCPauseMillis=30 -J-XX:-UseBiasedLocking -J-XX:+AlwaysPreTouch &

+ 2 - 2
frameworks/Scala/play2-scala/setup_scala_reactivemongo.sh

@@ -5,10 +5,10 @@ fw_depends mongodb java sbt
 cd play2-scala-reactivemongo
 
 
-rm -rf ${TROOT}/play2-scala-reactivemongo/target/universal/stage/RUNNING_PID
+rm -rf target/ project/target/ project/project/
 
 # Stage application.
 sbt stage
 
 # Execute Start script in background.
-${TROOT}/play2-scala-reactivemongo/target/universal/stage/bin/play2-scala-reactivemongo &
+${TROOT}/play2-scala-reactivemongo/target/universal/stage/bin/play2-scala-reactivemongo -Dplay.server.provider=play.core.server.AkkaHttpServerProvider &

+ 14 - 0
frameworks/Scala/play2-scala/setup_scala_reactivemongo_netty.sh

@@ -0,0 +1,14 @@
+#!/bin/bash
+
+fw_depends mongodb java sbt
+
+cd play2-scala-reactivemongo
+
+
+rm -rf target/ project/target/ project/project/
+
+# Stage application.
+sbt stage
+
+# Execute Start script in background.
+${TROOT}/play2-scala-reactivemongo/target/universal/stage/bin/play2-scala-reactivemongo -Dplay.server.provider=play.core.server.NettyServerProvider &

+ 2 - 2
frameworks/Scala/play2-scala/setup_scala_slick.sh

@@ -5,10 +5,10 @@ fw_depends mysql java sbt
 cd play2-scala-slick
 sed -i "s|jdbc:mysql:\/\/.*:3306|jdbc:mysql://${DBHOST}:3306|g" ${TROOT}/play2-scala-slick/conf/application.conf
 
-rm -rf ${TROOT}/play2-scala-slick/target/universal/stage/RUNNING_PID
+rm -rf target/ project/target/ project/project/
 
 # Stage application.
 sbt stage
 
 # Execute Start script in background.
-${TROOT}/play2-scala-slick/target/universal/stage/bin/play2-scala-slick &
+${TROOT}/play2-scala-slick/target/universal/stage/bin/play2-scala-slick -Dplay.server.provider=play.core.server.AkkaHttpServerProvider &

+ 14 - 0
frameworks/Scala/play2-scala/setup_scala_slick_netty.sh

@@ -0,0 +1,14 @@
+#!/bin/bash
+
+fw_depends mysql java sbt
+
+cd play2-scala-slick
+sed -i "s|jdbc:mysql:\/\/.*:3306|jdbc:mysql://${DBHOST}:3306|g" ${TROOT}/play2-scala-slick/conf/application.conf
+
+rm -rf target/ project/target/ project/project/
+
+# Stage application.
+sbt stage
+
+# Execute Start script in background.
+${TROOT}/play2-scala-slick/target/universal/stage/bin/play2-scala-slick -Dplay.server.provider=play.core.server.NettyServerProvider &