Browse Source

- Upgrade helidon to 1.4.0 (#5293)

- Remove usage of deprecated classes and features
jringuette 5 years ago
parent
commit
57c558b30d

+ 2 - 2
frameworks/Java/helidon/README.md

@@ -31,8 +31,8 @@ There is currently one repository implementation.
 
 
 ## Versions
 ## Versions
 
 
-* [Java OpenJDK 1.8](http://openjdk.java.net/)
-* [Helidon 1.0.0](http://helidon.io/)
+* [Java OpenJDK 11](http://openjdk.java.net/)
+* [Helidon 1.4.0](http://helidon.io/)
 
 
 ## Test URLs
 ## Test URLs
 
 

+ 1 - 1
frameworks/Java/helidon/pom.xml

@@ -26,7 +26,7 @@
     <name>${project.artifactId}</name>
     <name>${project.artifactId}</name>
 
 
     <properties>
     <properties>
-        <helidon.version>1.1.2</helidon.version>
+        <helidon.version>1.4.0</helidon.version>
         <!-- Default package. Will be overriden by Maven archetype -->
         <!-- Default package. Will be overriden by Maven archetype -->
         <package>io.helidon.examples.quickstart.se</package>
         <package>io.helidon.examples.quickstart.se</package>
         <mainClass>io.helidon.benchmark.Main</mainClass>
         <mainClass>io.helidon.benchmark.Main</mainClass>

+ 30 - 54
frameworks/Java/helidon/src/main/java/io/helidon/benchmark/services/DbService.java

@@ -1,11 +1,22 @@
 package io.helidon.benchmark.services;
 package io.helidon.benchmark.services;
 
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.ThreadLocalRandom;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonBuilderFactory;
+import javax.json.JsonObject;
+import javax.json.JsonWriterFactory;
+
 import io.helidon.benchmark.models.DbRepository;
 import io.helidon.benchmark.models.DbRepository;
 import io.helidon.benchmark.models.World;
 import io.helidon.benchmark.models.World;
-import io.helidon.common.http.DataChunk;
-import io.helidon.common.http.MediaType;
 import io.helidon.common.http.Parameters;
 import io.helidon.common.http.Parameters;
-import io.helidon.common.reactive.ReactiveStreamsAdapter;
+import io.helidon.media.jsonp.server.JsonSupport;
 import io.helidon.webserver.Routing;
 import io.helidon.webserver.Routing;
 import io.helidon.webserver.ServerRequest;
 import io.helidon.webserver.ServerRequest;
 import io.helidon.webserver.ServerResponse;
 import io.helidon.webserver.ServerResponse;
@@ -13,36 +24,24 @@ import io.helidon.webserver.Service;
 import io.reactivex.Flowable;
 import io.reactivex.Flowable;
 import io.reactivex.Single;
 import io.reactivex.Single;
 
 
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonBuilderFactory;
-import javax.json.JsonObject;
-import javax.json.JsonStructure;
-import javax.json.JsonWriter;
-import javax.json.JsonWriterFactory;
-import java.io.ByteArrayOutputStream;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.ThreadLocalRandom;
-
 public class DbService implements Service {
 public class DbService implements Service {
 
 
-    private static final JsonBuilderFactory JSON = Json.createBuilderFactory(Collections.emptyMap());
-
     private final DbRepository repository;
     private final DbRepository repository;
     private JsonWriterFactory jsonWriterFactory;
     private JsonWriterFactory jsonWriterFactory;
+    private JsonBuilderFactory jsonBuilderFactory;
 
 
     public DbService(DbRepository repository) {
     public DbService(DbRepository repository) {
         this.repository = repository;
         this.repository = repository;
 
 
         this.jsonWriterFactory = Json.createWriterFactory(null);
         this.jsonWriterFactory = Json.createWriterFactory(null);
+        this.jsonBuilderFactory = Json.createBuilderFactory(Collections.emptyMap());
     }
     }
 
 
     @Override
     @Override
     public void update(Routing.Rules rules) {
     public void update(Routing.Rules rules) {
+        rules.register("/db", JsonSupport.create());
+        rules.register("/queries", JsonSupport.create());
+        rules.register("/updates", JsonSupport.create());
         rules.get("/db", this::db);
         rules.get("/db", this::db);
         rules.get("/queries", this::queries);
         rules.get("/queries", this::queries);
         rules.get("/updates", this::updates);
         rules.get("/updates", this::updates);
@@ -50,11 +49,9 @@ public class DbService implements Service {
 
 
     private void db(final ServerRequest request,
     private void db(final ServerRequest request,
                           final ServerResponse response) {
                           final ServerResponse response) {
-        Single<DataChunk> result = repository.getWorld(randomWorldNumber())
+        repository.getWorld(randomWorldNumber())
                 .map(World::toJson)
                 .map(World::toJson)
-                .map(this::getChunk);
-
-        send(response, result);
+                .subscribe(jsonObject -> response.send(jsonObject));
     }
     }
 
 
     private void queries(final ServerRequest request,
     private void queries(final ServerRequest request,
@@ -62,57 +59,36 @@ public class DbService implements Service {
         Flowable<JsonObject>[] worlds = new Flowable[parseQueryCount(request.queryParams())];
         Flowable<JsonObject>[] worlds = new Flowable[parseQueryCount(request.queryParams())];
         Arrays.setAll(worlds, i -> repository.getWorld(randomWorldNumber()).map(World::toJson).toFlowable());
         Arrays.setAll(worlds, i -> repository.getWorld(randomWorldNumber()).map(World::toJson).toFlowable());
 
 
-        Single<DataChunk> result = marshall(worlds);
-
-        send(response, result);
+        marshall(worlds).subscribe(jsonObject -> response.send(jsonObject));
     }
     }
 
 
     private void updates(final ServerRequest request,
     private void updates(final ServerRequest request,
                          final ServerResponse response) {
                          final ServerResponse response) {
         Flowable<JsonObject>[] worlds = new Flowable[parseQueryCount(request.queryParams())];
         Flowable<JsonObject>[] worlds = new Flowable[parseQueryCount(request.queryParams())];
 
 
-        Arrays.setAll(worlds, i -> {
-            return repository.getWorld(randomWorldNumber()).flatMapPublisher(world -> {
-                world.randomNumber = randomWorldNumber();
-                return repository.updateWorld(world).map(World::toJson).toFlowable();
-            });
-        });
+        Arrays.setAll(worlds, i -> repository.getWorld(randomWorldNumber()).flatMapPublisher(world -> {
+            world.randomNumber = randomWorldNumber();
+            return repository.updateWorld(world).map(World::toJson).toFlowable();
+        }));
 
 
-        Single<DataChunk> result = marshall(worlds);
-
-        send(response, result);
+        marshall(worlds).subscribe(jsonObject -> response.send(jsonObject));
     }
     }
 
 
-    private Single<DataChunk> marshall(Flowable<JsonObject>[] worlds) {
+    private Single<JsonArray> marshall(Flowable<JsonObject>[] worlds) {
         return Flowable.mergeArray(worlds)
         return Flowable.mergeArray(worlds)
                 .toList()
                 .toList()
                 .map(this::buildArray)
                 .map(this::buildArray)
-                .map(this::getChunk)
                 .doOnError(Throwable::printStackTrace);
                 .doOnError(Throwable::printStackTrace);
     }
     }
 
 
     private JsonArray buildArray(List<JsonObject> jsonObjects) {
     private JsonArray buildArray(List<JsonObject> jsonObjects) {
         return jsonObjects.stream().reduce(
         return jsonObjects.stream().reduce(
-                JSON.createArrayBuilder(),
+                jsonBuilderFactory.createArrayBuilder(),
                 JsonArrayBuilder::add,
                 JsonArrayBuilder::add,
                 JsonArrayBuilder::addAll)
                 JsonArrayBuilder::addAll)
                 .build();
                 .build();
     }
     }
 
 
-    private void send(final ServerResponse response, Single<DataChunk> result) {
-        response.headers().contentType(MediaType.APPLICATION_JSON);
-        response.send(ReactiveStreamsAdapter.publisherToFlow(result.toFlowable()));
-    }
-
-    private DataChunk getChunk(JsonStructure jsonStructure) {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        JsonWriter writer = jsonWriterFactory.createWriter(baos);
-        writer.write(jsonStructure);
-        writer.close();
-
-        return DataChunk.create(baos.toByteArray());
-    }
-
     private int randomWorldNumber() {
     private int randomWorldNumber() {
         return 1 + ThreadLocalRandom.current().nextInt(10000);
         return 1 + ThreadLocalRandom.current().nextInt(10000);
     }
     }
@@ -120,7 +96,7 @@ public class DbService implements Service {
     private int parseQueryCount(Parameters parameters) {
     private int parseQueryCount(Parameters parameters) {
         Optional<String> textValue = parameters.first("queries");
         Optional<String> textValue = parameters.first("queries");
 
 
-        if (!textValue.isPresent()) {
+        if (textValue.isEmpty()) {
             return 1;
             return 1;
         }
         }
         int parsedValue;
         int parsedValue;

+ 18 - 33
frameworks/Java/helidon/src/main/java/io/helidon/benchmark/services/FortuneService.java

@@ -1,25 +1,21 @@
 package io.helidon.benchmark.services;
 package io.helidon.benchmark.services;
 
 
+import static java.util.Comparator.comparing;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStreamWriter;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+
 import com.github.mustachejava.Mustache;
 import com.github.mustachejava.Mustache;
+
 import io.helidon.benchmark.models.DbRepository;
 import io.helidon.benchmark.models.DbRepository;
 import io.helidon.benchmark.models.Fortune;
 import io.helidon.benchmark.models.Fortune;
-import io.helidon.common.http.DataChunk;
 import io.helidon.common.http.MediaType;
 import io.helidon.common.http.MediaType;
-import io.helidon.common.reactive.ReactiveStreamsAdapter;
 import io.helidon.webserver.Routing;
 import io.helidon.webserver.Routing;
 import io.helidon.webserver.ServerRequest;
 import io.helidon.webserver.ServerRequest;
 import io.helidon.webserver.ServerResponse;
 import io.helidon.webserver.ServerResponse;
 import io.helidon.webserver.Service;
 import io.helidon.webserver.Service;
-import io.reactivex.Single;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.List;
-
-import static java.util.Comparator.comparing;
 
 
 public class FortuneService implements Service {
 public class FortuneService implements Service {
 
 
@@ -36,31 +32,20 @@ public class FortuneService implements Service {
         rules.get("/fortunes", this::fortunes);
         rules.get("/fortunes", this::fortunes);
     }
     }
 
 
-    private void fortunes(ServerRequest request,
-                          ServerResponse response) {
-        Single<DataChunk> result = repository.getFortunes()
-                .map(fortunes -> {
+    private void fortunes(ServerRequest request, ServerResponse response) {
+        repository.getFortunes()
+                .subscribe(fortunes -> {
                     fortunes.add(new Fortune(0, "Additional fortune added at request time."));
                     fortunes.add(new Fortune(0, "Additional fortune added at request time."));
                     fortunes.sort(comparing(fortune -> fortune.message));
                     fortunes.sort(comparing(fortune -> fortune.message));
-                    return fortunes;
-                })
-            .map(this::getChunk);
 
 
-        send(response, result);
-    }
-
-    private DataChunk getChunk(List<Fortune> fortunes) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        OutputStreamWriter writer = new OutputStreamWriter(baos, StandardCharsets.UTF_8.name());
+                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                    OutputStreamWriter writer = new OutputStreamWriter(baos, StandardCharsets.UTF_8.name());
 
 
-        template.execute(writer, Collections.singletonMap("fortunes", fortunes));
-        writer.flush();
-
-        return DataChunk.create(baos.toByteArray());
-    }
+                    template.execute(writer, Collections.singletonMap("fortunes", fortunes));
+                    writer.flush();
 
 
-    private void send(final ServerResponse response, Single<DataChunk> result) {
-        response.headers().contentType(MediaType.TEXT_HTML.withCharset(StandardCharsets.UTF_8.name()));
-        response.send(ReactiveStreamsAdapter.publisherToFlow(result.toFlowable()));
+                    response.headers().contentType(MediaType.TEXT_HTML.withCharset(StandardCharsets.UTF_8.name()));
+                    response.send(baos.toByteArray());
+                });
     }
     }
 }
 }

+ 11 - 6
frameworks/Java/helidon/src/main/java/io/helidon/benchmark/services/JsonService.java

@@ -1,21 +1,26 @@
 package io.helidon.benchmark.services;
 package io.helidon.benchmark.services;
 
 
-import io.helidon.media.jsonp.server.JsonSupport;
-import io.helidon.webserver.Routing;
-import io.helidon.webserver.Service;
+import java.util.Collections;
 
 
 import javax.json.Json;
 import javax.json.Json;
 import javax.json.JsonBuilderFactory;
 import javax.json.JsonBuilderFactory;
-import java.util.Collections;
+
+import io.helidon.media.jsonp.server.JsonSupport;
+import io.helidon.webserver.Routing;
+import io.helidon.webserver.Service;
 
 
 public class JsonService implements Service {
 public class JsonService implements Service {
 
 
-    private static final JsonBuilderFactory JSON = Json.createBuilderFactory(Collections.emptyMap());
+    private JsonBuilderFactory jsonBuilderFactory;
+
+     public JsonService() {
+         this.jsonBuilderFactory = Json.createBuilderFactory(Collections.emptyMap());
+     }
 
 
     @Override
     @Override
     public void update(Routing.Rules rules) {
     public void update(Routing.Rules rules) {
         rules.register("/json", JsonSupport.create());
         rules.register("/json", JsonSupport.create());
         rules.get("/json",
         rules.get("/json",
-                (req, res) -> res.send(JSON.createObjectBuilder(Collections.singletonMap("message", "Hello, World!")).build()));
+                (req, res) -> res.send(jsonBuilderFactory.createObjectBuilder(Collections.singletonMap("message", "Hello, World!")).build()));
     }
     }
 }
 }