Browse Source

Merge pull request #1062 from donovanmuller/master

Java: Updating play2-java-jpa to use latest play2
Hamilton Turner 11 years ago
parent
commit
6580f9e20b
25 changed files with 117 additions and 100 deletions
  1. 0 1
      .travis.yml
  2. 0 0
      frameworks/Java/play-java-jpa/__init__.py
  3. 0 24
      frameworks/Java/play-java-jpa/benchmark_config
  4. 0 14
      frameworks/Java/play-java-jpa/build.sbt
  5. 0 10
      frameworks/Java/play-java-jpa/conf/routes
  6. 0 3
      frameworks/Java/play-java-jpa/install.sh
  7. 0 1
      frameworks/Java/play-java-jpa/project/build.properties
  8. 0 12
      frameworks/Java/play-java-jpa/setup.py
  9. 20 1
      frameworks/Java/play2-java/benchmark_config
  10. 2 1
      frameworks/Java/play2-java/generate_config.py
  11. 0 0
      frameworks/Java/play2-java/play2-java-jpa/.gitignore
  12. 4 3
      frameworks/Java/play2-java/play2-java-jpa/README.md
  13. 52 25
      frameworks/Java/play2-java/play2-java-jpa/app/controllers/Application.java
  14. 0 0
      frameworks/Java/play2-java/play2-java-jpa/app/models/World.java
  15. 0 0
      frameworks/Java/play2-java/play2-java-jpa/app/utils/Predicate.java
  16. 0 0
      frameworks/Java/play2-java/play2-java-jpa/app/utils/Predicated.java
  17. 3 3
      frameworks/Java/play2-java/play2-java-jpa/app/utils/PredicatedAction.java
  18. 16 0
      frameworks/Java/play2-java/play2-java-jpa/build.sbt
  19. 1 1
      frameworks/Java/play2-java/play2-java-jpa/conf/META-INF/persistence.xml
  20. 0 0
      frameworks/Java/play2-java/play2-java-jpa/conf/application.conf
  21. 11 0
      frameworks/Java/play2-java/play2-java-jpa/conf/routes
  22. 1 0
      frameworks/Java/play2-java/play2-java-jpa/project/build.properties
  23. 1 1
      frameworks/Java/play2-java/play2-java-jpa/project/plugins.sbt
  24. 0 0
      frameworks/Java/play2-java/play2-java-jpa/source_code
  25. 6 0
      frameworks/Java/play2-java/setup_java_jpa.py

+ 0 - 1
.travis.yml

@@ -69,7 +69,6 @@ env:
     - "TESTDIR=Java/jetty-servlet"
     - "TESTDIR=Java/netty"
     - "TESTDIR=Java/ninja-standalone"
-    - "TESTDIR=Java/play-java-jpa"
     - "TESTDIR=Java/play1"
     - "TESTDIR=Java/play1siena"
     - "TESTDIR=Java/play2-java"

+ 0 - 0
frameworks/Java/play-java-jpa/__init__.py


+ 0 - 24
frameworks/Java/play-java-jpa/benchmark_config

@@ -1,24 +0,0 @@
-{
-  "framework": "play",
-  "tests": [{
-    "jpa": {
-      "setup_file": "setup",
-      "db_url": "/db",
-      "query_url": "/db?queries=",
-      "port": 9000,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "MySQL",
-      "framework": "play2",
-      "language": "Java",
-      "orm": "Full",
-      "platform": "Netty",
-      "webserver": "None",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "play-java-jpa",
-      "notes": "JPA alternate",
-      "versus": "netty"
-    }
-  }]
-}

+ 0 - 14
frameworks/Java/play-java-jpa/build.sbt

@@ -1,14 +0,0 @@
-name := "play-java-jpa"
-
-version := "1.0-SNAPSHOT"
-
-libraryDependencies ++= Seq(
-  javaJdbc,
-  javaJpa,
-  "mysql" % "mysql-connector-java" % "5.1.22",
-  "org.hibernate" % "hibernate-entitymanager" % "4.2.1.Final"
-  )
-
-dependencyOverrides += "com.jolbox" % "bonecp" % "0.7.1.RELEASE"
-
-playJavaSettings

+ 0 - 10
frameworks/Java/play-java-jpa/conf/routes

@@ -1,10 +0,0 @@
-# Routes
-# This file defines all application routes (Higher priority routes first)
-# ~~~~
-
-# Home page
-GET     /json                           controllers.Application.json
-GET     /db                             controllers.Application.db(queries: Int ?= 1)
-
-# Map static resources from the /public folder to the /assets URL path
-GET     /assets/*file               controllers.Assets.at(path="/public", file)

+ 0 - 3
frameworks/Java/play-java-jpa/install.sh

@@ -1,3 +0,0 @@
-#!/bin/bash
-
-fw_depends play2 java

+ 0 - 1
frameworks/Java/play-java-jpa/project/build.properties

@@ -1 +0,0 @@
-sbt.version=0.13.0

+ 0 - 12
frameworks/Java/play-java-jpa/setup.py

@@ -1,12 +0,0 @@
-import setup_util
-import subprocess
-
-def start(args, logfile, errfile):
-  setup_util.replace_text("play-java-jpa/conf/application.conf", "jdbc:mysql:\/\/.*:3306", "jdbc:mysql://" + args.database_host + ":3306")
-  subprocess.Popen(["play","start"], stdin=subprocess.PIPE, cwd="play-java-jpa", stderr=errfile, stdout=logfile)
-  return 0
-
-def stop(logfile, errfile):
-  p = subprocess.Popen(["play","stop"], cwd="play-java-jpa", stderr=errfile, stdout=logfile)
-  p.communicate()
-  return 0

+ 20 - 1
frameworks/Java/play2-java/benchmark_config

@@ -38,7 +38,26 @@
         "port": "9000", 
         "db_url": "/db", 
         "query_url": "/queries?queries="
+      }, 
+      "java-jpa": {
+        "display_name": "play2-java-jpa", 
+        "setup_file": "setup_java_jpa", 
+        "framework": "play2", 
+        "language": "Java", 
+        "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="
       }
     }
   ]
-}
+}

+ 2 - 1
frameworks/Java/play2-java/generate_config.py

@@ -11,6 +11,7 @@ import collections, json, os, textwrap
 configurations = [
   ('Java',  None,    ['Linux'],            ['json']),
   ('Java',  'Ebean', ['Linux'],            ['db', 'query']),
+  ('Java',  'JPA',   ['Linux'],            ['db', 'query']),
   ('Scala', None,    ['Linux'],            ['json']),
   ('Scala', 'Anorm', ['Linux', 'Windows'], ['db', 'query', 'fortune', 'update']),
   ('Scala', 'Slick', ['Linux'],            ['db', 'query', 'fortune', 'update']),
@@ -88,4 +89,4 @@ for lang, _ in langs.iteritems():
       'framework': 'play2',
       'tests': [lang_test_configs[lang]]
     }, indent=2)
-    f.write(json_str)
+    f.write(json_str)

+ 0 - 0
frameworks/Java/play-java-jpa/.gitignore → frameworks/Java/play2-java/play2-java-jpa/.gitignore


+ 4 - 3
frameworks/Java/play-java-jpa/README.md → frameworks/Java/play2-java/play2-java-jpa/README.md

@@ -14,8 +14,8 @@ This is the Play portion of a [benchmarking test suite](../) comparing a variety
 ## Infrastructure Software Versions
 The tests were run with:
 
-* [Java OpenJDK 1.7.0_09](http://openjdk.java.net/)
-* [Play 2.1.0](http://http://www.playframework.com/)
+* [Java OpenJDK 1.7](http://openjdk.java.net/)
+* [Play 2.3.3](http://http://www.playframework.com/)
 
 ## Test URLs
 ### JSON Encoding Test
@@ -24,4 +24,5 @@ http://localhost/json
 
 ### Data-Store/Database Mapping Test
 
-http://localhost/db?queries=5
+http://localhost/db
+http://localhost/queries?queries=10

+ 52 - 25
frameworks/Java/play-java-jpa/app/controllers/Application.java → frameworks/Java/play2-java/play2-java-jpa/app/controllers/Application.java

@@ -8,7 +8,6 @@ import play.Play;
 import play.core.NamedThreadFactory;
 import play.libs.F;
 import play.libs.Json;
-
 import play.mvc.Controller;
 import play.mvc.Result;
 import scala.concurrent.ExecutionContext;
@@ -18,7 +17,10 @@ import utils.Predicated;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
-import java.util.concurrent.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 
 public class Application extends Controller {
 
@@ -38,39 +40,48 @@ public class Application extends Controller {
             new NamedThreadFactory("dbEc"));
     private static final ExecutionContext dbEc = ExecutionContexts.fromExecutorService(tpe);
 
-    // A predicate for checking our ability to service database requests is determined by ensuring that the request
-    // queue doesn't fill up beyond a certain threshold. For convenience we use the max number of connections * the max
-    // # of db requests per web request to determine this threshold. It is a rough check as we don't know how many
-    // queries we're going to make or what other threads are running in parallel etc. Nevertheless, the check is
-    // adequate in order to throttle the acceptance of requests to the size of the pool.
+    public static Result json() {
+        final ObjectNode result = OBJECT_MAPPER.createObjectNode();
+        result.put("message", "Hello World!");
+        return ok(result);
+    }
+
+    // If the thread-pool used by the database grows too large then our server
+    // is probably struggling, and we should start dropping requests. Set
+    // the max size of our queue something above the number of concurrent
+    // connections that we need to handle.
     public static class IsDbAvailable implements Predicate {
         @Override
         public boolean condition() {
-            return (tpe.getQueue().size() < maxConnections * MAX_QUERIES_PER_REQUEST);
+            return tpe.getQueue().size() <= 1024;
         }
     }
 
-    public static Result json() {
-        final ObjectNode result = OBJECT_MAPPER.createObjectNode();
-        result.put("message", "Hello World!");
-        return ok(result);
+    @Predicated(predicate = IsDbAvailable.class, failed = SERVICE_UNAVAILABLE)
+    public static F.Promise<Result> db() {
+        return getRandomWorlds(1).map(new F.Function<List<World>, Result>() {
+            @Override
+            public Result apply(List<World> worlds) {
+                return ok(Json.toJson(worlds.get(0)));
+            }
+        });
     }
 
-
     @Predicated(predicate = IsDbAvailable.class, failed = SERVICE_UNAVAILABLE)
-    public static F.Promise<Result> db(final Integer queries) {
-        final Random random = ThreadLocalRandom.current();
-        final List<F.Promise<? extends World>> promises = new ArrayList<F.Promise<? extends World>>(queries);
-        for (int i = 0; i < queries; ++i) {
-            final F.Promise<World> p = F.Promise.promise(new F.Function0<World>() {
-                @Override
-                public World apply() throws Throwable {
-                    return World.findById(Long.valueOf(random.nextInt(TEST_DATABASE_ROWS) + 1));
-                }
-            }, dbEc);
-            promises.add(p);
+    public static F.Promise<Result> queries(final String queryCountString) {
+        int queryCount;
+        try {
+            queryCount = Integer.parseInt(queryCountString, 10);
+        } catch (NumberFormatException e) {
+            queryCount = 1;
+        }
+        if (queryCount < 1) {
+            queryCount = 1;
+        } else if (queryCount > 500) {
+            queryCount = 500;
         }
-        return F.Promise.sequence(promises).map(new F.Function<List<World>, Result>() {
+
+        return getRandomWorlds(queryCount).map(new F.Function<List<World>, Result>() {
             @Override
             public Result apply(List<World> worlds) {
                 return ok(Json.toJson(worlds));
@@ -78,4 +89,20 @@ public class Application extends Controller {
         });
     }
 
+    private static F.Promise<List<World>> getRandomWorlds(final int n) {
+        return F.Promise.promise(new F.Function0<List<World>>() {
+            @Override
+            public List<World> apply() throws Throwable {
+                Random random = ThreadLocalRandom.current();
+                List<World> worlds = new ArrayList<World>(n);
+                for (int i = 0; i < n; ++i) {
+                    long randomId = random.nextInt(TEST_DATABASE_ROWS) + 1;
+                    World world = World.findById(randomId);
+                    worlds.add(world);
+                }
+                return worlds;
+            }
+        }, dbEc);
+    }
+
 }

+ 0 - 0
frameworks/Java/play-java-jpa/app/models/World.java → frameworks/Java/play2-java/play2-java-jpa/app/models/World.java


+ 0 - 0
frameworks/Java/play-java-jpa/app/utils/Predicate.java → frameworks/Java/play2-java/play2-java-jpa/app/utils/Predicate.java


+ 0 - 0
frameworks/Java/play-java-jpa/app/utils/Predicated.java → frameworks/Java/play2-java/play2-java-jpa/app/utils/Predicated.java


+ 3 - 3
frameworks/Java/play-java-jpa/app/utils/PredicatedAction.java → frameworks/Java/play2-java/play2-java-jpa/app/utils/PredicatedAction.java

@@ -8,16 +8,16 @@ package utils;
 import play.libs.F;
 import play.mvc.Action;
 import play.mvc.Http;
-import play.mvc.SimpleResult;
+import play.mvc.Result;
 
 public class PredicatedAction extends Action<Predicated> {
     @Override
-    public F.Promise<SimpleResult> call(final Http.Context ctx) throws Throwable {
+    public F.Promise<Result> call(final Http.Context ctx) throws Throwable {
         final Predicate p = configuration.predicate().newInstance();
         if (p.condition()) {
             return delegate.call(ctx);
         } else {
-            return F.Promise.<SimpleResult>pure(status(configuration.failed()));
+            return F.Promise.<Result>pure(status(configuration.failed()));
         }
     }
 }

+ 16 - 0
frameworks/Java/play2-java/play2-java-jpa/build.sbt

@@ -0,0 +1,16 @@
+name := "play2-java-jpa"
+
+version := "1.0-SNAPSHOT"
+
+scalaVersion := "2.11.2"
+
+lazy val root = (project in file(".")).enablePlugins(PlayJava)
+
+libraryDependencies ++= Seq(
+  javaJdbc,
+  javaJpa,
+  "mysql" % "mysql-connector-java" % "5.1.32",
+  "org.hibernate" % "hibernate-entitymanager" % "4.3.6.Final"
+  )
+
+dependencyOverrides += "com.jolbox" % "bonecp" % "0.8.0.RELEASE"

+ 1 - 1
frameworks/Java/play-java-jpa/conf/META-INF/persistence.xml → frameworks/Java/play2-java/play2-java-jpa/conf/META-INF/persistence.xml

@@ -4,7 +4,7 @@
              version="2.0">
              
     <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
-        <provider>org.hibernate.ejb.HibernatePersistence</provider>
+        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
         <non-jta-data-source>DefaultDS</non-jta-data-source>
         <properties>
             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>

+ 0 - 0
frameworks/Java/play-java-jpa/conf/application.conf → frameworks/Java/play2-java/play2-java-jpa/conf/application.conf


+ 11 - 0
frameworks/Java/play2-java/play2-java-jpa/conf/routes

@@ -0,0 +1,11 @@
+# Routes
+# This file defines all application routes (Higher priority routes first)
+# ~~~~
+
+# Home page
+GET        /json                controllers.Application.json
+GET        /db                  controllers.Application.db()
+GET        /queries             controllers.Application.queries(queries ?= "1")
+
+# Map static resources from the /public folder to the /assets URL path
+GET        /assets/*file        controllers.Assets.at(path="/public", file)

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

@@ -0,0 +1 @@
+sbt.version=0.13.5

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

@@ -5,4 +5,4 @@ logLevel := Level.Warn
 resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
 
 // Use the Play sbt plugin for Play projects
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.0")
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.3")

+ 0 - 0
frameworks/Java/play-java-jpa/source_code → frameworks/Java/play2-java/play2-java-jpa/source_code


+ 6 - 0
frameworks/Java/play2-java/setup_java_jpa.py

@@ -0,0 +1,6 @@
+
+# This file was generated by frameworks/Java/play2-java/generate_config.py.
+# Do not edit this file directly, use the script to regenerate.
+from .setup_common import make_setup_for_dir
+
+make_setup_for_dir(globals(), 'play2-java-jpa')