DES REX ET DEVOXX — 1er épisode
Il s’agit de vous évoquer, dans cette première partie, les retours d’expérience de notre Dream Team Carbon IT présente dans ce lieu de Devoxxion de la technique avec gourous d’un autre temps, prêcheurs du futur et magiciens du code.
Voici donc un petit état des lieux des retours d’expérience au sujet de l’écosystème Java
Hibernate et Elasticsearch
Hibernate et Elasticsearch sont sur un bateau, par Emmanuel Bernard @emmanuelbernard & David Pilato @dadoonet
David & Emmanuel, coiffés de leur plus beau couvre-chef, nous rejouent leur plus belle scène du « dis donc, c’est compliqué de faire marcher Elasticsearch avec Hibernate ». Bon, c’est vrai qu’ils sont meilleurs développeurs qu’acteurs ces deux là, on va pas se mentir !
Mais quiconque a du un jour utiliser Hibernate et ES ensemble comprend où les speakers veulent en venir : entité vers JSON, gestion des transactions et/ des rollbacks, schéma et analyzer, JSON vers entité…
Heureusement, Hibernate Search va nous sauver ! En se pluggant sur les events de l’ORM, et grâce à quelques lignes de conf et annotations, il apporte la solution aux problèmes précédemment cités. On pourra en outre utiliser la QueryDSL d’ES, ou une DSL spécifique Hibernate
Cela dit, comme c’est encore en version alpha, on va encore attendre quelques mois.
High-Performance Hibernate (ou benchmark empirique) @vlad_mihalcea
Intro
⇒ Constat : 50 % des problèmes de performance sont dus à la base de données
T = tacq + tdal + treq + texec + tres + tidle
Acq : acquisition
Dal : Data Access Logique
Req : Requète
Exec : Execution
Res : Resultat (fetching)
Idle : Release
Bonne pratique pour la conf :
⇒ Configuration de ReleaseMode
After Transaction meilleur que After Statement
⇒ ID Generator et Seq Generator
Équivalent niveau performance mais meilleurs que TableRow
⇒ Ne pas mettre un Batch_insert à 1 (ça semblait logique).
Il conseille de mettre 10 sachant qu’au dessus de ce nombre, les performances affichées sont équivalentes.
⇒ En terme de cascading et batching, utiliser la configuration
order_insert=true
order_update=true
⇒ Si possible, ne mettre que les champs utiles dans la requête.
Par exemple
select nom, prénom from personne
plutôt que
select * from personne
⇒ DTO vs Entities
Préférer les Entities quand il y a besoin de sauvegarder les éléments.
Préférer les DTO pour la lecture.
Autre sujet Java :
Performance: Java vous déclare sa flamme : Présentation de l’outil FlameGraph, permettant le profilage d’application sous Linux, MacOS, Windows, etc. Il existe un script dédié pour le profilage d’application Java.
OutOfMemoryException :
Quel est le coût des objets en Java ?, par Jean-Philippe Bempel @jpbempel
Dans ce talk, Jean-Philippe nous fait un tour initiatique des impacts du code sur la mémoire de notre bonne vieille JVM, nous montre comment traquer les potentielles fuites mémoire et nous donne quelques pistes/solutions pour éviter le fatidique OutOfMemoryException.
Un objet, au sens java, est avant tout de la mémoire allouée. Que cela soit un simple char ou un objet complexe, il y a de la mémoire qui est prise dès que l’objet est instancié.
Pour un objet, la JVM attribue de la mémoire pour :
- L’entête (contenant des métadatas de l’instance de cet objet)
- Les champs
- L’alignement (lié à l’adressage sur 8-bit)
Quelques chiffres nous sont ensuite présentés :
- ArrayList prendra 440 bytes
- LinkedList : 2432 bytes
- ConcurrentHashMap : 4047 bytes
Il conseille ainsi d’utiliser des objets adaptés aux besoins et de toujours mesurer l’impact de leurs utilisations : “La mesure et non la démesure”.
Par la suite, le speaker nous présente des outils pour traquer les fuites mémoire sans entrer trop dans le détail, simplement quelques retours de ses différentes expériences.
Enfin, Jean-Philippe termine le talk avec quelques tips pour lutter contre le surcoût en mémoire dont :
- Flyweight pattern & Initializer Pattern
- ArrayList plutôt que LinkedList
Jhipster
JHipster en 2016 par Julien Dubois @juliendubois
Après avoir fait un rapide tour de l’activité Open Source de JHipster, il nous a monté une architecture en microservice d’une boutique e-commerce. La démonstration est clairement impressionnante car JHipster permet de bootstrapper l’ensemble extrêmement rapidement et facilement.
JOOQ
Lukas Eder @lukaseder est venu nous présenter JOOQ, un framework qui se démarque du classique JDBC (trop verbeux et surtout offrant trop de possibilité d’introduire des bugs voire des failles de sécurité) et d’Hibernate/JPA (utilisant massivement les annotations et donc un grand niveau d’indirection par rapport à SQL). JOOQ est un DSL qui permet d’écrire en SQL directement en Java (ou Scala). Cela permet d’accéder directement à toute la puissance du langage SQL et de la base de données associée. Le fait que cela soit intégré directement au langage offre l’auto-complétion, la sécurité du typage mais surtout vous aide à écrire du SQL.
Autres sujets :
Guillaume Laforge @glaforge nous a fait une large revue des bonnes pratiques dans le design d’API REST : format des URL, gestion des relations, codes retour adaptés, ou encore approche HAL.
Dans le prochain article, nous vous évoquerons les retours d’expérience en ce qui concerne les langages alternatifs
Big KISS à tous !