Nous sommes en 2020, Java est l’un des langages les plus utilisés pour développer des applications. Et surtout, il y a Quarkus.

Nous vous proposons de vous partager notre point de vue et de vous faire découvrir ce framework.

Prêt pour un voyage ?

Quarkus logo

Un peu d’histoire

Pourquoi Lunatech s’intéresse à Quarkus ? Car on retrouve l’esprit de Play Framework 1. Un autre framework créé par Guillaume Bort (Criteo Labs) il y a 10 ans. Et il y a 10 ans, croyez-nous, être productif avec Java pour faire du Web… c’était compliqué. Nous étions face à un très belle effort de la part d’une partie de la communauté pour rendre tout systématiquement compliqué. Et un jour, Play Framework montre une autre vision. Nicolas Leroux (actuel CEO de Lunatech) était l’un des contributeurs sur Play Framework 1. Et il a co-écrit un livre sur Play2 Java quelques années plus tard. Quant à moi (l’autre Nicolas) j’étais passionné par Play 1. A cette époque je faisais la tournée des JUGs. Plus de 30 présentations au final. C’est d’ailleurs à cette occasion que j’ai rencontré Nicolas Leroux.

Alors Quarkus. En quelques mots : c’est un cadre logiciel Java orienté pour la production rapide d’applications Java et d’applications natives. Car l’une des caractéristiques, c’est l’intégration avec GraalVM. Une fois votre développement terminé, vous pouvez packager une application native. Plus besoin de JVM. Cela permet d’avoir une application qui démarre de façon instantané.

A quoi cela peut-il servir ? Quarkus a été pensé dès le départ pour l’hébergement dans le Cloud. Vous gagnez en taille mémoire, ce qui réduit les coûts. Et votre application démarre en un clin d’oeil : vous pouvez par exemple regarder du côté des architectures dîtes “sans serveur” (Serverless).

Pour avoir aussi discuté avec Stéphane Epardaud (Red Hat) et Emmanuel Bernard (Red Hat) : il est clair que l’expérience utilisateur/du développeur est très importante. Il est important d’être productif, d’aller vite et de permettre aussi de créer plusieurs services, et pas un seul. C’est pourquoi on retrouve les bonnes idées de Play comme le retour des erreurs dans le navigateur ou le rechargement à chaud.

Ce qui frappe dès les premières minutes avec Quarkus, c’est la vitesse de compilation. Ceci permet de changer quelques lignes, et de recharger instantanément la page dans le navigateur. C’est simple : j’ai ré-activé “Live Reload” sur Chrome, qui m’évite de devoir rafraîchir la page du navigateur.

Par rapport à Play2 basé sur SBT et Scala, Quarkus est beaucoup plus rapide. Certes on va perdre la vérification à la compilation avec les types, mais par contre on va gagner en boucle de retour (les anglais disent “feedback loop”). Play2 reste meilleur sur le côté “je vérifie tous les types à la compilation” car il est basé sur Scala. Mais au prix d’un temps de compilation 10 fois plus lent (et je suis gentil, heureux propriétaire d’un core i9 avec une pomme dessus)

Côté templating, pas de Twirl comme Play2 mais un nouveau projet simple appelé Qute. C’est très facile à apprendre, cela permet de rapidement construire une petite application Web. Il est possible de faire des templates et de refaire les “taglet”.

Qute étant un projet jeune, il me manque pour l’instant l’équivalent des Forms de Play2. Mais bon, ne soyons pas trop pressé, tout ceci n’existait pas il y a quelques mois.

Montrez moi des projets de la vraie vie

Si vous voulez “lire” du code Quarkus, nous avons créé 2 projets pour Lunatech, dans le but d’évaluer le framework, sur l’écriture d’applications web :

  • Hotel Quarkus demo est un projet avec une API REST simple et un front-end Vue.JS
  • Time Keeper est un futur projet en interne, dans l’esprit des petites applications CRUD que l’on voit souvent.

Ces projets sont partagés pour vous montrer nos essais et nous publierons souvent des mises à jour.

Comment évaluer le framework ?

Nous avons listé plusieurs cas d’usage typique basé sur notre expérience. L’objectif est de voir justement comment nous pourrions répondre aux demandes de nos clients sur des projets à venir.

Voici quelques points que nous allons évaluer dans les semaines qui viennent :

  • le moteur de template, la possibilité d’inclure des tags pour construire un site web
  • le chargement par page à partir d’une base de données et l’affichage avec la pagination des éléments
  • la gestion des erreurs HTTP (404, 400)
  • la génération et l’envoi d’emails via une API / via SMTP
  • l’authentification simple et la gestion des droits par méthode de controller
  • Open ID Connect pour l’intégration par exemple avec Keycloack
  • la génération de PDF
  • JSON et serialisation

Nous aurons une approche basée sur notre expérience de développements d’applications Webs, accumulées depuis plus de 10 ans. Lunatech a par exemple construit un service Web de publications de données avec une API GraphQL pour un gros parc d’attraction en région parisienne.

Pourquoi Quarkus est rapide ?

Et peut-être d’abord… pourquoi cela devient-il intéressant ? Pour 2 raisons : vous allez avoir envie de passer votre journée sur ce framework. Puis vous allez être agréablement surpris par la facilité à tester “pour de vrai” votre application.

Souvenez-vous de ce que nous disions il y a quelques minutes : l’application démarre très vite. Cela permet alors d’écrire des tests d’intégration, et de les faire tourner sur une vraie instance de votre application. Des tests unitaires sur votre application. Le tout fonctionne avec Docker, qui sera chargé de monter votre base de données. Ajoutez un peu de Flyway par exemple (et/ou d’Hibernate ORM) et vous n’aurez pas à gérer (trop) votre schéma pour le mode développement.

Quarkus est super-sonique. Son temps de démarrage est presque instantané. Et c’est encore mieux avec la version native, où vous lancerez un binaire, qui se connectera sur votre base, pourra créer le schéma, et monter des données. Le tout en 85ms comme montré par Emmanuel durant sa présentation à Devoxx Belgique.

Quarkus démarre rapidement, car une partie du travail habituel, est déporté de l’exécution vers la compilation. Les frameworks en général doivent lire de la configuration, résoudre des Proxy Java, parcourir le classpath (surtout en raison des annotations), résoudre des dépendances, faire de l’injection, utiliser la réflexion pour introspecter les classes… Tout ceci coûte du temps au démarrage de l’application. Dans l’idée de cibler le Cloud, Quarkus va donc tisser les liens et s’attaquer à regrouper et à brancher une grosse partie de votre application.

Quarkus is a framework to start other frameworks at build time.

Emmanuel Bernard, 6th november 2019, Devoxx Belgium

Ce travail n’est fait qu’une seule fois : lors de la compilation. Que votre petit service soit ensuite démarré une fois ou 1000 fois : le gain est définitif. Moins de temps de démarrage mais aussi moins de mémoire nécessaire au démarrage. Bye bye le parser XML pour regarder le fichier persistence.xml par exemple…

Cela demande donc un travail important du côté de Quarkus, qui doit analyser ce que font en général les frameworks, pour les accélérer. On peut dire que Quarkus est un accélérateur de particules (wooo celle-là elle est de moi)

La conclusion est intéressante. En allant vers plus de simplicité, et en supprimant le code inutile : nous obtenons un gain de productivité immédiat. Les tonnes de framework Java attendaient une nouvelle vision, c’est ce que Quarkus va vous offrir. Franchement bravo à Emmanuel et aux autres talents qui travaillent sur ce projet.

A suivre…

Crédit photo : https://www.pexels.com/photo/blue-and-purple-cosmic-sky-956999/ et Devoxx Belgium 2019