Browse Source

Upgrade play2-java-ebean-hikaricp to Play 2.5 (#2779)

Ben McCann 8 years ago
parent
commit
cbbaa67ed9

+ 1 - 1
frameworks/Java/play2-java/play2-java-ebean-hikaricp/README.md

@@ -20,7 +20,7 @@ This is the Play portion of a [benchmarking test suite](../) comparing a variety
 The tests were run with:
 The tests were run with:
 
 
 * Java 8
 * Java 8
-* [Play 2.4.2](http://http://www.playframework.com/)
+* [Play 2.5.14](https://www.playframework.com/)
 
 
 ## Test URLs
 ## Test URLs
 ### JSON Encoding Test
 ### JSON Encoding Test

+ 4 - 15
frameworks/Java/play2-java/play2-java-ebean-hikaricp/app/controllers/Application.java

@@ -1,10 +1,9 @@
 package controllers;
 package controllers;
 
 
-import akka.dispatch.ExecutionContexts;
+import com.google.inject.name.Named;
 import models.Fortune;
 import models.Fortune;
 import models.World;
 import models.World;
 import play.Play;
 import play.Play;
-import play.core.NamedThreadFactory;
 import play.libs.F;
 import play.libs.F;
 import play.libs.Json;
 import play.libs.Json;
 import play.mvc.Controller;
 import play.mvc.Controller;
@@ -19,33 +18,23 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
 import java.util.Random;
 import java.util.Random;
-import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+import javax.inject.Inject;
 
 
 @With(Headers.class)
 @With(Headers.class)
 public class Application extends Controller {
 public class Application extends Controller {
 
 
     private static final int TEST_DATABASE_ROWS = 10000;
     private static final int TEST_DATABASE_ROWS = 10000;
 
 
-    private static final int partitionCount = Play.application().configuration().getInt("db.default.partitionCount");
-    private static final int maxConnections =
-            partitionCount * Play.application().configuration().getInt("db.default.maxConnectionsPerPartition");
-    private static final int minConnections =
-            partitionCount * Play.application().configuration().getInt("db.default.minConnectionsPerPartition");
-
-    private static final ThreadPoolExecutor tpe = new ThreadPoolExecutor(minConnections, maxConnections,
-            0L, TimeUnit.MILLISECONDS,
-            new LinkedBlockingQueue<>(),
-            new NamedThreadFactory("dbEc"));
-    private static final ExecutionContext dbEc = ExecutionContexts.fromExecutorService(tpe);
+    @Inject @Named("dbEc") private ExecutionContext dbEc;
 
 
     // If the thread-pool used by the database grows too large then our server
     // If the thread-pool used by the database grows too large then our server
     // is probably struggling, and we should start dropping requests. Set
     // is probably struggling, and we should start dropping requests. Set
     // the max size of our queue something above the number of concurrent
     // the max size of our queue something above the number of concurrent
     // connections that we need to handle.
     // connections that we need to handle.
     public static class IsDbAvailable implements Predicate {
     public static class IsDbAvailable implements Predicate {
+        @Inject @Named("dbTpe") private ThreadPoolExecutor tpe;
         @Override
         @Override
         public boolean condition() {
         public boolean condition() {
             return tpe.getQueue().size() <= 1024;
             return tpe.getQueue().size() <= 1024;

+ 37 - 0
frameworks/Java/play2-java/play2-java-ebean-hikaricp/app/inject/AppModule.java

@@ -0,0 +1,37 @@
+package inject;
+
+import akka.dispatch.ExecutionContexts;
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
+import com.google.inject.name.Named;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import play.Configuration;
+import play.core.NamedThreadFactory;
+import scala.concurrent.ExecutionContext;
+
+public class AppModule extends AbstractModule {
+
+  protected void configure() {
+  }
+
+  @Provides @Singleton @Named("dbTpe")
+  public ThreadPoolExecutor provideThreadPoolExecutor(Configuration configuration) {
+    int partitionCount = configuration.getInt("db.default.partitionCount");
+    int maxConnections = partitionCount * configuration.getInt("db.default.maxConnectionsPerPartition");
+    int minConnections = partitionCount * configuration.getInt("db.default.minConnectionsPerPartition");
+
+    return new ThreadPoolExecutor(minConnections, maxConnections,
+            0L, TimeUnit.MILLISECONDS,
+            new LinkedBlockingQueue<>(),
+            new NamedThreadFactory("dbEc"));
+  }
+
+  @Provides @Singleton @Named("dbEc")
+  public ExecutionContext provideExecutionContext(@Named("dbTpe") ThreadPoolExecutor tpe) {
+    return ExecutionContexts.fromExecutorService(tpe);
+  }
+
+}

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

@@ -1,7 +1,7 @@
 package models;
 package models;
 
 
 import com.avaje.ebean.Ebean;
 import com.avaje.ebean.Ebean;
-import play.db.ebean.Model;
+import com.avaje.ebean.Model;
 
 
 import javax.persistence.Column;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Entity;
@@ -21,7 +21,7 @@ public class World extends Model {
         return Ebean.find(World.class, id);
         return Ebean.find(World.class, id);
     }
     }
 
 
-    public static List<World> save(final List<World> worlds) throws Throwable {
+    public static List<World> save(final List<World> worlds) {
         worlds.forEach(Ebean::update);
         worlds.forEach(Ebean::update);
 
 
         return worlds;
         return worlds;

+ 2 - 2
frameworks/Java/play2-java/play2-java-ebean-hikaricp/app/utils/Headers.java

@@ -1,9 +1,9 @@
 package utils;
 package utils;
 
 
+import java.util.concurrent.CompletionStage;
 import org.joda.time.DateTime;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.DateTimeFormatter;
-import play.libs.F;
 import play.mvc.Action;
 import play.mvc.Action;
 import play.mvc.Http;
 import play.mvc.Http;
 import play.mvc.Result;
 import play.mvc.Result;
@@ -13,7 +13,7 @@ public class Headers extends Action.Simple {
     private static final DateTimeFormatter RFC_1123_DATE_TIME = DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss 'GMT'").withZoneUTC();
     private static final DateTimeFormatter RFC_1123_DATE_TIME = DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss 'GMT'").withZoneUTC();
 
 
     @Override
     @Override
-    public F.Promise<Result> call(Http.Context context) throws Throwable {
+    public CompletionStage<Result> call(Http.Context context) {
         context.response().setHeader("Server", "Play2");
         context.response().setHeader("Server", "Play2");
         context.response().setHeader("Date", RFC_1123_DATE_TIME.print(new DateTime()));
         context.response().setHeader("Date", RFC_1123_DATE_TIME.print(new DateTime()));
         return delegate.call(context);
         return delegate.call(context);

+ 10 - 5
frameworks/Java/play2-java/play2-java-ebean-hikaricp/app/utils/PredicatedAction.java

@@ -5,19 +5,24 @@ package utils;
  * condition is not satisfied then a supplied status result is yielded.
  * condition is not satisfied then a supplied status result is yielded.
  */
  */
 
 
-import play.libs.F;
+import com.google.inject.Injector;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionStage;
+import javax.inject.Inject;
 import play.mvc.Action;
 import play.mvc.Action;
 import play.mvc.Http;
 import play.mvc.Http;
 import play.mvc.Result;
 import play.mvc.Result;
 
 
 public class PredicatedAction extends Action<Predicated> {
 public class PredicatedAction extends Action<Predicated> {
+
+    @Inject private Injector injector;
+
     @Override
     @Override
-    public F.Promise<Result> call(final Http.Context ctx) throws Throwable {
-        final Predicate p = configuration.predicate().newInstance();
+    public CompletionStage<Result> call(final Http.Context ctx) {
+        final Predicate p = injector.getInstance(configuration.predicate());
         if (p.condition()) {
         if (p.condition()) {
             return delegate.call(ctx);
             return delegate.call(ctx);
-        } else {
-            return F.Promise.<Result>pure(status(configuration.failed()));
         }
         }
+        return CompletableFuture.supplyAsync(() -> status(configuration.failed()));
     }
     }
 }
 }

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

@@ -17,6 +17,9 @@ application.langs="en"
 # Default to Global in the root package.
 # Default to Global in the root package.
 # global=Global
 # global=Global
 
 
+# The dependency injection modules
+play.modules.enabled += "inject.AppModule"
+
 # Database configuration
 # Database configuration
 # ~~~~~ 
 # ~~~~~ 
 # You can declare as many datasources as you want.
 # You can declare as many datasources as you want.

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

@@ -1 +1 @@
-sbt.version=0.13.9
+sbt.version=0.13.15

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

@@ -1,2 +1,2 @@
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.3")
-addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0")
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.14")
+addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "3.0.0")

+ 1 - 1
frameworks/Java/play2-java/play2-java-jpa-hikaricp/README.md

@@ -20,7 +20,7 @@ This is the Play portion of a [benchmarking test suite](../) comparing a variety
 The tests were run with:
 The tests were run with:
 
 
 * Java 8
 * Java 8
-* [Play 2.4.2](http://http://www.playframework.com/)
+* [Play 2.4.2](https://www.playframework.com/)
 
 
 ## Test URLs
 ## Test URLs
 ### JSON Encoding Test
 ### JSON Encoding Test

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

@@ -1 +1 @@
-sbt.version=0.13.9
+sbt.version=0.13.15