Professional Documents
Culture Documents
Transactions EJB
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
+ 100
LDD
Transactions EJB
Begin transaction
1. Retrait - 100
Virement = 1 transaction de 2 oprations atomiques
Compte courant
2. Dpt + 100
Commit transaction
LDD
Transactions EJB
Begin transaction
Que se passe-t-il si le Dpt choue ? Compte courant = 500 LDD = 110 Recommencez !
2. Dpt + 100
Rollback transaction
LDD
110
Transactions EJB
Dmarcation d'une transaction
Porte transactionnelle
Tous les traitements excuts au sein de la transaction ont la mme porte transactionnelle
Transactions EJB
Proprits ACID
Transactions EJB
Isolation
Solution
Dfinir un degr d'isolation pour la transaction Un degr d'isolation dfinit les conditions d'isolation applicable l'excution d'une transaction
Transactions EJB
Conditions d'isolation
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
10
Transactions EJB
Degrs d'isolation
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
Transactions EJB
Degrs d'isolation
Degr d'isolation (terminologie JDBC)
TRANSACTION_READ_UNCOMMITTED TRANSACTION_READ_COMMITTED TRANSACTION_REPEATABLE_READ TRANSACTION_SERIALIZABLE
12
Transactions EJB
Transactions locales et Transactions rparties
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
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
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)
15
Transactions EJB
Interface XA
Application JTA
Gestionnaire de ressources
Interface TX
Gestionnaire de transactions
Gestionnaire de ressources
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
Transactions EJB
Gestion des transactions dans les EJB Les conteneurs EJB autorisent 2 types de gestion de transactions
Gestion
Les transactions sont gres par le conteneur Les attributs de transactions sont dfinis dans le descripteur de dploiement
Gestion
Le contrle des transactions est la charge du dveloppeur du bean. Programmation avec JTA
18
Transactions EJB
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
Transactions EJB
Granularit de la gestion dclarative sur un bean : limite la mthode (problme : "2 transactions dans une mthode" )
Transactions EJB
Y a-t-il une transaction en cours ? (contexte transactionnel) Si oui que faire ? Si non que faire ? (attribut transactionnel)
21
Transactions EJB
6 types d'attributs transactionnels possibles
Required RequiredNew Supports NotSupported Mandatory Never
22
Transactions EJB
EJB
EJB
23
Transactions EJB
EJB
EJB
24
Transactions EJB
EJB
EJB
25
Transactions EJB
EJB
EJB
26
Transactions EJB
EJB
EJB
Exception
27
Transactions EJB
EJB
EJB
Exception
28
Transactions EJB
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
Transactions EJB
Annotation @TransactionAttribute
TransactionAttributeType.REQUIRED (defaut) TransactionAttributeType.REQUIRED_NEW TransactionAttributeType.SUPPORTS TransactionAttributeType.NOT_SUPPORTED TransactionAttributeType.MANDATORY TransactionAttributeType.NEVER
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() {} }
31
Transactions EJB
Mandatory)
32
Transactions EJB
Transactions EJB
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