Compiler en natif Jooby avec GraalVM.
Je me note la commande :
native-image -H:+ReportExceptionStackTraces -H:+TraceClassInitialization --no-fallback --allow-incomplete-classpath --initialize-at-build-time=io.jooby --initialize-at-build-time=org.slf4j --initialize-at-build-time=ch.qos.logback -jar someJarWithAMainClass.jar
Edit : comme la commande ne marche pas bien, voici un tuto qui montre la démarche à adopter avec Javalin.
Edit 2 : GraalVM est en mesure d'identifier les classes à charger au Runtime à partir d'un agent de la JVM. Ce tuto qui montre l'exemple est fait pour Quarkus mais devrait s'adapter à d'autres serveurs.
Cela fait pas mal d'années que je cherche un serveur web à embarquer dans mes applications à destination d'une JRE (Java Runtime Environment) et qui soit :
- Léger, quelques Ko maximum.
- Rapide à démarrer, quelques millisecondes maximum.
- Perfomant, qui encaisse une charge de plusieurs dizaines de milliers de requêtes par secondes sur mon core I5.
- Asynchrone, pour tirer partie du multithread.
- Compilable nativement, via Kotlin Native ou GraalVM.
- Ayant une syntaxe avec et surtout sans annotations, car la réflexion du code rend compliqué la compilation native.
- Libre, gratuit et interropérable.
- Présent dans le répo Maven Central.
- Modulaire, si j'ai besoin du routing alors je ne veux embarquer que les jars dédiés au routing.
Jooby répond à toutes ces conditions. Donc après avoir utilisé Glassfish (outch), Tomcat, Websphere (hur), Jonas (damned), Weblogic (hur again), Jetty, Sparkjava, Undertow, Javalin, Rapidoid et dernièrement Netty, je pense que je vais migrer vers Jooby qui en plus a de meilleures performances que les autres (d'un facteur 2 par rapport à son meilleur challenger, il est même au niveau des serveurs à destination du C++).