Cet épisode nouvelles discute d’améliorations dans le JDK, d’Hibernate 6, de Service Weaver, de la fin d’options dans DockerHub pour certains projets open source, de Gradle, de cURL et pleins d’autres choses encore.

Enregistré le 17 mars 2023

Téléchargement de l’épisode LesCastCodeurs-Episode-292.mp3

News

Langages

Quelle version de JDK utiliser en fonction des fonctionnalités que l’on souhaite utiliser, mais aussi du long time support ? https://whichjdk.com/

JetBrains propose une formation Rust intégrée aux IDEs https://blog.jetbrains.com/rust/2023/02/21/learn-rust-with-jetbrains-ides/

  • Un apprentissage directement intégré à l’IDE.
  • Avec un plugin “Academy” dédié, qui rajoute un troisième panneau avec les instructions, les explications, et on fait des exercices dans la partie IDE.
  • Une chouette manière d’apprendre intégrée directement à son IDE.
  • Chacun doit pouvoir créer ses propres ressources d’apprentissage, et on pourrait appliquer ça à des frameworks, des outils, ou pourquoi pas son propre projet informatique !

Retravail de classes du JDK Bits / ByteArray vers un usage via VarHandle pour le swapping de bits dans Java 21 https://minborgsjavapot.blogspot.com/2023/01/java-21-performance-improvements.html

  • Petit changement, mais utilisé par beaucoup de classes comme ObjectInputStream ou RandomAccessFile.
  • Améliore la sérialisation en Java.

Rajout de la notion de sequenced collection dans la hiérarchie des collections, planifié pour le JDK 21 https://www.infoq.com/news/2023/03/collections-framework-makeover/

  • Va permettre de codifier les collections qui ont un ordre donné (pas forcément trié).
  • Rajoute aussi des méthodes pour traverser des collections séquentielles à l’envers, ou pour récupérer ou ajouter un élément au début ou à la fin d’une collection ordonnée.
  • Aujourd’hui, ces méthodes sont éparpillées dans les implémentations et n’avaient pas de contrat commun.

Le guide ultime des virtual threads https://blog.rockthejvm.com/ultimate-guide-to-java-virtual-threads/

  • Un très long article qui couvre le sujet des nouveaux virtual threads.
  • Comment en créer ?
  • Comment ils fonctionnent ?
  • Le scheduler et le scheduling coopératif.
  • Les “pinned” virtual threads (lorsqu’un thread virtuel est bloqué dans un vrai thread, par exemple dans un bloc synchronized ou lors d’appels de méthodes natives).
  • Les thread local et thread pools.

Librairies

Quarkus 3 alpha 5 avec Hibernate ORM 6 et une nouvelle DevUI https://quarkus.io/blog/quarkus-3-0-0-alpha5-released/

La route vers Quarkus 3, article sur InfoQ https://www.infoq.com/news/2023/03/road-quarkus-3/

  • Jakarta EE, ORM 6, Microprofile 6, virtual threads, io_uring, ReactiveStreams => Flow.
  • io_uring réduit les copies de buffer entre user space et kernel space.
  • Pas de support JPMS en vue, mais Red Hat contribue au projet Leyden.
  • Camel extensions : attendez Camel 4 (passage Jakarta EE).

Interview de Geert Bevin, l’auteur du framework Java RIFE2 https://devm.io/java/rife2-java-framework

Google annonce Service Weaver https://opensource.googleblog.com/2023/03/introducing-service-weaver-framework-for-writing-distributed-applications.html

  • EJB is back (Enterprise Go Beans :D) !
  • Écrire en tant que modular monolith.
  • Permet au déploiement de décider ce qui est distribué ou non.
  • Basé sur leur expérience du surcoût de maintenance des microservices (contrats plus difficiles à casser, besoin de coordination de rollout…)
  • Dans la communauté des enthousiastes.
  • Et des gens concernés par les 10 fallacies of distributed computing et le fait de cacher les appels distants.
  • Avant cela, EJB et CORBA ont été des échecs de ce point de vue-là.
  • Ils n’expliquent pas comment le binding de nouveaux contrats et de déploiement se fait de manière transparente.
  • Des déployeurs implémentables (go et GKE initialement).

Étude d’opinion de certains utilisateurs de Jakarta EE (OmniFaces community) https://omnifish.ee/2023/03/10/jakarta-ee-survey-2022-2023-results/

  • Biaisée, donc attention.
  • Java EE 8, suivi par Jakarta EE 8 et derrière Jakarta EE 10 etc.
  • WildFly, puis Payara, puis GlassFish, ensuite Apache TomEE et JBoss EAP.
  • Gens contents de leurs serveurs d’application sans WebLogic et Websphere.
  • Les API utilisées le plus : JPA, CDI, REST, Faces, Servlet, Bean Validation, JTA, EJB, EL…
  • Produit MicroProfile : Quarkus, puis WildFly, puis Open Liberty, puis Payara et Helidon.
  • Les plus utilisés dans MicroProfile : Config, REST client, Open API, health et metric.

Comment utiliser des records et Hibernate https://thorben-janssen.com/java-records-embeddables-hibernate/

  • Pas en tant qu’entité encore (car final et pas de constructeur vide).
  • Mais en tant qu’@Embeddable.
  • Les records sont immuables.
  • Dans Hibernate 6.2, c’est supporté par défaut (annoter le record avec @Embeddable).
  • Ça utilise le contrat EmbeddableInstantiator.

Cinq librairies Java super confortables https://tomaszs2.medium.com/5-amazingly-comfortable-java-libraries-887802e240de

  • MapStruct : pour mapper des entités en DTO.
  • jOOQ : pour des requêtes de bases de données typées.
  • WireMock : pour mocker des API ou être entre le client et l’API pour ne mocker que certaines requêtes.
  • Eclipse Collections : pour rendre le code plus simple et facile à comprendre. Attention à la surface d’attaque.
  • HikariCP : connection pool rapide. Agroal est dans la même veine, mais supporte JTA (c’est ce qui est utilisé dans Quarkus).

Retour d’expérience sur Hibernate 6 https://www.jpa-buddy.com/blog/hibernate6-whats-new-and-why-its-important/

  • Côté API et côté moteur.
  • Jakarta Persistence 3 et java 11.
  • Les annotations de types hibernate sont typesafe.
  • Support des types JSON out of the box.
  • Meilleur support des dates avec @TimeZoneStorage, soit natif de la base, soit avec une colonne séparée.
  • Changement dans la génération des ID (changement cassant), mais la stratégie de nommage historique peut être activée.
  • Options autour de UUID (time-based et IP-based).
  • Les composite IDs n’ont plus besoin d’être sérialisable.
  • Type texte long supportés via @JdbcTypeCode.
  • Multi-tenancy (shared schema, resolver de tenant à plugger).
  • Read by position (SQL plus court car sans alias, désérialisation plus rapide, moins de JOIN dans certains cas).
  • Modèle sous-jacent commun entre HQL et l’API criteria, et donc même moteur.
  • Meilleure génération du SQL et plus de fonction SQL modernes réduisant le gap entre HQL et SQL.
  • Fonctions analytiques et fenêtre quand la base les supportent.
  • Graphe traversé en largeur plutôt qu’en profondeur (potentiellement plus de JOIN donc bien mettre lazy sur vos associations).

Cloud

Docker supprime les organisations open source sur DockerHub https://blog.alexellis.io/docker-is-deleting-open-source-images/

Web

Une base de connaissance sur le fonctionnement et les bonnes pratiques autour des WebHooks https://nordicapis.com/exploring-webooks-fyi-the-webhooks-knowledge-center/

Guillaume a refondu son blog https://glaforge.dev/

  • Cette fois-ci, c’est un site web statique, généré avec Hugo, avec des articles en Markdown, hébergé sur Github Pages, construit / publié automatiquement par Github Actions.

Outillage

Gradle 8.0 est sorti https://docs.gradle.org/8.0/release-notes.html

Une CLI connectée à OpenAI’s Davinci model pour générer vos lignes de commandes https://github.com/TheR1D/shell_gpt

  • sgpt -se "start nginx using docker, forward 443 and 80 port, mount current folder with index.html"
  • -> docker run -d -p 443:443 -p 80:80 -v $(pwd):/usr/share/nginx/html nginx
  • -> Execute shell command? [y/N]: y

Un petit outil en ligne basé sur le modèle GPT-3 qui permet d’expliquer un bout de code https://whatdoesthiscodedo.com/g/db97d13

  • Copiez-collez un bout de code de moins de 1000 caractères et l’outil vous explique ce qu’il fait.
  • Assez impressionnant, quand on pense que c’est un modèle de prédiction probabiliste des prochains caractères logiques.
  • Certaines réponses donnent parfois vraiment l’impression que l’outil comprend réellement l’intention du développeur derrière ce bout de code.

Git: Comment rebaser des branches en cascade https://adamj.eu/tech/2022/10/15/how-to-rebase-stacked-git-branches/

native-image va être inclus dans la prochaine version de GraalVM JDK. Plus besoin de gu install native-image https://github.com/oracle/graal/pull/5995

Si vous utilisez l’outil Mermaid pour faire des graphes d’architecture, d’interactions, etc, il y a un petit cheatsheet sympa qui montre comment faire certains diagrammes https://jojozhuang.github.io/tutorial/mermaid-cheat-sheet/

Un site avec plein de trucs et astuces sur psql, la CLI de PostgreSQL https://psql-tips.org/

cURL a 25 ans ! https://daniel.haxx.se/blog/2023/03/10/curl-25-years-online-celebration/

  • Son créateur, Daniel Stenberg, est toujours à la tête du projet.
  • cURL est utilisé dans d’innombrables projets.
  • Par défaut dans de nombreux systèmes d’exploitation.

Cédric Champeau explique le concept de version catalog de Gradle et comment il améliore la productivité https://melix.github.io/blog//2023/03-12-micronaut-catalogs.html

  • Permet de réduire le temps et l’effort nécessaire à gérer la version de ses dépendances.
  • Apporte aussi plus de sécurité et de flexibilité, pour s’assurer qu’on a les bonnes versions les plus récentes des dépendances et qu’elles fonctionnent bien entre elles.

Architecture

La pyramide des besoins du code de qualité https://www.fabianzeindl.com/posts/the-codequality-pyramid

  • Le bas de la pyramide supporte le haut.
  • Les blocs :
    • performance de build,
    • performance de test,
    • testabilité,
    • qualité des codes de composants,
    • fonctionnalités,
    • performance du code.
  • Pour chaque bloc, il explique les raisons, ses definitions et des astuces pour l’améliorer.
  • Par exemples, les fonctionnalités changent et donc build, testabilité et qualité de code permettent des changements légers en cas de changement dans les fonctionnalités.
  • Les perfs viennent ensuite (premature optimization is the root of all evil), regarder les besoins globaux.

Méthodologies

Le DevSusOps est né https://www.infoq.com/news/2023/02/sustainability-develop-operation/

Sécurité

Plein de choses qu’on peut faire avec des YubiKeys https://debugging.works/blog/yubikey-cheatsheet/

  • pour générer des time-based one-time passwords,
  • pour l’accès SSH,
  • pour sécuriser une base Keepass,
  • comme 2FA pour le chiffrement de disque,
  • pour la vérification d’identifiants personnels,
  • pour gérer les clés privées,

Loi, société et organisation

Le fabricant de graveurs de CPU hollandais ASML se voit interdire d’exporter ses technologies vers la Chine https://www-lemagit-fr.cdn.ampproject.org/c/s/www.lemagit.fr/actualites/365532284/Processeurs[…]le-escalade-dans-les-sanctions-contre-la-Chine?amp=1

  • En tout cas, les technologies de gravure des deux dernières générations.
  • De la pression commerciale, on passe au registre d’exclusion par décision militaire.
  • ASML s’était fait espionner récemment.
  • Canon et Sony aussi dans la restriction.

Meta supprime de nouveau 10000 emplois soit 25% au total depuis la fin de l’année dernière https://www.lesechos.fr/tech-medias/hightech/meta-va-supprimer-10000-postes-de-plus-1915528

Rubrique débutant

Bouger les éléments d’une liste https://www.baeldung.com/java-arraylist-move-items

  • Discute du concept d’ArrayList en-dessous, et donc le coût d’insérer au milieu.
  • Découverte de Collections.swap, pour intervertir deux éléments.
  • Découverte de Collections.rotate, pour “déplacer” l’index zero de la liste.

Conférences

La liste des conférences provenant de Developers Conferences Agenda/List par Aurélie Vache et contributeurs :

Nous contacter

Pour réagir à cet épisode, venez discuter sur le groupe Google https://groups.google.com/group/lescastcodeurs

Contactez-nous via twitter https://twitter.com/lescastcodeurs
Faire un crowdcast ou une crowdquestion
Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Tous les épisodes et toutes les infos sur https://lescastcodeurs.com/