Explorar el Código

Update to Micronaut 2.3.1 (#6334)

James Kleeh hace 4 años
padre
commit
4a1e95776e

+ 1 - 1
frameworks/Java/micronaut/README.md

@@ -1,4 +1,4 @@
-# [Micronaut](http://micronaut.io) Benchmarking Test (1.2.7)
+# [Micronaut](http://micronaut.io) Benchmarking Test (2.3.1)
 
 ### Test Type Implementation Source Code
 

+ 5 - 4
frameworks/Java/micronaut/micronaut-cli.yml

@@ -1,5 +1,6 @@
-profile: service
-defaultPackage: benchmark
----
+applicationType: default
+defaultPackage: com.example
 testFramework: junit
-sourceLanguage: java
+sourceLanguage: java
+buildTool: maven
+features: [annotation-api, app-name, http-client, java, java-application, junit, logback, maven, netty-server, readme, shade, yaml]

+ 75 - 97
frameworks/Java/micronaut/pom.xml

@@ -2,86 +2,72 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <groupId>io.micronaut</groupId>
+    <groupId>benchmark</groupId>
     <artifactId>hello-micronaut</artifactId>
     <version>0.1</version>
+    <packaging>${packaging}</packaging>
+
+    <parent>
+        <groupId>io.micronaut</groupId>
+        <artifactId>micronaut-parent</artifactId>
+        <version>2.3.1</version>
+    </parent>
+
     <properties>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
+        <packaging>jar</packaging>
+        <jdk.version>11</jdk.version>
+        <release.version>11</release.version>
+        <micronaut.version>2.3.1</micronaut.version>
         <exec.mainClass>benchmark.Application</exec.mainClass>
-        <micronaut.version>1.2.7</micronaut.version>
+        <micronaut.runtime>netty</micronaut.runtime>
     </properties>
+
     <repositories>
         <repository>
-            <id>jcenter</id>
+            <id>jcenter.bintray.com</id>
             <url>https://jcenter.bintray.com</url>
         </repository>
-        <repository>
-            <id>bintray</id>
-            <url>https://dl.bintray.com/micronaut/core-releases-local</url>
-        </repository>
-        <repository>
-            <id>oss-snapshot</id>
-            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
-        </repository>
     </repositories>
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>io.micronaut</groupId>
-                <artifactId>micronaut-bom</artifactId>
-                <version>${micronaut.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
+
     <dependencies>
         <dependency>
             <groupId>io.micronaut</groupId>
-            <artifactId>micronaut-http-client</artifactId>
+            <artifactId>micronaut-inject</artifactId>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>io.micronaut</groupId>
-            <artifactId>micronaut-http-server-netty</artifactId>
+            <artifactId>micronaut-validation</artifactId>
             <scope>compile</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>io.netty</groupId>
-                    <artifactId>netty-common</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>io.micronaut</groupId>
-            <artifactId>micronaut-inject</artifactId>
+            <artifactId>micronaut-http-server-netty</artifactId>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>io.micronaut</groupId>
-            <artifactId>micronaut-runtime</artifactId>
+            <artifactId>micronaut-http-client</artifactId>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>io.micronaut</groupId>
-            <artifactId>micronaut-views</artifactId>
+            <artifactId>micronaut-runtime</artifactId>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>javax.annotation</groupId>
             <artifactId>javax.annotation-api</artifactId>
-            <version>1.3.2</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
-            <groupId>io.micronaut</groupId>
-            <artifactId>micronaut-inject-java</artifactId>
-            <scope>provided</scope>
+            <groupId>io.micronaut.views</groupId>
+            <artifactId>micronaut-views-rocker</artifactId>
+            <scope>compile</scope>
         </dependency>
         <dependency>
-            <groupId>io.micronaut.configuration</groupId>
-            <artifactId>micronaut-postgres-reactive</artifactId>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
             <scope>compile</scope>
         </dependency>
         <dependency>
@@ -92,98 +78,90 @@
         <dependency>
             <groupId>io.vertx</groupId>
             <artifactId>vertx-core</artifactId>
-            <version>3.5.4</version>
+            <version>3.9.2</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.vertx</groupId>
+            <artifactId>vertx-pg-client</artifactId>
+            <version>3.9.2</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>io.vertx</groupId>
             <artifactId>vertx-codegen</artifactId>
-            <version>3.5.4</version>
+            <version>3.9.2</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>io.vertx</groupId>
             <artifactId>vertx-rx-java2</artifactId>
-            <version>3.5.4</version>
+            <version>3.9.2</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
-            <groupId>com.github.spullara.mustache.java</groupId>
-            <artifactId>compiler</artifactId>
-            <version>0.9.5</version>
+            <groupId>com.fizzed</groupId>
+            <artifactId>rocker-runtime</artifactId>
+            <version>1.3.0</version>
         </dependency>
         <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
-            <version>1.2.3</version>
             <scope>runtime</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.13.1</version>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.micronaut.test</groupId>
+            <artifactId>micronaut-test-junit5</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
     <build>
         <plugins>
+            <plugin>
+                <groupId>io.micronaut.build</groupId>
+                <artifactId>micronaut-maven-plugin</artifactId>
+            </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <version>3.1.0</version>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <!-- Uncomment to enable incremental compilation -->
+                    <!-- <useIncrementalCompilation>false</useIncrementalCompilation> -->
+                    <annotationProcessorPaths combine.children="append">
+                    </annotationProcessorPaths>
+                    <compilerArgs>
+                        <arg>-Amicronaut.processing.group=com.example</arg>
+                        <arg>-Amicronaut.processing.module=demo</arg>
+                    </compilerArgs>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>com.fizzed</groupId>
+                <artifactId>rocker-maven-plugin</artifactId>
+                <version>1.3.0</version>
                 <executions>
                     <execution>
-                        <phase>package</phase>
+                        <id>generate-rocker-templates</id>
+                        <phase>generate-sources</phase>
                         <goals>
-                            <goal>shade</goal>
+                            <goal>generate</goal>
                         </goals>
                         <configuration>
-                            <transformers>
-                                <transformer
-                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                                    <mainClass>${exec.mainClass}</mainClass>
-                                </transformer>
-                                <transformer
-                                        implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
-                            </transformers>
+                            <optimize>true</optimize>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>exec-maven-plugin</artifactId>
-                <version>1.6.0</version>
-                <configuration>
-                    <executable>java</executable>
-                    <arguments>
-                        <argument>-classpath</argument>
-                        <classpath/>
-                        <argument>${exec.mainClass}</argument>
-                    </arguments>
-                </configuration>
-            </plugin>
         </plugins>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>3.8.0</version>
-                    <configuration>
-                        <compilerArgs>
-                            <arg>-parameters</arg>
-                        </compilerArgs>
-                        <annotationProcessorPaths>
-                            <path>
-                                <groupId>io.micronaut</groupId>
-                                <artifactId>micronaut-inject-java</artifactId>
-                                <version>${micronaut.version}</version>
-                            </path>
-                        </annotationProcessorPaths>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
     </build>
 </project>

+ 11 - 14
frameworks/Java/micronaut/src/main/java/benchmark/Database.java

@@ -3,20 +3,17 @@ package benchmark;
 import benchmark.entity.Fortune;
 import benchmark.entity.World;
 import benchmark.repository.DbRepository;
-import com.github.mustachejava.DefaultMustacheFactory;
-import com.github.mustachejava.Mustache;
+import io.micronaut.http.HttpResponse;
 import io.micronaut.http.annotation.Controller;
 import io.micronaut.http.annotation.Get;
 import io.micronaut.http.annotation.QueryValue;
-import io.micronaut.views.ModelAndView;
-import io.micronaut.views.View;
+import io.micronaut.views.rocker.RockerWritable;
 import io.reactivex.Flowable;
 import io.reactivex.Single;
+import benchmark.views.fortunes;
 
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.ThreadLocalRandom;
 
 import static java.util.Comparator.comparing;
@@ -24,7 +21,6 @@ import static java.util.Comparator.comparing;
 @Controller("/")
 public class Database {
 
-
     private final DbRepository dbRepository;
 
     public Database(DbRepository dbRepository) {
@@ -39,17 +35,18 @@ public class Database {
     @Get("/queries")
     public Single<List<World>> queries(@QueryValue String queries) {
         Flowable<World>[] worlds = new Flowable[parseQueryCount(queries)];
-        Arrays.setAll(worlds, i -> db().toFlowable());
+        Arrays.setAll(worlds, i -> dbRepository.getWorld(randomWorldNumber()).toFlowable());
 
         return Flowable.merge(Arrays.asList(worlds)).toList();
     }
 
-    @Get(value = "/fortunes", produces = "text/html;charset=utf-8")
-    public Single<ModelAndView<Map>> fortune() {
-        return dbRepository.fortunes().toList().flatMap(fortunes -> {
-            fortunes.add(new Fortune(0, "Additional fortune added at request time."));
-            fortunes.sort(comparing(fortune -> fortune.message));
-            return Single.just(new ModelAndView<>("fortunes", Collections.singletonMap("fortunes", fortunes)));
+    @Get(value = "/fortunes")
+    public Single<HttpResponse<RockerWritable>> fortune() {
+        return dbRepository.fortunes().toList().map(fortuneList -> {
+            fortuneList.add(new Fortune(0, "Additional fortune added at request time."));
+            fortuneList.sort(comparing(fortune -> fortune.message));
+            return HttpResponse.ok(new RockerWritable(fortunes.template(fortuneList)))
+                    .contentType("text/html;charset=utf-8");
         });
     }
 

+ 2 - 2
frameworks/Java/micronaut/src/main/java/benchmark/JsonSerialization.java

@@ -11,9 +11,9 @@ import java.util.Map;
 public class JsonSerialization {
 
     @Get("/")
-    Single<Map> getJson() {
+    Map<String, String> getJson() {
         Map<String, String> map = new HashMap<>();
         map.put("message", "Hello, World!");
-        return Single.just(map);
+        return map;
     }
 }

+ 5 - 3
frameworks/Java/micronaut/src/main/java/benchmark/PlainText.java

@@ -3,15 +3,17 @@ package benchmark;
 import io.micronaut.http.MediaType;
 import io.micronaut.http.annotation.Controller;
 import io.micronaut.http.annotation.Get;
-import io.reactivex.Single;
+import io.micronaut.scheduling.TaskExecutors;
+import io.micronaut.scheduling.annotation.ExecuteOn;
 
 @Controller("/plaintext")
+@ExecuteOn(TaskExecutors.IO)
 public class PlainText {
 
     private static final String TEXT = "Hello, World!";
 
     @Get(value = "/", produces = MediaType.TEXT_PLAIN)
-    Single<String> getPlainText() {
-        return Single.just(TEXT);
+    String getPlainText() {
+        return TEXT;
     }
 }

+ 8 - 15
frameworks/Java/micronaut/src/main/java/benchmark/repository/PgClientDbRepository.java

@@ -2,20 +2,17 @@ package benchmark.repository;
 
 import benchmark.entity.Fortune;
 import benchmark.entity.World;
-import io.reactiverse.pgclient.PgIterator;
-import io.reactiverse.pgclient.Row;
-import io.reactiverse.pgclient.Tuple;
 import io.reactivex.BackpressureStrategy;
 import io.reactivex.Flowable;
 import io.reactivex.Single;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import io.vertx.reactivex.sqlclient.Row;
+import io.vertx.reactivex.sqlclient.Tuple;
 
 import javax.inject.Singleton;
 
 @Singleton
 public class PgClientDbRepository implements DbRepository {
-    private final Logger log = LoggerFactory.getLogger(getClass());
+
     private final PgClients pgClients;
 
     public PgClientDbRepository(PgClients pgClients) {
@@ -25,13 +22,11 @@ public class PgClientDbRepository implements DbRepository {
     @Override
     public Single<World> getWorld(int id) {
         return Single.create(sink ->
-                pgClients.getOne().preparedQuery("SELECT * FROM world WHERE id = $1", Tuple.of(id), ar -> {
+                pgClients.getOne().preparedQuery("SELECT * FROM world WHERE id = $1").execute(Tuple.of(id), ar -> {
                     if (ar.failed()) {
                         sink.onError(ar.cause());
                     } else {
-
                         final Row row = ar.result().iterator().next();
-
                         World world = new World(row.getInteger(0), row.getInteger(1));
                         sink.onSuccess(world);
                     }
@@ -39,7 +34,7 @@ public class PgClientDbRepository implements DbRepository {
     }
 
     private Single<World> updateWorld(World world) {
-        return Single.create(sink -> pgClients.getOne().preparedQuery("UPDATE world SET randomnumber = $1 WHERE id = $2", Tuple.of(world.randomNumber, world.id), ar -> {
+        return Single.create(sink -> pgClients.getOne().preparedQuery("UPDATE world SET randomnumber = $1 WHERE id = $2").execute(Tuple.of(world.randomNumber, world.id), ar -> {
             if (ar.failed()) {
                 sink.onError(ar.cause());
             } else {
@@ -59,18 +54,16 @@ public class PgClientDbRepository implements DbRepository {
     @Override
     public Flowable<Fortune> fortunes() {
         return Flowable.create(sink ->
-                pgClients.getOne().preparedQuery("SELECT * FROM fortune", ar -> {
+                pgClients.getOne().preparedQuery("SELECT * FROM fortune").execute(ar -> {
                     if (ar.failed()) {
                         sink.onError(ar.cause());
                         return;
                     }
 
-                    PgIterator resultSet = ar.result().iterator();
-                    while (resultSet.hasNext()) {
-                        Tuple row = resultSet.next();
+                    for (Row row : ar.result()) {
                         sink.onNext(new Fortune(row.getInteger(0), row.getString(1)));
                     }
                     sink.onComplete();
                 }), BackpressureStrategy.BUFFER);
     }
-}
+}

+ 15 - 17
frameworks/Java/micronaut/src/main/java/benchmark/repository/PgClientFactory.java

@@ -1,11 +1,10 @@
 package benchmark.repository;
 
-import io.micronaut.context.annotation.Bean;
 import io.micronaut.context.annotation.Factory;
-import io.reactiverse.pgclient.PgClient;
-import io.reactiverse.pgclient.PgPool;
-import io.reactiverse.pgclient.PgPoolOptions;
-import io.vertx.core.Vertx;
+import io.vertx.pgclient.PgConnectOptions;
+import io.vertx.reactivex.core.Vertx;
+import io.vertx.reactivex.pgclient.PgPool;
+import io.vertx.sqlclient.PoolOptions;
 
 import javax.inject.Singleton;
 import java.util.ArrayList;
@@ -20,16 +19,14 @@ public class PgClientFactory {
         this.config = config;
     }
 
-    @Bean
     @Singleton
     public Vertx vertx() {
         return Vertx.vertx();
     }
 
-    @Bean
     @Singleton
     public PgClients pgClients(Vertx vertx) {
-        List<PgClient> clients = new ArrayList<>();
+        List<PgPool> clients = new ArrayList<>();
 
         for (int i = 0; i < Runtime.getRuntime().availableProcessors(); i++) {
             clients.add(pgClient(vertx));
@@ -40,14 +37,15 @@ public class PgClientFactory {
 
 
     private PgPool pgClient(Vertx vertx) {
-        PgPoolOptions options = new PgPoolOptions();
-        options.setDatabase(config.getName());
-        options.setHost(config.getHost());
-        options.setPort(config.getPort());
-        options.setUser(config.getUsername());
-        options.setPassword(config.getPassword());
-        options.setCachePreparedStatements(true);
-        options.setMaxSize(1);
-        return PgClient.pool(vertx, options);
+        PgConnectOptions connectOptions = new PgConnectOptions();
+        connectOptions.setDatabase(config.getName());
+        connectOptions.setHost(config.getHost());
+        connectOptions.setPort(config.getPort());
+        connectOptions.setUser(config.getUsername());
+        connectOptions.setPassword(config.getPassword());
+        connectOptions.setCachePreparedStatements(true);
+        PoolOptions poolOptions = new PoolOptions();
+        poolOptions.setMaxSize(1);
+        return PgPool.pool(vertx, connectOptions, poolOptions);
     }
 }

+ 5 - 5
frameworks/Java/micronaut/src/main/java/benchmark/repository/PgClients.java

@@ -1,19 +1,19 @@
 package benchmark.repository;
 
-import io.reactiverse.pgclient.PgClient;
+import io.vertx.reactivex.pgclient.PgPool;
 
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.stream.Stream;
 
 class PgClients {
-    private final Iterator<PgClient> iterator;
+    private final Iterator<PgPool> iterator;
 
-    PgClients(Collection<PgClient> clients) {
+    PgClients(Collection<PgPool> clients) {
         iterator = Stream.generate(() -> clients).flatMap(Collection::stream).iterator();
     }
 
-    synchronized PgClient getOne() {
+    synchronized PgPool getOne() {
         return iterator.next();
     }
-}
+}

+ 0 - 40
frameworks/Java/micronaut/src/main/java/benchmark/view/MustacheViewRenderer.java

@@ -1,40 +0,0 @@
-package benchmark.view;
-
-
-import com.github.mustachejava.DefaultMustacheFactory;
-import com.github.mustachejava.Mustache;
-import io.micronaut.core.io.ResourceLoader;
-import io.micronaut.core.io.Writable;
-import io.micronaut.core.io.scan.ClassPathResourceLoader;
-import io.micronaut.http.MediaType;
-import io.micronaut.http.annotation.Produces;
-import io.micronaut.views.ViewsRenderer;
-
-import javax.annotation.Nullable;
-import javax.inject.Singleton;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.io.Writer;
-
-@Singleton
-@Produces(MediaType.TEXT_HTML)
-public class MustacheViewRenderer implements ViewsRenderer {
-    protected final ResourceLoader resourceLoader;
-    private final Mustache mustache;
-
-    public MustacheViewRenderer(ClassPathResourceLoader resourceLoader) {
-        this.resourceLoader = resourceLoader;
-        this.mustache = new DefaultMustacheFactory().compile("fortunes.mustache");
-    }
-
-    @Override
-    public Writable render(String viewName, @Nullable Object data) {
-        return out -> mustache.execute(out, data);
-    }
-
-    @Override
-    public boolean exists(String viewName) {
-        return viewName.equals("fortunes");
-    }
-
-}

+ 25 - 0
frameworks/Java/micronaut/src/main/java/benchmark/views/fortunes.rocker.html

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

+ 1 - 1
frameworks/Java/micronaut/src/main/resources/application.yml

@@ -3,4 +3,4 @@ micronaut:
         name: benchmark
     server:
         port: 8080
-        serverHeader: Micronaut
+        serverHeader: Micronaut

+ 0 - 4
frameworks/Java/micronaut/src/main/resources/fortunes.mustache

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