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.
Changer d’entreprise, c’est excitant. Nouveau challenge, nouveaux collègues, nouveau café. Mais, bien souvent, on oublie…
Ça n’étonnera personne si nous affirmons que le monde du développement logiciel est en constante…
En Allemagne, le travail en tandem à temps partiel, aussi appelé « jobsharing » est…
On se retrouve comme d'habitude pour le début du classement qcm saison automne ! Mais…
La saison printemps des tests techniques WeLoveDevs s'est terminée le 31 mai, et c'est Axel…