Cela fait donc 3 ans que Devoxx n'a pas organisé de conférence physique et tout a commencé par un incroyable petit-déjeuner et une tasse de café pour nous donner de l'énergie pour les incroyables conférences à venir.

Stephan Janssen a été ravi de nous accueillir à nouveau dans son discours d'ouverture mercredi.

Pour certains d'entre nous travaillant à l'adresse JArchitects , il s'agissait en effet d'un retour bienvenu, mais pour d'autres, c'était peut-être le début d'un pèlerinage annuel à Anvers.

Du moins, si nous pouvons nous retenir d'acheter des billets la prochaine fois. Cette année, le premier lot de 1600 billets a été vendu en 5 minutes, tandis que le deuxième badge restant a été épuisé en quelques secondes.

Depuis la dernière édition, le domaine de l'IA a connu une formidable série de nouveaux développements.

Un exemple concret : le film d'introduction captivant réalisé pour Devoxx est en grande partie du `text to movie` généré par https://youtu.be/g_Y6VqKVjuM.

Alan Thompson, en tant qu'orateur principal, nous a rappelé comment l'IA a évolué depuis l'époque d'Alan Turing jusqu'aux moteurs d'art générés par l'IA, aux livres coécrits par l'IA, aux robots IA et à bien d'autres exemples qui font partie de notre vie quotidienne.

L'un de ces développements récents concerne les outils de codage augmentés par l'IA qui pourraient nous aider, nous les développeurs, à écrire un meilleur code en éliminant la partie ennuyeuse, fastidieuse et sujette aux erreurs de l'écriture du code. Andy Piper de l'équipe Diffblue a expliqué comment ils peuvent aider à générer des tests unitaires grâce à l'IA, ce qui a suscité un certain intérêt parmi les participants, car tous les sièges étaient occupés.

En ce qui concerne les développements de Javas, Venkat, en tant qu'orateur principal, a démontré pourquoi Java est en fait Agile en publiant des cycles de 6 mois, en ajoutant soigneusement des fonctionnalités qui sont productives pour les développeurs tout en restant compatible avec le passé et à l'épreuve du futur.

Il a mis en évidence certaines de ces fonctionnalités, telles que l'hérédoc (multiligne), le filtrage, les enregistrements et les fils virtuels, qui sont désormais suffisamment matures pour quitter leurs salles d'incubation de Project Amber et Loom.

Jose Paumard (Oracle) a plongé plus profondément dans "Clean Code with Records, Sealed Classes and Pattern Matching" tout en nous rappelant de ne pas reporter la mise à niveau vers au moins Java 17 afin de bénéficier de toutes ces dernières et meilleures nouvelles fonctionnalités.

Nous avons également eu un aperçu des fonctionnalités qui sont encore à venir dans les futures versions. Dans un autre exposé, Mario Fusco a réalisé une version intéressante du jeu de la vie à l'adresse Java , dans laquelle il a utilisé et évalué le concept novateur des "fils virtuels" et nous a rappelé que la connaissance du domaine est encore très importante pour obtenir des résultats performants.

Lorsque nous n'étions pas assis dans les sièges confortables du théâtre ou en train de déjeuner juste à côté des portes du théâtre, nous traînions au rez-de-chaussée où il y avait de nombreuses activités à faire pendant les pauses.

Nous pouvons par exemple nous essayer au darting au stand Continuum ou jouer aux pousseurs de pièces et bien d'autres choses encore ! C'est ici que nous pouvons nous mêler à nos pairs, peut-être retrouver un ancien collègue et discuter avec les autres entreprises sur leur stand.


Joel Lord (MongoDB) est un brasseur de bière amateur canadien et a osé expliquer en Belgique comment brasser une bière. Malheureusement, le public n'a pas eu l'occasion de goûter la bière, mais sa solution IOT, qui prend des mesures pendant le processus de brassage, a été appliquée de manière très intelligente et a permis d'utiliser la solution cloud MongoDB à bon escient. Et de toute façon, pour étancher notre soif de bière, pas d'inquiétude : une société de personnes férues de technologie distribuait des bières de fabrication locale tout au long de l'événement à l'étage des sponsors, en bas. Guillaume Laforge (Google) voulait garder un œil sur ses impressions 3D pendant l'impression et n'avait pas envie d'acheter une solution toute faite, il a donc réutilisé son vieux smartphone et a construit une solution de surveillance avec WebRTC à son cœur, avec un pitch des services Google Cloud Run.

Saviez-vous que l'âge moyen d'un développeur est de 28 ans ? Et donc un développeur bien au-delà de cet âge, peut se sentir vieux. Mais Tobias Modig (Citerus) s'est réjoui de cette situation : ils sont peut-être lents, mais la lenteur a du bon ! Construire correctement plutôt que rapidement, avoir un développement durable comme le prescrit le 8e principe du Manifeste Agile sont des éléments clés à respecter. Mais il faut aussi prendre le temps de s'exercer et de lire des livres, comme Tom Cools (Info Support) nous l'a conseillé lors de la conférence "Learning Through Tinkering" : étant donné que "les implémentations techniques se dégradent plus vite que les concepts sur lesquels elles sont basées", il est bon de continuer à bricoler sur ces petits projets pour maintenir à jour sa "boîte à outils" de connaissances techniques.

Uberto Barbini, dans sa présentation "From objects to functions", a pris Kotlin et a introduit des paradigmes fonctionnels connus tels que Functors et Monads, en les appliquant de manière pratique à une application web. À travers des exemples pratiques et un peu de code, Uberto montre comment une API peut atteindre un niveau tel que tout le monde peut la lire.

En intégrant davantage ces idées dans des solutions architecturales modernes telles que l'architecture hexagonale, la programmation fonctionnelle peut être utilisée comme un moyen qui n'est pas trop exotique pour les bases de code existantes, en résolvant les problèmes de la vie réelle d'une manière efficace.

Selon Uberto, lorsqu'elle est correctement réalisée, la base de code résultante présentera les caractéristiques que nous aimons tous et pour lesquelles nous travaillons, comme un code facile à tester, TDD, cohérent, DRY et une journalisation significative.

Les développeurs sont souvent chargés d'introduire de nouvelles fonctionnalités dans des bases de code existantes. L'une des demandes est souvent d'aller sur cloudnative afin d'avoir un avantage concurrentiel sur les marques concurrentes. Lorsqu'on transfère une ancienne application monolithique vers le cloud, de nombreux problèmes se posent en termes de coûts et de délais. En outre, il arrive que l'application existante ne puisse pas être modifiée ou que les nouvelles fonctionnalités dépendent des données des systèmes existants.

Lorsqu'ils sont confrontés à de tels problèmes, les ingénieurs logiciels tombent souvent dans le piège des anti-modèles. Ces anti-modèles n'introduisent pas seulement une complexité supplémentaire en cours de route, mais introduisent potentiellement une corruption dans les données existantes ou les données transformées. Karina Varela (Red Hat) présente une approche architecturale pour résoudre ce problème.
Karina construit une nouvelle application dans le cloud avec une idéologie moderne, en suivant tout ce que les développeurs apprécient dans les microservices. Pour résoudre la dépendance à l'égard des systèmes ou des données existants, elle utilise des logiciels open source, à savoir Debezium et un bus de messagerie comme Kafka, dans l'architecture existante. Debezium peut lire les actions effectuées sur une base de données. Ensuite, Debezium publie les événements sur le bus de messagerie. Cela permet à la nouvelle application de microservice de mettre à jour ses propres données en conséquence, en fonction des événements.

Josh Long (Vmware) s'est associé à James Ward (Google) pour faire une démonstration de codage en direct dans "Spring + Kotlin = Moderne + Réactif + Productif". Dans 'The state of OpenTelemetry for Java Developers', Philip Krenn (Elastic) a expliqué comment les agents spécifiques aux langages et aux frameworks parviennent à obtenir des données de traçage et de métrique et comment OpenTelemetry aide à fournir une unification neutre de l'instrumentation. Brian Clozel (Vmware) et Stéphane Nicoll (Vmware) ont présenté Spring Framework 6.0 que nous couvrirons brièvement ici :

Observabilité
L'observabilité est une caractéristique majeure de la nouvelle version. L'observabilité comprend des outils de journalisation, de métriques, de traces, de collecte de données et de visualisation.

Dans le passé, le code Spring et certaines bibliothèques étaient instrumentés pour l'observabilité en utilisant java agents au niveau du bytecode, en utilisant des points d'extension publics et une instrumentation directe dans la bibliothèque.

Mais au fil des ans, ils ont découvert de nombreux problèmes avec cette approche. Avec cette nouvelle version majeure, ils utiliseront donc Micrometer 1.10. Dès à présent, les serveurs et les clients web sont instrumentés sans avoir à utiliser Spring Cloud Sleuth pour pouvoir disposer de mesures telles que les taux d'erreur pour des API spécifiques. Vous pouvez également avoir des journaux corrélés avec l'ID de corrélation réel couvrant différents services. En plus de cela, vous avez les traces réelles visualisant un client envoyant à un serveur qui à son tour envoie à autre chose et ainsi de suite.

AOT et GraalVM Native
En 2019, Spring a commencé à travailler sur un projet d'incubation appelé Spring Native fournissant un support pour la compilation des applications Spring en exécutables natifs à l'aide de GraalVM. Au fil des années, GraalVM a beaucoup évolué et s'est amélioré et grâce à cela, le support natif passe à la disponibilité générale au sein de Spring Framework 6 et Spring Boot 3. C'est pourquoi ils sont sur le point de retirer officiellement les projets Spring Native.

Java interface Clients
Le framework Spring a une classe appelée RestTemplate et ils ont ajouté plus tard un WebClient comme une alternative non-bloquante à RestTemplate. En utilisant ces deux classes, vous disposez de quelques utilitaires pour effectuer des requêtes HTTP. Cependant, cela nécessite encore un peu de "boilerplate". Dans la capture d'écran ci-dessous, vous verrez un exemple d'un flux très heureux sans gestion des erreurs.

Avec Spring framework 6, vous pouvez désormais utiliser les interfaces HTTP. Il vous suffit de créer une interface et d'ajouter un contrat déclaré avec l'annotation @GetExchange pour effectuer une requête GET.

Après avoir fait cela, nous devons créer un client HTTP réel pour utiliser nos contrats définis dans l'interface :

Comme vous pouvez le constater, nous n'avons mis en avant dans ce blog que quelques-unes des nombreuses conférences qui ont eu lieu à Devoxx, heureusement toutes sont enregistrées et publiées sur Youtube : https://www.youtube.com/c/Devoxx2015.

Nous vous conseillons donc vivement de regarder certains d'entre eux pour vous imprégner de l'ambiance et des connaissances de Devoxx. Espérons que nous pourrons nous rencontrer l'année prochaine lors de la 20e édition de Devoxx 2023 !