LCC 292 - Enterprise Go Beans
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
ouRandomAccessFile
. - 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/
- Passage d’Hibernate 5 à 6 (donc testez !).
- Switch de compatibilité pour aider à la transition https://github.com/quarkusio/quarkus/wiki/Migration-Guide-3.0:-Hibernate-ORM-5-to-6-migration#database-orm-compatibility (API/behavior issues and most schema changes).
StatelessSession
injectable.- Gradle 8.
- Nouvelle DEvUI : nouveau look and feel, plus extensible pour les extensions et plus facile à utiliser, va au-delà des integrations d’extension (config etc).
quarkus deploy
dans la CLI, Gradle et Maven : déploie dans Kube, Knative, OpenShift.
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/
- Les projets open source risquent de devoir passer de 0 $ à 420 $ par an pour héberger leurs images.
- Rétropédalage de Docker : https://www.docker.com/blog/we-apologize-we-did-a-terrible-job-announcing-the-end-of-docker-free-teams/.
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/
- Bon, sérieusement, comment on couvre avec un nom pareil sans déraper 🤦 !
- Ah dommage Microsoft rejoint la FinOps foundation https://www.infoq.com/news/2023/02/microsoft-joins-finops-org/. Imagine s’ils avaient rejoint la DevSusOps fondation.
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 :
- 15-18 mars 2023 : JChateau - Cheverny in the Châteaux of the Loire Valley (France)
- 23-24 mars 2023 : SymfonyLive Paris - Paris (France)
- 23-24 mars 2023 : Agile Niort - Niort (France)
- 30 mars 2023 : Archilocus - Online (France)
- 31 mars 2023-1 avril 2023 : Agile Games France - Grenoble (France)
- 1-2 avril 2023 : JdLL - Lyon 3e (France)
- 4 avril 2023 : AWS Summit Paris - Paris (France)
- 4 avril 2023 : Lyon Craft - Lyon (France)
- 5-7 avril 2023 : FIC - Lille Grand Palais (France)
- 12-14 avril 2023 : Devoxx France - Paris (France)
- 20 avril 2023 : WordPress Contributor Day - Paris (France)
- 20-21 avril 2023 : Toulouse Hacking Convention 2023 - Toulouse (France)
- 21 avril 2023 : WordCamp Paris - Paris (France)
- 27-28 avril 2023 : AndroidMakers by droidcon - Montrouge (France)
- 4-6 mai 2023 : Devoxx Greece - Athens (Greece)
- 10-12 mai 2023 : Devoxx UK - London (UK)
- 11 mai 2023 : A11yParis - Paris (France)
- 12 mai 2023 : AFUP Day - lle & Lyon (France)
- 12 mai 2023 : SoCraTes Rennes - Rennes (France)
- 25-26 mai 2023 : Newcrafts Paris - Paris (France)
- 26 mai 2023 : Devfest Lille - Lille (France)
- 27 mai 2023 : Polycloud - Montpellier (France)
- 31 mai 2023-2 juin 2023 : Devoxx Poland - Krakow (Poland)
- 31 mai 2023-2 juin 2023 : Web2Day - Nantes (France)
- 1 juin 2023 : Javaday - Paris (France)
- 1 juin 2023 : WAX - Aix-en-Provence (France)
- 2-3 juin 2023 : Sud Web - Toulouse (France)
- 7 juin 2023 : Serverless Days Paris - Paris (France)
- 15-16 juin 2023 : Le Camping des Speakers - Baden (France)
- 20 juin 2023 : Mobilis in Mobile - Nantes (France)
- 20 juin 2023 : Cloud Est - Villeurbanne (France)
- 21-23 juin 2023 : Rencontres R - Avignon (France)
- 28-30 juin 2023 : Breizh Camp - Rennes (France)
- 29-30 juin 2023 : Sunny Tech - Montpellier (France)
- 29-30 juin 2023 : Agi’Lille - Lille (France)
- 8 septembre 2023 : JUG Summer Camp - La Rochelle (France)
- 19 septembre 2023 : Salon de la Data Nantes - Nantes (France) & Online
- 21-22 septembre 2023 : API Platform Conference - Lille (France) & Online
- 25-26 septembre 2023 : BIG DATA & AI PARIS 2023 - Paris (France)
- 28-30 septembre 2023 : Paris Web - Paris (France)
- 2-6 octobre 2023 : Devoxx Belgium - Antwerp (Belgium)
- 10-12 octobre 2023 : Devoxx Morocco - Agadir (Morocco)
- 12 octobre 2023 : Cloud Nord - Lille (France)
- 12-13 octobre 2023 : Volcamp 2023 - Clermont-Ferrand (France)
- 12-13 octobre 2023 : Forum PHP 2023 - Marne-la-Vallée (France)
- 19-20 octobre 2023 : DevFest Nantes - Nantes (France)
- 10 novembre 2023 : BDX I/O - Bordeaux (France)
- 6-7 décembre 2023 : Open Source Experience - Paris (France)
- 31 janvier 2024-3 février 2024 : SnowCamp - Grenoble (France)
- 1-3 février 2024 : SnowCamp - Grenoble (France)
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/