Moins d'un an après la version officielle d'Helidon 1.0, Oracle est bien en route vers une version officielle d'Helidon 2.0 prévue pour la fin du printemps 2020. Helidon 2.0.0-M1, publié début février, et Helidon 2.0.0-M2, publié fin mars, ont fourni à la communauté Java des aperçus de nouvelles fonctionnalités importantes, notamment : la prise en charge de la messagerie et des flux réactifs; un nouvel outil en ligne de commande, une nouvelle API Web Client pour Helidon SE, la prise en charge de GraalVM pour Helidon MP et un nouveau client de base de données réactif.
La prise en charge de GraalVM, introduite avec la sortie d'Helidon 1.0.3, n'était disponible que pour le applications Helidon SE. Les applications Helidon MP n'ont pas pu profiter de GraalVM en raison de l'utilisation de la réflexion au sein de CDI. En tant que l'une des fonctionnalités les plus demandées par la communauté Java, Helidon 2.0.0-M1 a introduit la prise en charge de la conversion des applications Helidon MP en code exécutable natif avec GraalVM. Tomas Langer, membre consultant du personnel technique d'Oracle, a créé cette application de démonstration pour que la communauté Java puisse prévisualiser cette nouvelle fonctionnalité.
Pour compléter les trois API Helidon SE d'origine - Serveur Web, Configuration et Security - une nouvelle API, Client Web, complète l'ensemble pour Helidon SE. Le Web client traite les requêtes et les réponses HTTP liées au endpoint spécifié. Tout comme l'API Web Server, Web Client peut également être configuré via un fichier applications.yaml
:
server:
port: 8080
host: 0.0.0.0
client:
connect-timeout-millis: 2000
read-timeout-millis: 2000
follow-redirects: true
max-redirects: 5
headers:
- name: "Accept"
value: ["application/json","text/plain"]
services:
exclude: ["some.webclient.service.Provider"]
config:
metrics:
- methods: ["PUT", "POST", "DELETE"]
type: COUNTER
name-format: "client.counter.%1$s.%2$s"
Prenons un petit exemple où une instance de l'interface WebClient
est créée et une réponse définie pour renvoyer du texte brut :
WebClient client = WebClient.builder()
.baseUri("http://localhost")
.build();
CompletionStage<String> response = webClient.get()
.path("/endpoint")
.request(String.class);
Pour modifier la réponse afin de renvoyer du JSON, créez simplement une instance de JsonProcessing
et modifiez la définition de la variable response
:
JsonProcessing jsonProcessing = JsonProcessing.create();
CompletionStage<JsonObject> response = webClient.get()
.path("/endpoint")
.register(jsonProcessing.newReader())
.request(JsonObject.class);
Pour relever les défis associés aux applications réactives se connectant aux bases de données JDBC qui, par conception, ne sont pas réactives, Helidon 2.0.0-M1 a introduit le nouveau DB Client qui fournira un accès réactif à la base de données et des requêtes pour les applications Helidon SE. DB Client prend en charge les bases de données relationnelles qui se connectent via JDBC et les pilotes réactifs pour MongoDB. Cette nouvelle API offrira la possibilité de spécifier des connexions à la base de données et d'écrire du code de requête native dans un fichier de configuration de sorte que les modifications liées à la base de données puissent être facilement effectuées sans avoir à recompiler le code :
db:
source: "jdbc"
connection:
url: "jdbc:mysql://127.0.0.1:3306/pokemon?useSSL=false"
username: "user"
password: "password"
poolName: "mysql"
statements:
ping: "DO 0"
select-all-pokemons: "SELECT id, name FROM Pokemons"
La prise en charge des métriques, des health checks et du traçage dans DB Client sera également incluse. L'équipe Helidon a créé cette application de démonstration pour la communauté Java afin de prévisualiser cette nouvelle fonctionnalité.
Introduit dans Helidon 2.0.0-M2, les développeurs peuvent désormais créer, construire et exécuter des applications Helidon via la ligne de commande avec le nouveau CLI d'Helidon. Semblable au rechargement à chaud fourni par Quarkus (quarkus:dev
), une boucle de développement intégrée surveille les fichiers source qui déclenche un redémarrage de l'application lors des modifications du code source. Un téléchargement séparé et l'installation sont requis. Une fois installé, les options de ligne de commande disponibles sont présentées ci-dessous :
La messagerie asynchrone fait partie intégrante des applications de microservices. À cette fin, les implémentations des API autonomes de MicroProfile, Reactive Messaging et Reactive Streams Operators, seront introduites dans la version 2.0. Les deux API seront disponibles pour les applications Helidon SE et Helidon MP. Cependant, seule la Reactive Messaging sera disponible pour Helidon MP. Pour mieux s'aligner sur les API de Helidon SE, une API de messagerie réactive équivalente est prévue dans une prochaine version. Helidon prendra également en charge Kafka pour la messagerie réactive avec des connecteurs supplémentaires prévus dans une prochaine version.
La communauté Java peut s'attendre à des changements de rupture avec la version finale d'Helidon 2.0. Plus particulièrement, la prise en charge de Java 8 a été supprimée et JDK 11 sera la version Java minimale requise pour la création d'applications Helidon. Certains packages Helidon seront également supprimés au profit des packages correspondants trouvés dans java.util
, java.lang
et java.io
. Les détails de toutes les modifications apportées à Helidon 2.0 se trouvent dans le journal des modifications.
Ressources
- Where Helidon Flies par Dmitry Kornilov (5 février 2020)
- Helidon DB Client par Tomáš Kraus (27 février 2020)
- Helidon WebClient par David Král (23 mars 2020)
- Introducing the Helidon CLI par Santiago Pericas-Geertsen (24 mars 2020)
- Reactive Messaging with Helidon 2.0 par Daniel Kec (25 mars 2020)