30.01.2015 Views

des enterprise beans - Département Informatique

des enterprise beans - Département Informatique

des enterprise beans - Département Informatique

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Enterprise <strong>beans</strong> et transactions<br />

est défini et qu’une transaction globale existe déjà, le conteneur<br />

invoque la méthode et joint la transaction globale existante. S’il n’existe<br />

aucune transaction globale, le conteneur démarre une transaction locale<br />

pour la méthode et la transaction se termine à la fin de la méthode.<br />

• NotSupported<br />

Permet également au bean d’éviter d’utiliser une transaction globale. Si<br />

un client appelle la méthode avec un contexte de transaction, le<br />

conteneur la suspend. A la fin de la méthode, la transaction globale<br />

reprend.<br />

• Mandatory<br />

Le client qui appelle une méthode avec cet attribut de transaction doit<br />

déjà être associé à une transaction. Sinon, le conteneur déclenche une<br />

javax.transaction.TransactionRequiredException. Cet attribut rend moins<br />

souple l’utilisation du bean puisqu’il part d’hypothèses sur la<br />

transaction de l’appelant.<br />

• Never<br />

Le client qui appelle une méthode avec cet attribut de transaction ne<br />

doit pas avoir de contexte de transaction. S’il en a un, le conteneur<br />

déclenche une exception.<br />

Transactions locales et globales<br />

Lorsqu’une seule connexion à une base de données existe, l’<strong>enterprise</strong><br />

bean peut contrôler directement la transaction en appelant commit() ou<br />

rollback() sur la connexion. Ce type de transaction est une transaction<br />

locale. Dans le cas <strong>des</strong> transactions globales, toutes les connexions à la<br />

base de données sont enregistrées avec le service de transaction globale<br />

qui gère la transaction. Pour une transaction globale, l’<strong>enterprise</strong> bean ne<br />

fait jamais d’appels directs à la connexion à une base de données<br />

elle-même.<br />

Un bean pratiquant la démarcation <strong>des</strong> transactions gérées par le bean<br />

utilise l’interface javax.transaction.UserTransaction pour identifier les<br />

limites d’une transaction globale. Quand un bean utilise la démarcation<br />

gérée par le conteneur, ce dernier interrompt chaque appel de client pour<br />

contrôler la démarcation de la transaction, en utilisant l’attribut de<br />

transaction défini dans le <strong>des</strong>cripteur de déploiement du bean par<br />

l’assembleur de l’application. L’attribut de transaction détermine<br />

également si la transaction est locale ou globale.<br />

Pour les transactions gérées par le conteneur, ce dernier suit certaines<br />

règles pour déterminer s’il doit faire une transaction locale ou globale.<br />

Généralement, un conteneur appelle la méthode dans une transaction<br />

locale après avoir vérifié qu’il n’existe pas déjà une transaction globale. Il<br />

vérifie également qu’on n’attend pas qu’il démarre une nouvelle<br />

Gestion <strong>des</strong> transactions 13-5

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!