VT2020-Micronaut-Fiche

=Micronaut=

Présentation
Micronaut est un framework full-stack Java moderne, basé sur la JVM, est développé par les créateurs du framework Grails et sponsorisé par Object Computing, Inc. Micronaut est un framework qui permet de construire des applications de type Microservices,Serverless modulaires avec un support pour Java, Kotlin et le langage Groovy adaptés au JDK et à GraalVM.
 * Il est open source sous licence Apache 2.0
 * La première version de Micronaut (1.0.0) est sortie en 2018

=Objectifs de Micronaut= Micronaut s'inspire des leçons apprises au fil des ans en construisant des applications, des monolithes aux microservices en utilisant les frameworks Spring, Spring Boot et Grails.

Micronaut vise à fournir tous les outils nécessaires pour construire des applications JVM, y compris :
 * Injection de dépendance et inversion de contrôle (IoC)
 * Programmation orientée par aspect (PAO)
 * Défauts raisonnables et autoconfiguration

Mais pas seulement, Micronaut par le travail de ces développeurs a pour objectifs d'éviter les inconvénients de framework comme Spring, Spring Boot et Grails en fournissant pour les applications:
 * Temps de démarrage rapide
 * Réduction de l'empreinte mémoire
 * Utilisation minimale de la réflexion
 * Utilisation minimale des procurations
 * Pas de génération de bytecode au runtime
 * Test unitaire facile

=Spéficité de Micronaut =

Micronaut effectue l'injection de dépendance sans exiger de réflexion. L'injection de dépendance est realisée au moment de la compilation. Micronaut par sa compilation Ahead-Of-Time (AOT) et son injection de dépendance qui se passe de reflexion permet d'avoir des applications avec un temps de démarrage rapide,avec une faible empreinte sur la mémoire contrairement aux framework qui repose sur la reflexion et les proxys au Runtime.

=Fonctionnalités= Micronaut propose des fonctionnalités ,en voici une liste non exhaustive :

Les projets Micronaut peuvent également être générés à l'aide d'un générateur en ligne https://micronaut.io/launch/
 * Configuration distribuée(HashiCorp Consul, AWS Parameter Store etc)
 * Service Discovery (Consul, Eureka, Kubernetes …)
 * Load Balancing(Équilibrage des charges) côté client (Netflix Ribbon )
 * Distributed Tracing : Le traçage distribué permet de déterminer où se produisent les défaillances et ce qui cause les mauvaises performances.
 * Serverless functions : L'approche de Micronaut en termes de son temps de démarrage rapide et sa faible empreinte mémoire à la compilation en font un candidat idéal pour servir de framework au développement de fonctions. En fait, Micronaut offre un support dédié au développement et au déploiement de fonctions pour AWS Lambda et tout système FaaS qui prend en charge l'exécution de fonctions en tant que conteneurs (tels que OpenFaaS, Rift ou Fn)
 * Configuration d'accès des données avec les bases mongoDB, Neo4j, Postgres, Cassandra, Redis…
 * Mécaniques intégrées de retry et circuit breaker : être capable de se remettre d'echec est critique pour les clients HTTP et c'est là que les Retry Advice intégrés à Micronaut interviennent.

=Cas d'utilisations= Avec Micronaut, on peut construire des applications de type : Microservices Serverless Message-Driven : axés sur les messages avec Kafka/Rabbit CLI : interface en ligne de commandes Android

=Micronaut et GraalVM=

Micronaut fonctionne bien avec GraalVM. GraalVM permet de produire des images natives grâce à la compilation Ahead-of-time.Et GraalVM est bien intégrée dans un frameworks tels que Micronaut par le fait que Micronaut dispose d'une compilation AOT ,ce qui fait que le temps démarrage de ses applications sont grandement réduit lorsqu'il utilise GRaalVM.

=Limites=
 * Certaines dépendances ne supportent pas (encore) GraalVM : Le support GraalVM (comme GraalVM lui-même) est toujours en phase d'incubation. Le support des bibliothèques tierces est aléatoire et l'équipe Micronaut est toujours en train de régler tous les problèmes potentiels.Jusqu'à présent, le serveur HTTP, le client HTTP, le support de fonction et le module de découverte de service de Micronaut ont été vérifiés comme fonctionnant sur GraalVM 1.0 RC6 ou supérieur. Le support des autres modules est encore en cours d'évolution.


 * Petite communauté mais qui croit d'année en année.

=Installation=

Avec SDKMAN
Cet outil facilite l'installation de Micronaut sur toute plate-forme basée sur Unix (Mac OSX, Linux, Cygwin, Solaris ou FreeBSD).

Ouvrez un nouveau terminal entrez : $ curl -s https://get.sdkman.io | bash

Suivez les instructions à l'écran pour terminer l'installation.

Ouvrez un nouveau terminal ou tapez la commande : $ source "$HOME/.sdkman/bin/sdkman-init.sh"

Installez ensuite la dernière version stable de Micronaut: $ sdk install micronaut Une fois l'installation finie. Vous pouvez voir la version installé en tapant la commande: $ mn --version

Utilisation : Créer une application en utilisant l'interface de ligne de commande Micronaut.

mn create-app example.micronaut.complete

La commande précédente crée une application micronaut avec le paquet par défaut example.micronaut dans un dossier nommé complete.

Par défaut, create-app crée une application Java Micronaut qui utilise le système de compilation Gradle. Cependant, vous pouvez utiliser d'autres outils de compilation tels que Maven ou d'autres langages de programmation comme Groovy ou Kotlin.

Si vous utilisez Java ou Kotlin et IntelliJ IDEA, assurez-vous que vous avez activé le traitement des annotations. Pour plus d'informations cliquer ici

Utiliser Micronaut avec JHipster
Installer MHipster $ npm install -g generator-jhipster-micronaut

Creer a new folder for your application Lancer MHipster $ mhipster

Si vous avez déjà installé JHipster, vous pouvez utiliser la commande suivante: $ jhipster --blueprints micronaut

MySQL MariaDB PostgreSQL H2
 * Monolith projects
 * Microservice projects
 * JWT or OAuth 2.0 Authentication
 * SQL Database Support
 * Ehcache
 * Caffeine Cache
 * Redis Cache
 * Maven or Gradle Build System
 * Angular or React Client
 * Protractor Tests
 * Heroku Deployment

=Démonstration= Une démonstration de Micronaut est disponible ici

=Bibliographie=
 * https://micronaut.io/
 * https://docs.micronaut.io/1.0.0/guide/index.html
 * https://simply-how.com/quarkus-vs-micronaut
 * https://desosa.nl/projects/micronaut/2020/03/17/from-vision-to-architecture.html#sec-runtime-view
 * https://opentracing.io/docs/overview/what-is-tracing/#:~:text=Distributed%20tracing%2C%20also%20called%20distributed,and%20what%20causes%20poor%20performance.
 * https://objectcomputing.com/case-studies/case-study-from-monolith-to-microservices-with-micronaut
 * https://github.com/jhipster/generator-jhipster-micronaut
 * https://objectcomputing.com/files/8415/4220/9027/18-11-14-Intro-Micronaut-Webinar-slide-deck.pdf
 * https://desosa.nl/projects/micronaut/2020/04/09/microservices-in-detail.html
 * https://www.lavajug.org/2020/03/19/micrograal.html
 * https://michael.codes/posts/micronaut-intro/
 * https://www.baeldung.com/micronaut

=Veille Technologique 2020=
 * Année : VT2020
 * Sujet : Micronaut
 * Slides : Slides
 * Démonstration : []
 * Auteurs : BILOUNGA Aleck