You are on page 1of 34

Java Enterprise Edition

Transactions M. Menceur Master 2 MIAGE IF Universit Paris - Dauphine

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB

Transactions ? un petit rappel


Dfinition
Une transaction reprsente l'excution d'une unit de travail qui accde une ou plusieurs ressources partages, en gnral des bases de donnes [RMH04] Une unit de travail est un regroupement de traitements lis et considrs comme un tout indivisible soit tous les traitements russissent, soit tous sont annuls

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB
Virement = 2 oprations atomiques Que se passe-t-il si le Dpt choue ? Op. 2. Dpt Compte courant = 400 LDD = 110 Appelez la banque !!! Op. 1. Retrait

- 100

Compte courant

500 100 = 400

+ 100

LDD

110 + 100 110 = 210

Virement bancaire sans transaction


Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine 3

Transactions EJB
Begin transaction

1. Retrait - 100
Virement = 1 transaction de 2 oprations atomiques

Compte courant

2. Dpt + 100
Commit transaction

500 500 100 - 100 = 400 = 400

LDD

110 110 + 100 + 100 = 210 = 210

Virement bancaire dans une transaction (1/2)


Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB
Begin transaction

Que se passe-t-il si le Dpt choue ? Compte courant = 500 LDD = 110 Recommencez !

1. Retrait - 100 Compte courant


500 500 100 = 400

2. Dpt + 100
Rollback transaction

LDD
110

110 + 100 = 210

Virement bancaire dans une transaction (2/2)


Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB
Dmarcation d'une transaction

Une transaction est dmarque par un dbut et une fin


BEGIN : initialisation de la transaction La fin a deux issues possibles COMMIT : validation de la transaction i.e. la transaction a russi ROLLBACK : annulation de la transaction i.e. la transaction a chou

Porte transactionnelle

Tous les traitements excuts au sein de la transaction ont la mme porte transactionnelle

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB
Proprits ACID

Atomicit : Tout ou rien


Une transaction s'excute compltement ou pas du tout

Cohrence : passage d'un tat cohrent un autre


Au terme d'une transaction, l'intgrit des donnes est prserve, que la transaction ait russi ou chou

Isolation : Pas dinterfrence entre transactions


Le rsultat dune transaction n'est visible par les autres transactions quaprs sa validation

Durable : Garantie des mises jour en cas de panne


Ecriture des modifications avant validation (journalisation)
7

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB
Isolation

Problme : concurrence d'accs


Que se passe-t-il lorsque 2 transactions lisent et/ou modifient les mmes donnes ? Dans l'idal : pas d'interfrences entre transactions En pratique : en gnral trop pnalisant pour les performances du systme

Solution
Dfinir un degr d'isolation pour la transaction Un degr d'isolation dfinit les conditions d'isolation applicable l'excution d'une transaction

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB
Conditions d'isolation

ANSI SQL92 dfinit 3 types d'anomalies d'isolation


Lectures sales Une transaction T1 lit des modifications non valides de donnes effectues par T2. En cas de annulation de T2, T1 a lu des donnes invalides Lecture non rptables T1 lit une donne, T2 modifie cette mme donne, T1 relit la donne et obtient une valeur diffrente Lectures fantmes T1 lit un jeu de donnes, T2 ajoute/supprime des donnes, T1 relit le jeu de donnes et obtient un ensemble diffrent comme rsultat
9

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB
Degrs d'isolation
Prvention des anomalies par verrouillage des donnes Problme : Cot sur les performances

+ les verrous sont restrictifs, + on empche les transactions d'accder aux mmes donnes en mme temps

Solution : les degrs d'isolation


Degr d'isolation : dcrit la faon dont le verrouillage est appliqu aux donnes dans une transaction Les SGBD supportent, en gnral, 4 degrs d'isolation Chaque degr d'isolation peut se traduire par ses effets sur les conditions d'isolation de la transaction

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

10

Transactions EJB
Degrs d'isolation

Lecture non valide


T1 ne modifie pas de donnes modifies et non valides par T2

Lecture valide
Lecture non valide + T1 ne peut pas lire les donnes modifies et non valides T2

Lecture rptable
Lecture valide + T1 ne peut pas changer les donnes en cours de lecture par T2

Srialisable
T1 a un accs exclusif en lecture/criture sur les donnes T2 ne peut ni lire, ni modifier ces donnes
11

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB
Degrs d'isolation
Degr d'isolation (terminologie JDBC)
TRANSACTION_READ_UNCOMMITTED TRANSACTION_READ_COMMITTED TRANSACTION_REPEATABLE_READ TRANSACTION_SERIALIZABLE

Lecture sale OUI NON NON NON

Lecture non rptable OUI OUI NON NON

Lecture fantme OUI OUI OUI NON

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

12

Transactions EJB
Transactions locales et Transactions rparties

Diffrents acteurs d'une transaction


Gestionnaires de ressources (resource managers) Le systme de persistence (SGBD, persistence JMS ) Gestionnaire de transactions (transaction manager) Unique par transaction, rle d'arbitre en dcidant si la transaction doit finalement tre valide ou non

Transaction locale
Tous les traitements de la transaction sont excuts dans un seul et mme gestionnaire de ressources

Transaction rpartie
La transaction regroupe des traitements impliquant plusieurs gestionnaires de ressources
13

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB
Transactions locales et transactions rparties

Transaction locale
Gestionnaire de transactions = gestionnaire de ressources Commandes sur les transactions (begin, commit, rollback) accessible via l'API d'accs au gestionnaire de ressources

Application JDBC

PostGreSQL Gestionnaire de ressources

Transaction locale dans une "base donnes JDBC"


Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine 14

Transactions EJB
Transactions locales et transactions rparties

Transaction rpartie
Le gestionnaire de transactions coordonne globalement les gestionnaires de ressources impliqus dans la transaction Utilisation d'interfaces spcifiques ncessaire au dialogue entre applications, gestionnaire de transaction et gestionnaire de ressources Standard de fait : protocole X/Open XA, utilis par JTA (Java Transaction API) Validation des transactions : Protocole de validation en 2 phases (2PC : 2-Phase-Commit)

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

15

Transactions EJB
Interface XA

Application JTA

Gestionnaire de ressources

Interface TX

Gestionnaire de transactions

Gestionnaire de ressources

Transaction rpartie avec JTA/XA


16

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB
1. Prparer Prt Gestionnaire de transactions 2. Commit ou rollback 1 Prparer Prt 2. Commit ou rollback Gestionnaire de ressources Gestionnaire de ressources

Validation en deux phases


17

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB

Gestion des transactions dans les EJB Les conteneurs EJB autorisent 2 types de gestion de transactions
Gestion

dclarative des transactions

Les transactions sont gres par le conteneur Les attributs de transactions sont dfinis dans le descripteur de dploiement
Gestion

explicite des transactions

Le contrle des transactions est la charge du dveloppeur du bean. Programmation avec JTA
18

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB

Gestion des transactions dans les EJB


Type de transaction dfini par bean (Session ou JMS)

Annotation @TransactionManagement 2 valeurs possibles :

TransactionManagementType.CONTAINER (par dfaut) et TransactionManagementType.BEAN

Utilisez la gestion dclarative des transactions !


Simplicit, clart, souplesse : pas de code li aux transactions Supprime\rduit la complexit lie la dmarcation des transactions : porte transactionnelle d'une mthode diffrente en fonction du contexte d'appel, propagation ou non de la porte transactionnelle etc. Gestion transparente des transactions rparties !! (si supportes)
19

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB

Gestion des transactions dans les EJB


Rservez la gestion explicite quelques cas
Lorsque la gestion dclarative ne suffit plus ! Permet une granularit plus fine des transactions

Granularit de la gestion dclarative sur un bean : limite la mthode (problme : "2 transactions dans une mthode" )

Programmation l'aide de l'API JTA


Package javax.transaction Entre autres, la classe javax.transaction.UserTransaction fournit les mthodes begin, commit, rollback JDBC possible mais viter pour les transactions. Utilisez JTA car indpendante du type de gestionnaire de ressources
20

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB

Gestion dclaratives des transactions


Attribut transactionnel
Dfini au niveau de chaque mthode d'un Bean Dcrit la porte transactionnelle de la mthode Permet au conteneur EJB de grer automatiquement la dmarcation transactionnelle de la mthode, en fonction du contexte transactionnel courant i.e. celui au moment de l'appel de la mthode

Y a-t-il une transaction en cours ? (contexte transactionnel) Si oui que faire ? Si non que faire ? (attribut transactionnel)

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

21

Transactions EJB
6 types d'attributs transactionnels possibles
Required RequiredNew Supports NotSupported Mandatory Never

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

22

Transactions EJB

Required : La mthode doit s'excuter dans la porte d'une transaction


Si le client fait partie d'une transaction, la mthode propage la transaction Si le client ne fait pas partie d'une transaction, une transaction est dmarre pour l'excution de la mthode et est termine la fin de celle-ci

Client (EJB ou application)

EJB

Client (EJB ou application)

EJB

Contexte transactionnel du client Contexte transactionnel de l'EJB Pas de contexte transactionnel

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

23

Transactions EJB

RequiredNew : Une nouvelle transaction est dmarre l'appel de la mthode


Si le client fait partie d'une transaction, elle est suspendue jusqu'au retour de l'appel de la mthode. La mthode s'excute dans une nouvelle transaction

Client (EJB ou application)

EJB

Client (EJB ou application)

EJB

Contexte transactionnel du client Contexte transactionnel de l'EJB Pas de contexte transactionnel

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

24

Transactions EJB

Supports : La mthode s'inscrit dans la porte transactionnelle du client


si le client fait partie d'une transaction, la mthode est appele dans cette transaction sinon la mthode s'excute en dehors de toute transaction

Client (EJB ou application)

EJB

Client (EJB ou application)

EJB

Contexte transactionnel du client Contexte transactionnel de l'EJB Pas de contexte transactionnel

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

25

Transactions EJB

NotSupported : La mthode ne supporte pas les transactions


Si le client fait partie d'une transaction, elle est suspendue jusqu'au retour de l'appel de la mthode appele

Client (EJB ou application)

EJB

Client (EJB ou application)

EJB

Contexte transactionnel du client Contexte transactionnel de l'EJB Pas de contexte transactionnel

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

26

Transactions EJB

Mandatory : La mthode doit obligatoirement s'excuter dans la porte de la transaction du client


Si le client fait partie d'une transaction, la mthode propage la transaction Sinon, l'appel choue et le conteneur lve l'exception
javax.transaction.TransactionRequiredException

Client (EJB ou application)

EJB

Client (EJB ou application)

EJB

Contexte transactionnel du client Contexte transactionnel de l'EJB Pas de contexte transactionnel

Exception

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

27

Transactions EJB

Never : La mthode ne doit jamais s'excuter dans la porte d'une transaction


Si le client fait partie d'une transaction, le conteneur lve une exception

Client (EJB ou application)

EJB

Client (EJB ou application)

EJB

Exception

Contexte transactionnel du client Contexte transactionnel de l'EJB Pas de contexte transactionnel

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

28

Transactions EJB

Gestion dclaratives des transactions


Dfinition de l'attribut transactionnel

Annotation @TransactionAttribute
TransactionAttributeType.REQUIRED (defaut) TransactionAttributeType.REQUIRED_NEW TransactionAttributeType.SUPPORTS TransactionAttributeType.NOT_SUPPORTED TransactionAttributeType.MANDATORY TransactionAttributeType.NEVER

Annotation au niveau du Bean : attribut transactionnel de l'EJB appliqu toutes les mthodes Surchargeable par mthode
29

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB

Gestion dclaratives des transactions


Dfinition de l'attribut transactionnel

Annotation @TransactionAttribute
TransactionAttributeType.REQUIRED (defaut) TransactionAttributeType.REQUIRED_NEW TransactionAttributeType.SUPPORTS TransactionAttributeType.NOT_SUPPORTED TransactionAttributeType.MANDATORY TransactionAttributeType.NEVER

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

30

@Stateless // attribut transactionnel = TransactionAttributeType.REQUIRED par dfaut public class DummyEJB implements Dummy { ... @TransactionAttribute(TransactionAttributeType.SUPPORTS) Public void method1() {} // attribut transactionnel = TransactionAttributeType.REQUIRED // i.e. celui du bean Public void method2() {} }

@Stateless @TransactionAttribute(TransactionAttributeType.SUPPORTS) public class DummyEJB implements Dummy { ... // attribut transactionnel = TransactionAttributeType.SUPPORTS // i.e. celui du bean Public void method1() {} @TransactionAttribute(TransactionAttributeType.REQUIRED) Public void method2() {} }

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

31

Transactions EJB

Gestion dclaratives des transactions


Limitations sur l'attribut transactionnel
Les beans orient message supporte uniquement les types : Required, NotSupported Les autres attributs font rfrence au contexte transactionnel du client et n'ont donc pas de sens pour un MDB Les beans session supportent tous les types Les mthodes EJB utilisant l'EntityManager doivent tre transactionnelles (Required, RequiredNew,

Mandatory)
32

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB

Gestion dclaratives des transactions


Annulation d'un transaction

La mthode setRollbackOnly() de javax.ejb.SessionContext permet un bean de forcer l'annulation de la transaction courante


Marque la transaction comme devant tre, quoiqu'il arrive, annule Au moment de dcider du sort de la transaction, le conteneur procdera son annulation Permet un bean impliqu dans une transaction d'informer le conteneur qu'il ne souhaite pas que la transaction soit valide La mthode getRollbackOnly() de SessionContext retourne true si la transaction courante est marque " annuler" Permet d'viter l'excution par le bean d'un traitement qui sera, de toute faon, non valid SessionContext injecte par annotation @Resource
33

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

Transactions EJB

Gestion dclaratives des transactions


Annulation d'un transaction

Une transaction est automatiquement annule si une exception du type RuntimeException ou java.rmi.RemoteException est lance (javax.ejb.EJBException tend RuntimeException ) Les exceptions applicatives i.e. celles qui n'hritent ni de RuntimeException ni de RemoteException ne provoquent pas l'annulation de la transaction Permet la reprise aprs erreur Si on souhaite malgr tout l'annulation de la transaction Appeler setRollbackOnly() Ou lancer une EJBException ou RemoteException
34

Java EE Transactions - M. Menceur - Master MIAGE IF, Universit Paris Dauphine

You might also like