ソースを参照

Jooby 1.1.0 + Rocker + Requery (#2624)

Edgar Espina 8 年 前
コミット
5b32869eec

+ 3 - 3
frameworks/Java/jooby/README.md

@@ -26,9 +26,9 @@ This is the [Jooby](http://jooby.org) portion of a [benchmarking test suite](../
 
 ## Versions
 
-* [Jooby 0.11.x](http://jooby.org)
-* [Undertow 1.2.x](http://undertow.io)
-* [Jackson 2.6.x](http://wiki.fasterxml.com/JacksonHome)
+* [Jooby 1.1.0](http://jooby.org)
+* [Undertow 1.4.x](http://undertow.io)
+* [Jackson 2.8.x](http://wiki.fasterxml.com/JacksonHome)
 
 ## Test URLs
 

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

@@ -15,13 +15,13 @@
       "language": "Java",
       "flavor": "None",
       "orm": "Raw",
-      "platform": "Netty",
+      "platform": "Undertow",
       "webserver": "None",
       "os": "Linux",
       "database_os": "Linux",
       "display_name": "Jooby",
       "notes": "",
-      "versus": "netty"
+      "versus": "undertow"
     }
   }]
 }

+ 0 - 1
frameworks/Java/jooby/conf/application.conf

@@ -14,4 +14,3 @@ DBHOST = localhost
 db.url = "jdbc:mysql://"${DBHOST}":3306/hello_world?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"
 db.user = benchmarkdbuser
 db.password = benchmarkdbpass
-hikari.maximumPoolSize = ${server.threads.Max}

+ 39 - 13
frameworks/Java/jooby/pom.xml

@@ -7,7 +7,7 @@
   <parent>
     <groupId>org.jooby</groupId>
     <artifactId>jooby-project</artifactId>
-    <version>1.0.3</version>
+    <version>1.1.0</version>
   </parent>
 
   <artifactId>jooby</artifactId>
@@ -17,29 +17,24 @@
   <name>jooby</name>
 
   <properties>
-    <jooby.version>1.0.3</jooby.version>
+    <jooby.version>1.1.0</jooby.version>
+    <rocker.touchFile>/dev/null</rocker.touchFile>
 
     <!-- Startup class -->
     <application.class>com.techempower.App</application.class>
   </properties>
 
   <dependencies>
-    <!-- Jooby -->
-    <dependency>
-      <groupId>org.jooby</groupId>
-      <artifactId>jooby</artifactId>
-    </dependency>
-
     <!-- jackson -->
     <dependency>
       <groupId>org.jooby</groupId>
       <artifactId>jooby-jackson</artifactId>
     </dependency>
 
-    <!-- jdbi -->
+    <!-- requery -->
     <dependency>
       <groupId>org.jooby</groupId>
-      <artifactId>jooby-jdbi</artifactId>
+      <artifactId>jooby-requery</artifactId>
     </dependency>
 
     <!-- mySQL -->
@@ -48,16 +43,16 @@
       <artifactId>mysql-connector-java</artifactId>
     </dependency>
 
-    <!-- handlebars -->
+    <!-- rocker -->
     <dependency>
       <groupId>org.jooby</groupId>
-      <artifactId>jooby-hbs</artifactId>
+      <artifactId>jooby-rocker</artifactId>
     </dependency>
 
     <!-- Server -->
     <dependency>
       <groupId>org.jooby</groupId>
-      <artifactId>jooby-netty</artifactId>
+      <artifactId>jooby-undertow</artifactId>
     </dependency>
 
     <!-- logging -->
@@ -103,6 +98,37 @@
         <artifactId>maven-shade-plugin</artifactId>
       </plugin>
     </plugins>
+    <!-- rocker m2e -->
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.eclipse.m2e</groupId>
+          <artifactId>lifecycle-mapping</artifactId>
+          <version>1.0.0</version>
+          <configuration>
+            <lifecycleMappingMetadata>
+              <pluginExecutions>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>com.fizzed</groupId>
+                    <artifactId>rocker-maven-plugin</artifactId>
+                    <versionRange>[${rocker.version},)</versionRange>
+                    <goals>
+                      <goal>generate</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <execute>
+                      <runOnIncremental>true</runOnIncremental>
+                    </execute>
+                  </action>
+                </pluginExecution>
+              </pluginExecutions>
+            </lifecycleMappingMetadata>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
   </build>
 
 </project>

+ 0 - 12
frameworks/Java/jooby/public/fortunes.html

@@ -1,12 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head><title>Fortunes</title></head>
-<body>
-<table>
-    <tr><th>id</th><th>message</th></tr>
-    {{#each fortunes}}
-    <tr><td>{{id}}</td><td>{{message}}</td></tr>
-    {{/each}}
-</table>
-</body>
-</html>

+ 17 - 0
frameworks/Java/jooby/public/views/fortunes.rocker.html

@@ -0,0 +1,17 @@
+@import java.util.List
+@import com.techempower.Fortune
+
+@args (List<Fortune> fortunes)
+
+<!DOCTYPE html>
+<html>
+<head><title>Fortunes</title></head>
+<body>
+<table>
+    <tr><th>id</th><th>message</th></tr>
+    @for (it: fortunes) {
+    <tr><td>@it.getId()</td><td>@it.getMessage()</td></tr>
+    }
+</table>
+</body>
+</html>

+ 2 - 0
frameworks/Java/jooby/source_code

@@ -6,3 +6,5 @@
 ./jooby/src/main/java
 ./jooby/src/main/java/com/techempower
 ./jooby/src/main/java/com/techempower/App.java
+./jooby/src/main/java/com/techempower/AbstractFortune.java
+./jooby/src/main/java/com/techempower/AbstractWorld.java

+ 0 - 0
frameworks/Java/jooby/src/etc/requery.activator


+ 0 - 0
frameworks/Java/jooby/src/etc/rocker.activator


+ 20 - 0
frameworks/Java/jooby/src/main/java/com/techempower/AbstractFortune.java

@@ -0,0 +1,20 @@
+package com.techempower;
+
+import io.requery.Entity;
+import io.requery.Key;
+
+/**
+ * The model for the "fortune" database table.
+ */
+@Entity
+public abstract class AbstractFortune implements Comparable<AbstractFortune> {
+  @Key
+  int id;
+
+  String message;
+
+  @Override
+  public int compareTo(AbstractFortune other) {
+    return message.compareTo(other.message);
+  }
+}

+ 15 - 0
frameworks/Java/jooby/src/main/java/com/techempower/AbstractWorld.java

@@ -0,0 +1,15 @@
+package com.techempower;
+
+import io.requery.Entity;
+import io.requery.Generated;
+import io.requery.Key;
+
+@Entity
+public abstract class AbstractWorld {
+
+  @Key
+  @Generated
+  int id;
+
+  int randomNumber;
+}

+ 42 - 32
frameworks/Java/jooby/src/main/java/com/techempower/App.java

@@ -1,19 +1,26 @@
 package com.techempower;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+
+import io.requery.EntityStore;
+import io.requery.Persistable;
+
 import org.jooby.Jooby;
 import org.jooby.MediaType;
+
+import static org.jooby.MediaType.*;
 import org.jooby.Result;
 import org.jooby.Results;
-import org.jooby.hbs.Hbs;
-import org.jooby.jdbi.Jdbi;
+import org.jooby.jdbc.Jdbc;
 import org.jooby.json.Jackson;
-import org.skife.jdbi.v2.Handle;
+import org.jooby.requery.Requery;
+import org.jooby.rocker.Rockerby;
 
 import java.time.Instant;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.Collections;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
 import java.util.concurrent.ThreadLocalRandom;
@@ -21,8 +28,9 @@ import java.util.concurrent.ThreadLocalRandom;
 /**
  * @author jooby generator
  */
+@SuppressWarnings("unchecked")
 public class App extends Jooby {
-
+  
   static final DateTimeFormatter fmt = DateTimeFormatter
       .ofPattern("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH)
       .withZone(ZoneId.of("GMT"));
@@ -37,53 +45,55 @@ public class App extends Jooby {
   static final String HELLO_WORLD = "Hello, World!";
 
   {
-    /** json via jackson .*/
+    /** templates via rocker. */
+    use(new Rockerby());
+
+    /** json via jackson . */
     ObjectMapper mapper = new ObjectMapper();
     use(new Jackson(mapper));
 
-    /** database via jdbi .*/
-    use(new Jdbi());
-
-    /** templates via handlebars .*/
-    use(new Hbs());
+    /** database via requery. */
+    use(new Jdbc());
+    use(new Requery(Models.DEFAULT));
 
-    get("/plaintext", () -> result(HELLO_WORLD, MediaType.text))
+    get("/plaintext", () -> result(HELLO_WORLD, text))
         .renderer("text");
 
-    get("/json", () -> result(mapper.createObjectNode().put("message", HELLO_WORLD), MediaType.json))
+    get("/json", () -> result(mapper.createObjectNode().put("message", HELLO_WORLD), json))
         .renderer("json");
 
     get("/db", req -> {
-      try (Handle handle = req.require(Handle.class)) {
-        int id = ThreadLocalRandom.current().nextInt(DB_ROWS + 1);
-        return result(
-            handle.createQuery("select * from World where id = :id")
-                .bind("id", id)
-                .map((idx, rs, ctx) -> new World(rs.getInt("id"), rs.getInt("randomNumber")))
-                .first(),
-            MediaType.json);
-      }
+      int id = ThreadLocalRandom.current().nextInt(DB_ROWS) + 1;
+      EntityStore<Persistable, World> store = require(EntityStore.class);
+      World world = store.select(World.class)
+          .where(World.ID.eq(id))
+          .get()
+          .first();
+      return result(world, json);
     }).renderer("json");
 
     get("/fortunes", req -> {
-      try (Handle handle = req.require(Handle.class)) {
-        List<Fortune> fortunes = handle.createQuery("select * from fortune")
-                .map((idx,rs,ctx) -> new Fortune(rs.getInt("id"), rs.getString("message")))
-                .list();
-        fortunes.add(new Fortune(0, "Additional fortune added at request time."));
-        Collections.sort(fortunes);
-        return result(Results.html("fortunes").put("fortunes", fortunes), MediaType.html);
-      }
-    }).renderer("html");
+      EntityStore<Persistable, Fortune> store = require(EntityStore.class);
+      List<Fortune> fortunes = store.select(Fortune.class) 
+          .get()
+          .collect(new LinkedList<>());
+      Fortune fortune0 = new Fortune();
+      fortune0.setMessage("Additional fortune added at request time.");
+      fortune0.setId(0);
+      fortunes.add(fortune0);
+      Collections.sort(fortunes);
+      return views.fortunes.template(fortunes);
+    });
   }
 
   private Result result(final Object value, final MediaType type) {
-    return Results.ok(value).type(type)
+    return Results.ok(value)
+        .type(type)
         .header(H_SERVER, SERVER)
         .header(H_DATE, fmt.format(Instant.ofEpochMilli(System.currentTimeMillis())));
   }
 
-  public static void main(final String[] args) throws Exception {
+  public static void main(final String[] args) {
     run(App::new, args);
   }
 

+ 0 - 25
frameworks/Java/jooby/src/main/java/com/techempower/Fortune.java

@@ -1,25 +0,0 @@
-package com.techempower;
-
-/**
- * The model for the "fortune" database table.
- */
-public final class Fortune implements Comparable<Fortune> {
-    public int id;
-    public String message;
-
-    /**
-     * Constructs a new fortune object with the given parameters.
-     *
-     * @param id the ID of the fortune
-     * @param message the message of the fortune
-     */
-    public Fortune(int id, String message) {
-        this.id = id;
-        this.message = message;
-    }
-
-    @Override
-    public int compareTo(Fortune other) {
-        return message.compareTo(other.message);
-    }
-}

+ 0 - 21
frameworks/Java/jooby/src/main/java/com/techempower/World.java

@@ -1,21 +0,0 @@
-package com.techempower;
-
-public class World {
-
-  private int id;
-
-  private int randomNumber;
-
-  public World(int id, int randomNumber) {
-    this.id = id;
-    this.randomNumber = randomNumber;
-  }
-
-  public int getId() {
-    return id;
-  }
-
-  public int getRandomNumber() {
-    return randomNumber;
-  }
-}