LCC 337 - Datacenters Carrier Class dans l'espace

Épisode de Les Cast Codeurs Podcast par Emmanuel Bernard, Guillaume, Antonio, Arnaud, Katia · 16 février 2026 · 1 h 34 min

Emmanuel et Guillaume discutent de divers sujets liés à la programmation, notamment les systèmes de fichiers en Java, le Data Oriented Programming, les défis de JPA avec Kotlin, et les nouvelles fonctionnalités de Quarkus. Ils explorent également des sujets un peu fous comme la création de datacenters dans l'espace. Pas mal d'architecture aussi.

Enregistré le 13 février 2026

Téléchargement de l'épisode LesCastCodeurs-Episode-337.mp3 ou en vidéo sur YouTube.

News

Langages

Comment implémenter un file system en Java https://foojay.io/today/bootstrapping-a-java-file-system/

Créer un système de fichiers Java personnalisé avec NIO.2 pour des usages variés (VCS, archives, systèmes distants).

Évolution Java: java.io.File (1.0) -> NIO (1.4) -> NIO.2 (1.7) pour personnalisation via FileSystem.

Recommander conception préalable; API Java est orientée POSIX.

Composants clés à considérer:

Conception URI (scheme unique, chemin).

Gestion de l'arborescence (BD, métadonnées, efficacité).

Stockage binaire (emplacement, chiffrement, versions).

Minimum pour démarrer (4 composants):

Implémenter Path (représente fichier/répertoire).

Étendre FileSystem (instance du système).

Étendre FileSystemProvider (moteur, enregistré par scheme).

Enregistrer FileSystemProvider via META-INF/services.

Étapes suivantes: Couche BD (arborescence), opérations répertoire/fichier de base, stockage, tests.

Processus long et exigeant, mais gratifiant.

Un article de brian goetz sur le futur du data oriented programming en Java https://openjdk.org/projects/amber/design-notes/beyond-records

Le projet Amber de Java introduit les "carrier classes", une évolution des records qui permet plus de flexibilité tout en gardant les avantages du pattern matching et de la reconstruction

Les records imposent des contraintes strictes (immutabilité, représentation exacte de l'état) qui limitent leur usage pour des classes avec état muable ou dérivé

Les carrier classes permettent de déclarer une state description complète et canonique sans imposer que la représentation interne corresponde exactement à l'API publique

Le modificateur "component" sur les champs permet au compilateur de dériver automatiquement les accesseurs pour les composants alignés avec la state description

Les compact constructors sont généralisés aux carrier classes, générant automatiquement l'initialisation des component fields

Les carrier classes supportent la déconstruction via pattern matching comme les records, rendant possible leur usage dans les instanceof et switch

Les carrier interfaces permettent de définir une state description sur une interface, obligeant les implémentations à fournir les accesseurs correspondants

L'extension entre carrier classes est possible, avec dérivation automatique des appels super() quand les composants parent sont subsumés par l'enfant

Les records deviennent un cas particulier de carrier classes avec des contraintes supplémentaires (final, extends Record, component fields privés et finaux obligatoires)

L'évolution compatible des records est améliorée en permettant l'ajout de composants en fin de liste et la déconstruction partielle par préfixe

Comment éviter les pièges courants avec JPA et Kotlin - https://blog.jetbrains.com/idea/2026/01/how-to-avoid-common-pitfalls-with-jpa-and-kotlin/

JPA est une spécification Java pour la persistance objet-relationnel, mais son utilisation avec Kotlin présente des incompatibilités dues aux différences de conception des deux langages

Les classes Kotlin sont finales par défaut, ce qui empêche la création de proxies par JPA pour le lazy loading et les opérations transactionnelles

Le plugin kotlin-jpa génère automatiquement des constructeurs sans argument et rend les classes open, résolvant les problèmes de compatibilité

Les data classes Kotlin ne sont pas adaptées aux entités JPA car elles génèrent equals/hashCode basés sur tous les champs, causant des problèmes avec les relations lazy

L'utilisation de lateinit var pour les relations peut provoquer des exceptions si on accède aux propriétés avant leur initialisation par JPA

Les types non-nullables Kotlin peuvent entrer en conflit avec le comportement de JPA qui initialise les entités avec des valeurs null temporaires

Le backing field direct dans les getters/setters personnalisés peut contourner la logique de JPA et casser le lazy loading

IntelliJ IDEA 2024.3 introduit des inspections pour détecter automatiquement ces problèmes et propose des quick-fixes

L'IDE détecte les entités finales, les data classes inappropriées, les problèmes de constructeurs et l'usage incorrect de lateinit

Ces nouvelles fonctionnalités aident les développeurs à éviter les bugs subtils liés à l'utilisation de JPA avec Kotlin

Librairies

Guide sur MapStruct @IterableMapping - https://www.baeldung.com/java-mapstruct-iterablemapping

MapStruct est une bibliothèque Java pour générer automatiquement des mappers entre beans, l'annotation @IterableMapping permet de configurer finement le mapping de collections

L'attribut dateFormat permet de formater automatiquement des dates lors du mapping de listes sans écrire de boucle manuelle

L'attribut qualifiedByName permet de spécifier quelle méthode custom appliquer sur chaque élément de la collection à mapper

Exemple d'usage : filtrer des données sensibles comme des mots de passe en mappant uniquement certains champs via une méthode dédiée

L'attribut nullValueMappingStrategy permet de contrôler le comportement quand la collection source est null (retourner null ou une collection vide)

L'annotation fonctionne pour tous types de collections Java (List, Set, etc.) et génère le code de boucle nécessaire

Possibilité d'appliquer des formats numériques avec numberFormat pour convertir des nombres en chaînes avec un format spécifique

MapStruct génère l'implémentation complète du mapper au moment de la compilation, éliminant le code boilerplate

L'annotation peut être combinée avec @Named pour créer des méthodes de mapping réutilisables et nommées

Le mapping des collections supporte les conversions de types complexes au-delà des simples conversions de types primitifs

Accès aux fichiers Samba depuis Java avec JCIFS - https://www.baeldung.com/java-samba-jcifs

JCIFS est une bibliothèque Java permettant d'accéder aux partages Samba/SMB sans monter de lecteur réseau, supportant le protocole SMB3

on pense aux galériens qui doivent se connecter aux systèmes dit legacy

La configuration nécessite un contexte CIFS (CIFSContext) et des objets SmbFile pour représenter les ressources distantes

L'authentification se fait via NtlmPasswordAuthenticator avec domaine, nom d'utilisateur et mot de passe

La bibliothèque permet de lister les fichiers et dossiers avec listFiles() et vérifier leurs propriétés (taille, date de modification)

Création de fichiers avec createNewFile() et de dossiers avec mkdir() ou mkdirs() pour créer toute une arborescence

Suppression via delete() qui peut parcourir et supprimer récursivement des arborescences entières

Copie de fichiers entre partages Samba avec copyTo(), mais impossibilité de copier depuis le système de fichiers local

Pour copier depuis le système local, utilisation des streams SmbFileInputStream et SmbFileOutputStream

Les opérations peuvent cibler différents serveurs Samba et différents partages (anonymes ou protégés par mot de passe)

La bibliothèque s'intègre dans des blocs try-with-resources pour une gestion automatique des ressources

Quarkus 3.31 - Support complet Java 25, nouveau packaging Maven et Panache Next - https://quarkus.io/blog/quarkus-3-31-released/

Support complet de Java 25 avec images runtime et native

Nouveau packaging Maven de type quarkus avec lifecycle optimisé pour des builds plus rapides

voici un article complet pour plus de detail https://quarkus.io/blog/building-large-applications/

Introduction de Panache Next, nouvelle génération avec meilleure expérience développeur et API unifiée ORM/Reactive

Mise à jour vers Hibernate ORM 7.2, Reactive 3.2, Search 8.2

Support de Hibernate Spatial pour les données géospatiales

Autres épisodes de « Les Cast Codeurs Podcast »

À propos du podcast

Les Cast Codeurs : le podcast en français de, par et pour les développeurs. Prenez connaissance des dernières nouvelles de la sphère Java et du développement en général. Plongez sur un sujet précis avec les épisodes interview. Supportez les radotages de vos hôtes : Emmanuel Bernard (ex Red Hat,…

Les Cast Codeurs Podcast

Épisodes similaires

Tous les épisodes de Les Cast Codeurs Podcast · Plus de podcasts Actualités