Un petit article sur les transactions en JEE. Il ne s’agit pas de réexpliquer les mécanismes mis en oeuvre, à savoir l’AOP, mais des choses beaucoup plus terre à terre.
Débloque les + belles offres tech en 10 mins
Les transactions dans les applications JEE se définissent sur deux niveaux, à savoir au niveau applicatif et au niveau base de données. Pour rappel les transactions doivent en théorie satisfaire les quatre principes suivants :
On désigne habituellement sous le terme ACID les principes ci-dessus. Les mécanismes mis en jeu pour y parvenir sont du genre compliqués surtout au niveau de la base de données, mais on y reviendra un peu plus tard.
Dans ce paragraphe nous ne faisons pas la distinctions entre les niveaux transactionnels offerts par Spring et ceux offerts par les EJB tant ils sont proches. D’ailleurs on va prendre la notation standard, à savoir celle des EJB. Dans les applications modernes les transactions sont généralement définies par annotations. La liste ci-dessous indique les différents niveaux transactionnels disponibles.
Dans la pratique Required est utilisé pour les opérations en écriture, Supported pour les opérations en lecture. RequiresNew et NotSupported sont rarement utilisés, et on se demande pourquoi Mandatory et Never existent…
Notez toutefois que si vous utilisez des contextes transactionnels, il est de bon aloi d’annoter toutes les méthodes publiques de vos classes avec des informations de contexte, du moins pour celles qui peuvent être invoquées dans le cadre d’une transaction.
Pour que les transactions fonctionnent, il convient aussi de configurer la base de données correctement. Cette configuration aura un impact sur l’isolation des transactions, mais aussi sur les performances. Et comme vous pouvez vous en douter, plus l’isolation est élevée, moins bonnes sont les performances. Bref il s’agit comme toujours d’une histoire de compromis…
Voici la liste des configurations disponibles :
SELECT au cours du temps dans une même transaction peut renvoyer des résultats différents.Dans la pratique le niveau Read committed suffit dans la plupart des cas.
Au niveau des transactions comme dans beaucoup de choses tout est affaire de compromis, suivant les besoins fonctionnels de l’application sur laquelle vous travaillez. Veillez toutefois à ne pas mettre toutes les méthodes en Required ou RequiresNew au niveau JEE sous peine de deadlocks ou du moins d’un sérieux impact sur les performances…
Débloque les + belles offres tech en 10 mins
Cet article vous a plu ? Vous aimerez sûrement aussi :
Julien
Moi c’est Julien, ingénieur en informatique avec quelques années d’expérience. Je suis tombé dans la marmite étant petit, mon père avait acheté un Apple – avant même ma naissance (oui ça date !). Et maintenant je me passionne essentiellement pour tout ce qui est du monde Java et du système, les OS open source en particulier.
Au quotidien, je suis devops, bref je fais du dév, je discute avec les opérationnels, et je fais du conseil auprès des clients.
Un nouveau capitaine technique débarque à la barre de WeLoveDevs ! Après le rachat par…
L’AI Act pour les développeurs, c’est la première loi vraiment impactante depuis le RGPD. Et…
"Venez, faites le module 1 et on en reparle." C’est le défi lancé par Gaetan…
L’OWASP Top 10, c’est un outil pour les développeurs web. Et pourtant, il est largement…
Dans cet article, on va parler du RGPD pour les développeurs. C’est un sujet que…
En 2025, le débat monolithe vs microservices n’est toujours pas tranché. Faut-il garder une architecture…