Utilisation des EJB

Utilisation des EJB

Une fois les EJB déployés, ils sont utilisables en local ou à distance selon le type de client. Comme nous avons pu le  voir dans le chapitre sur JNDI, la principale difficulté est de retrouver l’objet dans le bon contexte JNDI. 1. Utilisation par une application Web Si  l’application Web est déployée dans le même  serveur que le module EJB, le  contexte  JNDI est le même.  Il  faut  toujours privilégier cette situation car les appels sont alors locaux. Comme nous avons pu le voir au chapitre Architecture de JBoss, le fichier jboss­web.xml de l’application web permet  de lier le nom JNDI global vers un nommage ENC local à l’application : cwc service ejb2/service-calculette/remote Le fichier web.xml déclare l’EJB et les classes utilisées : … service Session fr.editions.eni.jboss.chap3.ejb2.ServiceCalculetteHome fr.editions.eni.jboss.chap3.ejb2.ServiceCalculette Chap_3_-_EJB#Calculette Ensuite, la servlet peut récupérer l’instance : InitialContext initCtx = new InitialContext(); Context ctx = (Context)initCtx.lookup(« java:comp/env »); ServiceCalculetteHome home = (ServiceCalculetteHome)ctx.lookup(calculetteJNDI); Il est préférable d’utiliser des noms JNDI dans java:comp/env, plutôt que les noms JNDI globaux, pour des raisons de  facilité de maintenance. Si le nom global change, seul le fichier jboss­web.xlm est à maintenir. L’utilisation des annotations est aussi possible à partir de la version 6 de Tomcat. 2. Utilisation par une application non Web Pour les clients lourds, le principe de recherche reste le même. Il faut ajouter les bibliothèques JBoss adéquates. En  général, la librairie jbossall­client.jar suffit, vous la trouverez dans le répertoire client du répertoire d’installation de  JBoss. Ensuite, vous devez avoir un fichier jndi.properties adapté :enidentnumber- java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces Le code de recherche reste ensuite, le même : InitialContext ctx = new InitialContext(); ServiceCalculetteHome home = (ServiceCalculetteHome)ctx.lookup(« ejb2/service-calculette/remote »); Le contexte JNDI utilisé ici est évidemment le contexte global, car il est le seul à être accessible en dehors du serveur  JBoss.Pour  illustrer  le  besoin  et  le  mode  de  fonctionnement  des  transactions,  nous  allons  prendre  comme  exemple,  le  paiement (simplifié) d’un article sur site marchand. Les acteurs sont l’acheteur et le fournisseur. Lorsque l’acheteur paie son article, les tâches suivantes sont effectuées : 1. le compte de l’acheteur est débité du montant du prix de l’article ; 2. le compte du fournisseur est crédité du montant du prix de l’article ; 3. la quantité d’articles en stock est mise à jour. Le diagramme de séquence est le suivant : Le diagramme de séquence peut être codé de la manière suivante : … try { … compteAcheteur.debiter(article.getprix()); compteFournisseur.crediter(article.getPrix()); stock.decrementer(article); … } catch(Exception e) { // gestion de l’exception } … Ce code est peu sécurisé, il peut être amené à rencontrer plusieurs problèmes. Lors de la levée d’une exception sur les  opérations  debiter(…),  crediter(…)  ou  decrementer(…),  le  code  qui  suit  la  levée  de  l’exception  n’est  pas  exécuté. Que  se  passe­t­il  si  l’opération  qui  crédite  le  compte  du  fournisseur  échoue  ?  Le  compte  de  l’acheteur  a  déjà  été  débité, mais le processus ayant été interrompu, il ne recevra jamais sa marchandise. Nous voudrions donc, lors d’un problème, que toutes les opérations effectuées dans la méthode soient annulées ainsi  que les éventuelles modifications en base de données. Il  serait  possible  de  songer  à  gérer  par  programmation,  les  états  du  processus  et  d’annuler  les  opérations  si  nécessaire. Les bases de données sont, très certainement, sur des serveurs différents, la gestion de stock fait peutêtre partie d’une autre application. Des problèmes réseau, de protocole… seront peut­être à gérer. Le développeur va  devoir fournir un travail considérable pour gérer les annulations d’opérations, avec le risque important de fragiliser le  © ENI Editions – All rigths reserved – Kaiss Tag – 1 – enidentnumber-AAEAAAD/////AQAAAAAAAAAMAgAAAE1FTkkuRWRpdGlvbnMuTUVESUFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VOSS5FZGl0aW9ucy5NRURJQXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAA5MzczMzc5IC0gS2Fpc3MgVGFnIC0gZWNhNTA5YTUtMDdkMC00NDU1LTgzYjItZGFmOTViNjc0ZWMzlyREKKWRzIgLAA==-enidentnumber code, de le rendre illisible et peu maintenable. Heureusement, une solution s’offre à nous pour résoudre cette problématique, tout en conservant un code lisible et  surtout robuste. Ce sont les transactions.

Formation et coursTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *