La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Le Transactionnel en J2EE JTA/JTS Réalisé par Jarraya Med Haythem Jaziri Med Naceur.

Présentations similaires


Présentation au sujet: "1 Le Transactionnel en J2EE JTA/JTS Réalisé par Jarraya Med Haythem Jaziri Med Naceur."— Transcription de la présentation:

1 1 Le Transactionnel en J2EE JTA/JTS Réalisé par Jarraya Med Haythem Jaziri Med Naceur

2 2 Plan Introduction Plateforme J2EE Transaction Le transactionnel en J2EE Conclusion

3 3 Introduction Une application entreprise typique accède et sauvegarde les informations dans une ou plusieurs bases de données. Une information doit être correcte, courante et fiable. Lintégrité de linformation serait perdue si des programmes multiples sont autorisés a mettre à jour la même donnée simultanément, elle peut même être perdue si un système tombe en panne lors de lexécution dune transaction affectant cette dernière. Les logiciels de transactions assurent lintégrité des données.

4 4 Plateforme J2EE Quest ce que J2EE? Pourquoi J2EE? Concept et spécificités de J2EE Architecture et APIs J2EE

5 5 Quest ce que J2EE? Un ensemble de spécifications dAPIs. Architecture distribuée. Une méthode de packaging et de déploiements de composants.

6 6 Pourquoi J2EE? Portabilité - Standards Réutilisation - Composants Performance et Scalabilité - Répartition des charges - Tolérance aux pannes - Transactions

7 7 Concepts et spécificités J2EE Les conteneurs Les servlets Java Les JavaServer Pages Les Entreprise JavaBeans Les services Web Les Transactions La sécurité

8 8 Architecture et APIs J2EE API définissant des interfaces standards avec un gestionnaire de transactions.

9 9 Transaction Quest ce quune transaction? Propriétés dune transaction Attributs dune transaction Modèles de transactions Problèmes résolues par les transactions Un peu de vocabulaire

10 10 Quest ce quune transaction? Les Transactions sont en fait des ordres passés à la base de données pour valider des événements effectuées sur les données. Une transaction est une unité dinteraction avec le système de gestion de base de données. Elle est traité dune manière cohérente et fiable indépendamment des autres transactions. Une transaction unique peut regrouper plusieurs requêtes, chacune avec des ordres de lecture ou décriture dans la base de données. La commande COMMIT permet de valider une transaction. A contrario, la commande ROLLBACK permet dannuler une transaction.

11 11 Propriétés dune transaction Une transaction doit être conforme aux propriétés ACID Atomicité Nombreux acteurs : servlet, corba, rmi-iiop, ejbs, DB… Tous votent pour indiquer si la transaction s'est bien passée… Consistance Le système demeure consistent après l'exécution d'une transaction (comptes bancaires ok!)

12 12 Propriétés dune transaction Isolation Empêche les transactions concurrentes de voir des résultats partiels. Chaque transaction est isolée des autres. Implémenté par des protocoles de synchronisation bas niveau sur les BDs… Durabilité Garantit que les mises à jour sur une BD peuvent survivre à un crash (BD, machine, réseau). En général, on utilise un fichier de log qui permet de faire des undos pour revenir dans l'état avant le crash.

13 13 Attributs dune transaction Lattribut dune transaction contrôle la portée de cette dernière. La figure ci-dessous illustre limportance du contrôle de létendue dune transaction: la méthode-A commence la transaction et fait appel à la méthode-B de Bean-2. Lors de lexécution de la méthode-B, est ce quelle sexécute avec la portée de la transaction démarrée par la méthode-A ou elle sexécute comme une nouvelle transaction? La réponse dépend de lattribut de la transaction de la méthode-B!

14 14 Attributs dune transaction Required Si le client exécute une transaction qui invoques la méthode du bean entreprise cette dernière sexécute au sein de la transaction client. Si le client nest pas associé à une transaction le conteneur démarrera une nouvelle avant dexécuter la méthode. Requires New Si le client exécute une transaction qui invoques la méthode du bean entreprise, le conteneur suit ces étapes 1- suspendre la transaction client 2- démarrer une nouvelle transaction 3- déléguer lappel à la méthode 4- reprendre la transaction client après la fin de la méthode. Si le client nest pas associé à une transaction le conteneur démarrera une nouvelle avant dexécuter la méthode

15 15 Attributs dune transaction Mandatory Si le client exécute une transaction qui invoques la méthode du bean entreprise cette dernière sexécute au sein de la transaction client. Si le client nest pas associé à une transaction le conteneur lève lexception TransactionRequiredException NotSupported Si le client exécute une transaction qui invoques la méthode du bean entreprise, le conteneur suspend cette dernière avant lappel de la méthode. Après la fin de la méthode, le conteneur reprend la transaction client. Si le client nest pas associé à une transaction, le conteneur ne démarrera pas une nouvelle transaction avant lexécution de la méthode.

16 16 Attributs dune transaction Supports Si le client exécute une transaction qui invoques la méthode du bean entreprise, la méthode sexécute au sein de la transaction client. Si le cleint nest pas associé à une transaction le conteneur ne démarrera pas une novelle transaction avant lappel de la méthode. Never Si le client exécute une transaction qui invoques la méthode du bean entreprise, le conteneur lève lexception RemoteException. Si le cleint nest pas associé à une transaction le conteneur ne démarrera pas une novelle transaction avant lappel de la méthode.

17 17 Attributs dune transaction (résumé) Attribut de la transactionTransaction ClientMéthode métier de la transaction Required AucunT2 T1 RequiresNew AucunT2 T1T2 Mandatory AucunErreur T1 NotSupported Aucun T1Aucun Supports Aucun T1 Never Aucun T1erreur

18 18 Modèles de transaction Il existe deux modèles transactions Flat transactions ou transactions à plat Supportées par les EJBs Nested transactions ou transactions imbriquées Non supportées par les EJBs pour le moment…

19 19 Flat Transactions Modèle le plus simple. Après qu'une transaction ait démarré, on effectue des opérations… Si toutes les opérations sont ok, la transaction est confirmée (commited), sinon elle échoue (aborted) En cas de commit, les opérations sont validées (permanent changes) En cas d'abort, les opérations sont annulées (rolledback). L'application est également prévenue…

20 20 Transactions Imbriquées Cas simple : on veut faire un tour du monde 1. Notre application achète un billet davion de Tunis à Paris, 2. Puis un billet d'avion de Paris à Londres, 3. Puis un billet d'avion de Londres à New-York, 4. L'application s'aperçoit qu'il n'y a plus de billet d'avion disponible ce jour-là pour New-York… Tout échoue et on annule toutes les réservations ! Avec un modèle de transactions imbriquée, une transaction peut inclure une autre transaction.

21 21 Problèmes résolus par les transactions Un transaction est une série d'opérations qui apparaissent sous la forme d'une large opération atomique. Soit la transaction réussit, soit elle échoue. Les transactions s'accordent avec les pannes machines ou réseau. Répondent aux problèmes du partage de données.

22 22 Un peu de vocabulaire Objet ou composant transactionnel Un composant bancaire impliqué dans une transaction. Un EJB compte bancaire, un composant.NET, CORBA… Gestionnaire de transaction Celui qui en coulisse gère l'état de la transaction Ressource L'endroit où on lit et écrit les données : un DB, une queue de messages, autre… Gestionnaire de ressource Driver d'accès à une BD, à une queue de message… Implémentent l'interface X/Open XA, standard de facto pour la gestion de transactions…

23 23 Le transactionnel en J2EE Transaction gérée par le conteneur Transaction gérée par le bean JTA(Java Transaction API) JTS(Java Transaction Service) Transaction JDBC vs Transaction JTA Récapitulatif

24 24 Transaction gérée par le Conteneur Le conteneur EJB définit les frontières de la transaction. On peut utiliser les transactions gérées par le conteneur avec nimporte quel type de Bean entreprise: -session -entité -message Les transactions gérées par le conteneur simplifient le développement : Le code du Bean ninclut pas des instructions qui délimitent le début et la fin de la transaction.

25 25 Transaction gérée par le Conteneur Le conteneur commence la transaction immédiatement avant que la méthode du Bean entreprise démarre et la termine juste avant la sortie de la méthode. Chaque méthode peut être associée à une transaction unique. Les transactions imbriqués ou multiples sont interdites au sein dune méthode. Les transactions gérées par le conteneur ne requièrent pas que toutes les méthodes soient associées avec des transactions. En déployant le Bean, on doit indiquer quel méthode est associée avec les transactions en spécifiant les attributs de la transaction.

26 26 Attribut de la transaction … BankBean BankHome Bank BankBean Stateful Container … BankBean Remote getCheckingBalance Required … Ejb-jar.xml

27 27 Annulation dune transaction gérée par le conteneur Il existe deux manières pour annuler une transaction gérée par le conteneur: Si une exception système est levée, le conteneur annule automatiquement la transaction. En invoquant la méthode setRollbackOnly de linterface EJBContext. Si le Bean lève une exception dapplication, lannulation nest pas automatique mais peut être initialisé par la méthode setRollbackOnly.

28 28 Annulation dune transaction gérée par le conteneur public void transferToSaving(double amount) throws InsufficientBalanceException { checkingBalance -= amount; savingBalance += amount; try { updateChecking(checkingBalance); if (checkingBalance < 0.00) { context.setRollbackOnly(); throw new InsufficientBalanceException(); } updateSaving(savingBalance); } catch (SQLException ex) { throw new EJBException ("Transaction failed due to SQLException: " + ex.getMessage()); } Si une balance négative est détectée transfertToSaving invoque setRollbackOnly et lève une exception dapplication (InsufficientBalanceException ). Si la mise à jour échoue, ces méthodes lèvent une exception SQLException et la méthode transfertToSaving lève lexception EJBException.

29 29 Annulation dune transaction gérée par le conteneur Lorsque le conteneur annule une transaction, il annule tous les changements effectués sur les données par les appels SQL au sein de la transaction. le conteneur annule les variables dinstance affectées par un Bean entité(invocation de la méthode EJBLoad). Pour un Bean session, le reset des variables dinstance, modifiées par la transaction, doit être fait explicitement. Implémentation de linterface SessionSynchronization.

30 30 Synchroniser les variables dinstance dun Bean session public void afterBegin() { System.out.println("afterBegin()"); try { checkingBalance = selectChecking(); savingBalance = selectSaving(); } catch (SQLException ex) { throw new EJBException("afterBegin Exception: " +ex.getMessage()); }

31 31 Synchroniser les variables dinstance dun Bean session public void afterCompletion(boolean committed) { System.out.println("afterCompletion: " + committed); if (committed == false) { try { checkingBalance = selectChecking(); savingBalance = selectSaving(); } catch (SQLException ex) { throw new EJBException("afterCompletion SQLException: " + ex.getMessage()); }

32 32 Transaction gérée par le Bean Dans une transaction gérée par le Bean, cest le Bean(session ou message) qui marque explicitement les frontières de la transaction. Un Bean entité ne peut pas gérée une transaction, cest le conteneur qui sencharge. Une transaction gérée par le Bean peut être - Une transaction JDBC - Une transaction JTA

33 33 JDBC Transaction Une transaction JDBC est contrôlée par le gestionnaire de transaction du DBMS. Pour coder une transaction JDBC, on invoque les méthodes commit et rollback de linterface java.sql.Connection La transaction démarre avec la première instruction sql qui suit la plus récente commande commit,rollback ou connect.

34 34 JDBC Transaction public void ship (String productId, String orderId, int quantity) { try { makeConnection(); // annule la validation requête par requête con.setAutoCommit(false); updateOrderItem(productId, orderId); updateInventory(productId, quantity); //valider toutes les requêtes si succès des mises à jour con.commit(); } catch (Exception ex) { try { //annuler toutes les requêtes con.rollback(); throw new EJBException("Transaction failed: " + ex.getMessage()); } catch (SQLException sqx) { //si le rollback échoue une exception EJB est levée throw new EJBException("Rollback failed: " + sqx.getMessage()); } } finally { releaseConnection(); } }

35 35 JTA transaction JTA est labréviation de Java Transaction API. Cette API permet de délimiter les transactions de manière à les rendre indépendante de limplémentation du gestionnaire de transaction. Le serveur dapplication implémente le gestionnaire de transaction avec le Java Transaction Service, mais les méthodes JTS sont appelées indirectement. les méthodes JTA invoquent les procédures bas niveau JTS. Une transaction JTA est contrôlée par le gestionnaire de transaction J2EE. Le gestionnaire de transaction J2EE ne supporte pas les transactions imbriquées.

36 36 JTA transaction JTA permet au programmeur de contrôler la gestion de transaction dans une logique métier. Il pourra faire les begin, commit, rollback, etc… Il peut utiliser JTA dans des EJB mais aussi dans n'importe quelle application cliente. JTA se compose de deux interfaces distinctes.

37 37 JTA : deux interfaces Une pour les gestionnaires de ressources X/Open XA Une pour le programmeur désirant contrôler les transactions : javax.transaction.UserTransaction

38 38 L'interface javax.transaction.UserTransaction

39 39 JTA Transaction JTA permet la mise à jour de bases de données multiples dans la même transaction. Le gestionnaire de transaction sassure que toutes les bases de données sont misent à jour au cours de la même transaction. Mise à jour de bases de données multiples.Mise à jour de bases de données multiples à travers deux serveurs J2EE différents.

40 40 JTS (Java Transaction Service) JTS spécifie limplémentation dun gestionnaire de transaction qui supporte: - La spécification JTA(haut niveau). - Limplémentation du mapping Java de lOMG Object Transaction Service OTS (bas niveau). JTS utilise les interfaces CORBA OTS pour linteropérabilité et la portabilité. JTS offre des méthodes pour démarrer,valider et annuler des transactions ainsi que les moyens de retrouver le contexte des transactions courantes.

41 41 JTS (Java Transaction Service) Les spécifications JTS sont destinés aux développeurs de gestionnaires de transaction et de serveurs dapplication avec le langage de programmation Java.

42 42 JTS (Java Transaction Service) Les services de transactions distribués dans Enterprise Java middleware font appel a cinq acteurs - Un gestionnaire de transaction(Transaction Manger): Il offre les services et les fonctions requises pour supporter les limites, la synchronisation et le contexte de propagation des transactions. -Un serveur dapplication: Il offre linfrastructure requise pour lenvironnement dexécution dune application. - Un gestionnaire de Ressource (Resource Manager): Exemple serveur de base de données.

43 43 JTS (Java Transaction Service) -Une application transactionnel basée sur les composants opèrant dans un serveur dapplication qui gère les transactions à travers une configuration déclarative dattributs. Exemple une application développée a base dEJB. - Un gestionnaire de ressources de communication(comminucation resource manager): Supporte la propagation du contexte de transaction et laccès aux services de transactions pour les requêtes entrantes et sortantes.

44 44 Interface privée qui permet linteraction entre le module JTA et limplémentation bas niveau OTS.

45 45 Le TellerBean Exemple import javax.transaction.*; public void withdrawCash(double amount) { UserTransaction ut = context.getUserTransaction(); try { ut.begin(); updateChecking(amount); machineBalance - = amount; insertMachine(machineBalance); ut.commit(); } catch (Exception ex) { try { ut.rollback(); } catch (SystemException syex) { throw new EJBException ("Rollback failed: " + syex.getMessage()); } throw new EJBException ("Transaction failed: " + ex.getMessage()); } Linvocation de begin et commit délimite les mises à jour de la base de données Si la mise à jour échoue, le code appelle la méthode rollback et lève une exception EJBException. Accès à JTS

46 46 JDBC vs JTA Transaction JDBCTransaction JTA Appelle linterface java.sql.Connection Appelle linterface javax.transaction.UserTransaction Auto validée à la fermeture de la connexion Validation explicite avec la commande commit Confiné à une seule base de données Permet la mise à jour de bases de données multiples

47 47 Récapitulatif EJB Entité CMP - Géré par le conteneur - Spécification des attributs de transaction appropriés dans le descripteur de déploiement. - En cas de rollback, restauration de létat initial grâce à la méthode ejbLoad(). BMP - Géré par le conteneur - Spécification des attributs de transaction appropriés dans le descripteur de déploiement. - En cas de rollback, les variables dinstance sont restaurés par le conteneur. EJB Session Géré par le Bean - Le développeur se charge de tous les aspects de la transaction. - Utilisation des transactions JDBC ou JTA. Géré par le Conteneur - Spécification des attributs de transaction appropriés dans le descripteur de déploiement - Le Bean implémente SessionSynchronisation pour avoir une notification de létat de la transaction en cours. - Le conteneur annule toute transaction JDBC dont la méthode a échoué.

48 48 Conclusion Les transactions sont une des bases fondamentale des applications entreprises Nécessité de savoir les orchestrées et les manipuler. Engouement mondial pour le commerce en ligne. Nécessité de la prise en charge des transactions imbriquées.

49 49 Bibliographie


Télécharger ppt "1 Le Transactionnel en J2EE JTA/JTS Réalisé par Jarraya Med Haythem Jaziri Med Naceur."

Présentations similaires


Annonces Google