
Introduction
Le 7 mars, la sociĂ©tĂ© RedHat (bientĂŽt IBM) un nouveau framework â . Selon les dĂ©veloppeurs, ce framework est basĂ© sur GraalVM et OpenJDK HotSpot et est conçu pour Kubernetes. La stack Quarkus comprend : JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus et d'autres.
L'objectif de sa création est de faire de Java la plateforme leader pour le déploiement sur Kubernetes et le développement d'applications sans serveur, en fournissant aux développeurs une approche unifiée pour le développement à la fois réactif et impératif.
Si l'on regarde la classification des frameworks, Quarkus se situe quelque part entre « Agrégateurs/Générateurs de code » et « Frameworks full-stack de haut niveau ». C'est déjà plus qu'un agrégateur, mais cela ne frÎle pas encore le full-stack, car il est taillé pour le développement backend.
Une trÚs haute vitesse de démarrage de l'application et une faible consommation de mémoire sont promises. Voici les données du site des développeurs :
Temps entre le démarrage et la premiÚre réponse (s) :
Configuration
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Stack Cloud Native Traditionnel*
4.3
9.5
Consommation mémoire (Mo) :
Configuration
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Stack Cloud Native Traditionnel*
140
218
Impressionnant, n'est-ce pas ?
*Je n'ai pas trouvé d'informations sur ce stack technologique, on peut supposer qu'il s'agit de Spring Boot avec un peu plus de compléments..
Hello World!
La plus simple des applications écrites en Quarkus ressemblera à cela :
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}C'est littéralement une seule classe et c'est suffisant ! Vous pouvez lancer l'application avec Maven en mode développement :
mvn compile quarkus:dev
âŠ
$ curl http://localhost:8080/hello
helloLa diffĂ©rence avec une application habituelle â il n'y a pas de classe Application ! Quarkus prend en charge le hot reload, ce qui permet de modifier l'application sans la redĂ©marrer, rendant ainsi le dĂ©veloppement encore plus rapide.
Et ensuite ? Vous pouvez ajouter un service au contrĂŽleur avec l'annotation . Le code du service :
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}ContrĂŽleur :
@Path("/hello")
public class GreetingResource {
@Inject
GreetingService service;
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/{name}")
public String greeting(@PathParam("name") String name) {
return service.greeting(name);
}
}$ curl http://localhost:8080/hello/developer
Hello developer!Notez que dans Quarkus, les annotations standards des frameworks familiers â CDI et JAX-RS â sont utilisĂ©es. Rien de nouveau Ă apprendre si vous avez dĂ©jĂ travaillĂ© avec CDI et JAX-RS, bien sĂ»r.
Travailler avec une base de données
Hibernate et les annotations JPA standard sont utilisés pour les entités. Comme pour les contrÎleurs REST, il est nécessaire d'écrire un minimum de code. Il suffit de spécifier les dépendances dans le fichier de build et de disposer les annotations. @Entity et de configurer le datasource dans application.properties.
C'est tout. Aucun sessionFactory, persistence.xml ou autre fichier de service. Nous écrivons uniquement le code nécessaire. Cependant, si nécessaire, il est possible de créer un fichier persistence.xml et de configurer plus finement la couche ORM.
Quarkus prend en charge la mise en cache des entitĂ©s, des collections pour les relations un-Ă -plusieurs, ainsi que des requĂȘtes. Ă premiĂšre vue, cela semble formidable, mais c'est le cache local, pour un seul nĆud Kubernetes. C'est-Ă -dire que les caches entre diffĂ©rents nĆuds ne sont pas synchronisĂ©s. J'espĂšre que c'est temporaire.
Exécution asynchrone du code
Comme mentionnĂ© prĂ©cĂ©demment, Quarkus prend Ă©galement en charge le style de programmation rĂ©actif. Le code de l'application prĂ©cĂ©dente peut ĂȘtre Ă©crit d'une autre maniĂšre.
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/{name}")
public CompletionStage greeting(@PathParam("name") String name) {
return CompletableFuture.supplyAsync(() -> {
return "Hello " + name + "!";
});
}
}Le code asynchrone peut Ă©galement ĂȘtre transfĂ©rĂ© dans un service, le rĂ©sultat sera le mĂȘme.
Test
Les tests pour les applications Quarkus peuvent ĂȘtre Ă©crits avec JUnit4 ou JUnit5. Ci-dessous un exemple de test pour un endpoint, Ă©crit Ă l'aide de RestAssured, mais il est Ă©galement possible d'utiliser un autre cadre :
@QuarkusTest
public class GreetingResourceTest {
@Test
public void testGreetingEndpoint() {
String uuid = UUID.randomUUID().toString();
given()
.pathParam("name", uuid)
.when().get("/hello/{name}")
.then()
.statusCode(200)
.body(is("Hello " + uuid + "!"));
}
}L'annotation @QuarkusTest exige que l'application soit lancée avant d'exécuter les tests. Pour le reste, c'est du code familier à tous les développeurs.
Application dépendante de la plateforme
Comme Quarkus est étroitement intégré à GraalVM, il est bien sûr possible de générer du code dépendant de la plateforme. Pour cela, il faut installer GraalVM et indiquer la variable d'environnement GRAALVM_HOME. Ensuite, et le spécifier lors de la construction de l'application :
mvn package -PnativeCe qui est intĂ©ressant, c'est que l'application gĂ©nĂ©rĂ©e peut ĂȘtre testĂ©e. Et c'est important, car l'exĂ©cution du code « natif » peut diffĂ©rer de l'exĂ©cution sur la JVM. L'annotation @SubstrateTest exĂ©cute le code de l'application dĂ©pendant de la plateforme. La rĂ©utilisation du code de test existant peut se faire par hĂ©ritage, et le code pour tester une application dĂ©pendante de la plateforme ressemblera Ă ceci :
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}L'image gĂ©nĂ©rĂ©e peut ĂȘtre empaquetĂ©e dans Docker et exĂ©cutĂ©e dans Kubernetes ou OpenShift, comme dĂ©crit en dĂ©tail dans .
Outils
Le framework Quarkus peut ĂȘtre utilisĂ© avec Maven et Gradle. Maven est entiĂšrement pris en charge, contrairement Ă Gradle. Malheureusement, Ă l'heure actuelle, Gradle ne prend pas en charge la gĂ©nĂ©ration de projet vide, des dĂ©tails sont disponibles sur le site. .
Extensions
Quarkus est un framework extensible. Actuellement, il existe environ , qui ajoutent diverses fonctionnalitĂ©s â du support de et Ă la journalisation et Ă la publication de mĂ©triques pour les services en cours d'exĂ©cution. Une extension existe dĂ©jĂ pour le support du dĂ©veloppement d'applications en Kotlin, en plus de Java.
Conclusion
Ă mon avis, Quarkus est tout Ă fait dans l'air du temps. Le dĂ©veloppement du code backend devient de plus en plus simple, et ce framework facilite encore plus et accĂ©lĂšre le dĂ©veloppement des services, ajoutant un support « natif » pour Docker et Kubernetes. Un grand avantage â le support intĂ©grĂ© de GraalVM et la gĂ©nĂ©ration d'images dĂ©pendantes de la plateforme, ce qui permet de crĂ©er des services Ă rĂ©ellement dĂ©marrage rapide et occupant peu d'espace en mĂ©moire. Cela est trĂšs important Ă notre Ă©poque oĂč les microservices et l'architecture serverless sont en plein essor.
Site officiel â . Des exemples de projets pour un dĂ©marrage rapide sont dĂ©jĂ disponibles sur .
Source : habr.com
