Эх сурвалжийг харах

jooby upgrade (#6137)

- latest jooby
- use buffer for fortunes
- use direct buffer for plaintext
Edgar Espina 4 жил өмнө
parent
commit
3928029772

+ 20 - 7
frameworks/Java/jooby/pom.xml

@@ -11,7 +11,7 @@
   <name>jooby</name>
 
   <properties>
-    <jooby.version>2.9.2</jooby.version>
+    <jooby.version>2.9.3</jooby.version>
     <netty.version>4.1.49.Final</netty.version>
     <dsl-json.version>1.9.5</dsl-json.version>
     <postgresql.version>42.2.13</postgresql.version>
@@ -54,12 +54,6 @@
       <version>${postgresql.version}</version>
     </dependency>
 
-    <!-- logging -->
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-    </dependency>
-
     <dependency>
       <groupId>io.vertx</groupId>
       <artifactId>vertx-pg-client</artifactId>
@@ -77,6 +71,25 @@
   <build>
     <finalName>jooby</finalName>
     <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>3.2.0</version>
+        <executions>
+          <execution>
+            <id>add-source</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>add-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>${project.build.outputDirectory}${file.separator}generated-sources${file.separator}annotations</source>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
       <plugin>
         <groupId>com.fizzed</groupId>
         <artifactId>rocker-maven-plugin</artifactId>

+ 18 - 10
frameworks/Java/jooby/src/main/java/com/techempower/App.java

@@ -1,10 +1,10 @@
 package com.techempower;
 
-import io.jooby.Jooby;
-import io.jooby.hikari.HikariModule;
-import io.jooby.rocker.RockerModule;
+import static com.techempower.Util.randomWorld;
+import static io.jooby.ExecutionMode.EVENT_LOOP;
+import static io.jooby.MediaType.JSON;
 
-import javax.sql.DataSource;
+import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -14,9 +14,11 @@ import java.util.Collections;
 import java.util.List;
 import java.util.StringJoiner;
 
-import static com.techempower.Util.randomWorld;
-import static io.jooby.ExecutionMode.EVENT_LOOP;
-import static io.jooby.MediaType.JSON;
+import javax.sql.DataSource;
+
+import io.jooby.Jooby;
+import io.jooby.hikari.HikariModule;
+import io.jooby.rocker.RockerModule;
 
 public class App extends Jooby {
 
@@ -24,18 +26,24 @@ public class App extends Jooby {
 
   private static final String MESSAGE = "Hello, World!";
 
-  private static final byte[] MESSAGE_BYTES = MESSAGE.getBytes(StandardCharsets.UTF_8);
+  private static final byte[] MESSAGE_BYTES = MESSAGE.getBytes(StandardCharsets.US_ASCII);
+
+  private static final ByteBuffer MESSAGE_BUFFER = (ByteBuffer) ByteBuffer
+      .allocateDirect(MESSAGE_BYTES.length)
+      .put(MESSAGE_BYTES)
+      .flip();
 
   {
+
     /** Database: */
     install(new HikariModule());
     DataSource ds = require(DataSource.class);
 
     /** Template engine: */
-    install(new RockerModule());
+    install(new RockerModule().reuseBuffer(true));
 
     get("/plaintext", ctx ->
-        ctx.send(MESSAGE_BYTES)
+        ctx.send(MESSAGE_BUFFER.duplicate())
     );
 
     get("/json", ctx -> ctx

+ 23 - 5
frameworks/Java/jooby/src/main/java/com/techempower/Json.java

@@ -1,12 +1,11 @@
 package com.techempower;
 
+import java.nio.ByteBuffer;
+
 import com.dslplatform.json.DslJson;
 import com.dslplatform.json.JsonWriter;
 import com.dslplatform.json.runtime.Settings;
 
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
 public class Json {
   private final static DslJson<Object> dslJson = new DslJson<>(Settings.basicSetup());
 
@@ -16,11 +15,30 @@ public class Json {
     }
   };
 
-  public static final ByteBuffer encode(Object data) throws IOException {
+  public static final ByteBuffer encode(Message data) {
     JsonWriter writer = pool.get();
     writer.reset();
-    dslJson.serialize(writer, data);
+    _Message_DslJsonConverter.ObjectFormatConverter converter = new _Message_DslJsonConverter.ObjectFormatConverter(
+        dslJson);
+    converter.write(writer, data);
     return ByteBuffer.wrap(writer.getByteBuffer(), 0, writer.size());
   }
 
+  public static final ByteBuffer encode(World data) {
+    JsonWriter writer = pool.get();
+    writer.reset();
+    _World_DslJsonConverter.ObjectFormatConverter converter = new _World_DslJsonConverter.ObjectFormatConverter(
+        dslJson);
+    converter.write(writer, data);
+    return ByteBuffer.wrap(writer.getByteBuffer(), 0, writer.size());
+  }
+
+  public static final ByteBuffer encode(World[] data) {
+    JsonWriter writer = pool.get();
+    writer.reset();
+    _World_DslJsonConverter.ObjectFormatConverter converter = new _World_DslJsonConverter.ObjectFormatConverter(
+        dslJson);
+    writer.serialize(data, converter);
+    return ByteBuffer.wrap(writer.getByteBuffer(), 0, writer.size());
+  }
 }

+ 30 - 37
frameworks/Java/jooby/src/main/java/com/techempower/ReactivePg.java

@@ -1,8 +1,22 @@
 package com.techempower;
 
+import static com.techempower.Util.randomWorld;
+import static io.jooby.ExecutionMode.EVENT_LOOP;
+import static io.jooby.MediaType.JSON;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import com.fizzed.rocker.RockerOutputFactory;
 import io.jooby.Context;
 import io.jooby.Jooby;
+import io.jooby.MediaType;
 import io.jooby.ServerOptions;
+import io.jooby.rocker.ByteBufferOutput;
 import io.jooby.rocker.RockerModule;
 import io.vertx.pgclient.PgPool;
 import io.vertx.sqlclient.Row;
@@ -10,17 +24,6 @@ import io.vertx.sqlclient.RowIterator;
 import io.vertx.sqlclient.SqlConnection;
 import io.vertx.sqlclient.Tuple;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import static com.techempower.Util.randomWorld;
-import static io.jooby.ExecutionMode.EVENT_LOOP;
-import static io.jooby.MediaType.JSON;
-
 public class ReactivePg extends Jooby {
 
   private static final String UPDATE_WORLD = "UPDATE world SET randomnumber=$1 WHERE id=$2";
@@ -39,22 +42,18 @@ public class ReactivePg extends Jooby {
     PgClients clients = new PgClients(getConfig().getConfig("db"));
 
     /** Template engine: */
-    install(new RockerModule());
+    install(new RockerModule().reuseBuffer(true));
 
     /** Single query: */
     get("/db", ctx -> {
       clients.next().preparedQuery(SELECT_WORLD).execute(Tuple.of(randomWorld()), rsp -> {
-        try {
-          if (rsp.succeeded()) {
-            RowIterator<Row> rs = rsp.result().iterator();
-            Row row = rs.next();
-            ctx.setResponseType(JSON)
-                .send(Json.encode(new World(row.getInteger(0), row.getInteger(1))));
-          } else {
-            ctx.sendError(rsp.cause());
-          }
-        } catch (IOException x) {
-          sendError(ctx, x);
+        if (rsp.succeeded()) {
+          RowIterator<Row> rs = rsp.result().iterator();
+          Row row = rs.next();
+          ctx.setResponseType(JSON)
+              .send(Json.encode(new World(row.getInteger(0), row.getInteger(1))));
+        } else {
+          ctx.sendError(rsp.cause());
         }
       });
       return ctx;
@@ -77,12 +76,8 @@ public class ReactivePg extends Jooby {
           }
           // ready?
           if (counter.incrementAndGet() == queries) {
-            try {
-              ctx.setResponseType(JSON)
-                  .send(Json.encode(result));
-            } catch (IOException x) {
-              sendError(ctx, x);
-            }
+            ctx.setResponseType(JSON)
+                .send(Json.encode(result));
           }
         });
       }
@@ -121,17 +116,13 @@ public class ReactivePg extends Jooby {
               }
 
               conn.preparedQuery(UPDATE_WORLD).executeBatch(batch, updateCallback -> {
-                conn.close();
                 if (updateCallback.failed()) {
                   sendError(ctx, updateCallback.cause());
                 } else {
-                  try {
-                    ctx.setResponseType(JSON)
-                        .send(Json.encode(result));
-                  } catch (IOException x) {
-                    sendError(ctx, x);
-                  }
+                  ctx.setResponseType(JSON)
+                      .send(Json.encode(result));
                 }
+                conn.close();
               });
             }
           });
@@ -141,6 +132,7 @@ public class ReactivePg extends Jooby {
     });
 
     /** Fortunes: */
+    RockerOutputFactory<ByteBufferOutput> factory = require(RockerOutputFactory.class);
     get("/fortunes", ctx -> {
       clients.next().preparedQuery(SELECT_FORTUNE).execute(rsp -> {
         if (rsp.succeeded()) {
@@ -157,7 +149,8 @@ public class ReactivePg extends Jooby {
 
           /** render view: */
           views.fortunes template = views.fortunes.template(fortunes);
-          ctx.render(template);
+          ctx.setResponseType(MediaType.html)
+              .send(template.render(factory).toBuffer());
         } else {
           ctx.sendError(rsp.cause());
         }

+ 1 - 1
frameworks/Kotlin/kooby/pom.xml

@@ -12,7 +12,7 @@
   <name>kooby: jooby+kotlin</name>
 
   <properties>
-    <jooby.version>2.9.2</jooby.version>
+    <jooby.version>2.9.3</jooby.version>
     <postgresql.version>42.2.13</postgresql.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <maven.compiler.source>1.8</maven.compiler.source>

+ 1 - 1
frameworks/Kotlin/kooby/src/main/kotlin/kooby/App.kt

@@ -41,7 +41,7 @@ fun main(args: Array<String>) {
     val ds = require(DataSource::class)
 
     /** Template engine: */
-    install(RockerModule())
+    install(RockerModule().reuseBuffer(true))
 
     get("/plaintext") {
       ctx.send(MESSAGE_BYTES)