Home

Télécharger

image

Contents

1. petstore ear lib H utility jar H ws interface jar entityjar Lig persistence xml M stateless jar H stateful jar petstore war RE 5 CS WEB INF L JF faces config xml L Gi web xml Figure 9 14 Contenu du fichier petstore ear AN Deploy undeploy Une fois les applications d ploy es a l aide des t ches dep oy on peut les supprimer du serveur GlassFish en utilisant les taches suivantes e yaps undeploy e barkbank undeploy e petex undep loy Fichier Edition Affichage Historique Marque pages Outils G 4 00 antonio goncalves ValidationService Web Service Tester This form will allow you to test your web service implementation WSDL File To invoke an operation fill the method parameter s input boxes and click on the button labeled with the method name Methods public abstract java lang String com barkbank validator Validation validateCard java lang String java lang String java lang String validateCard 123 _ iM kond oD Figure 9 15 Page permettant de tester le service de validation 257 9 changes B2B Les Cahiers du Programmeur Java EE 5 REMARQUE Le message Soap La page de r sultat du service web affiche aussi la requ te et la r ponse de la m thode au format Soap Cela permet de voir ce qui est cr automati quement sans que nous n ayons eu a manipuler les messages Soap directement Figure 9 16
2. FirstName Bill LastName Gates Date of birth 160271965 Address Delivery Address Total 242 0 Street 1 27 West Side Street 1 27 West Side Street2 Story Street Story Credit card City Alhahama City Alhabarna Number 1234 TX State TX Type visa 8401 Zipcode 8401 Expiry date 01 09 SA Country USA Find Update Delete Reset Figure 10 7 Application Swing recevant les messages 285 Les Cahiers du Programmeur Java EE 5 amp E com E E yaps Gy petstore E client E entity EJ exception Ga jsf E mdb email L a EmailSenderBean E print L fa OrderPrinterBean EJ stateful E stateless E util Figure 10 8 Message driven beans 286 lt lt boundary gt gt PetstoreF rame lt lt Delegate gt gt Catalog elegate lt lt Delegate gt gt CustomerD elegate lt lt Delegate gt gt OrderD elegate lt lt utility gt gt ServiceLocator lt lt com ponent gt gt EmailS enderBean Paquetages des MDB Les classes des message driven beans impression et envoi de mail sont plac es dans le sous paquetages de com yaps petstore mdb Pour le lis tener c t client les classes se trouvent essentiellement dans le paque tage com yaps petstore client util jms Architecture L architecture globale contient maintenant les message driven beans Ils sont repr sent s comme des composants qui exposent une interface MessageListener coutant sur une destination JMS Comme il ny a pas d
3. E Lists all the items od A m Identmer 23 10 Name Unit Cost Product Marre 37 Female Adult ann Finch Mame Fermate Adun 30 Female Adult 1700 Amazon Parat Unit Cost yu U 2A Ferale Adult 1200 Manz mage Path eal2 jpy 23 Fernale Adult 1500 lguarra Product Persian 71 Fernale Adult 200 Ralllesnake Figure 6 8 create View Update Create Delicte Gestion du catalogue utilisant des combobox Pet Store Hie Customer Catalog Order Look amp tecl C order 1 Read onty Order 1 Read only identmer 1 ID item Quantity Sub total Order date 1505 2006 ea i ize Customer Female Puppy 5 160 0 ep pre Spotted Female Pup 10 320 0 Last Name Jobs Date af birth 30 11 1984 nas Dolvery Address Total 404 0 Street 1 154 Star Boulevard Street 1 154 Star Roulevard Stroat 2 Street 2 Creat card Cty San Francisca City San Francisco Nurnibuer 1234 648 78QN State Type Visa Zipcode Expiry date 09 09 Country F tists ait the orders Reset Date Customer Name 31 10 2006 Fleury Marc 28 08 2006 Gatos Bill Figure 6 9 Affiche les bons de commande et leur d tail 149 6 Ex cution de l application Les Cahiers du Programmeur Java EE 5 L SF com L 2 Sy yaps gt petstore 5 a7 client Ga delegate F amp CatalogDelegate ke fa CustomerDelegate amp OrderDelegate E locator 0 ServiceLocator
4. YAPS PetStore Confirm Order Mozilla Firefox DOR Lichier Edition Affichage Listorique Marquepoges Qutis 2 G Mrs antonio goncalves YAPS Pet Store Yet Another Pet Store Pets Confirm Order Birds Cats Personal information Dogs Firstname Antonio Fish Reptiles Lastname Goncalves Email antonio goncalves g Strect1 42 Glass Street Street2 City Oakland State LA Zipcode 8765 Country USA Credit Card Credit card number 123412341234 Type Visa v expiry date MM YY 01 09 Figure 9 6 confirmorder jsp Le clic sur Submit invoque le managed bean ShoppingCartController qui commence par utiliser le service web de validation des cartes Si les donn es sont valides alors il appelle la m thode createOrder de PEJB Stateless OrderBean Ce dernier rend les donn es persistantes en base de donn es puis appelle le service web de livraison de PetEx Oe 0 confrmorder jsp ShoppingCartController 1 confirmOrder 2 validateC ard 3 createOrder Appel du service web Validation a partir du managed bean public class ShoppingCartController WebServiceRef private ValidationService val idationService public String confirmOrder try validateCreditCard creditCard order orderBean createOrder customer deliveryAddress creditCard shoppingCartBean getCartItems shop
5. On referme la session et la connexion Figure 10 6 Diagramme de classes des message driven beans 280 private void publishOrder Order order Session session null try session connection createSession true Session AUTO_ACKNOWLEDGE MessageProducer producer session createProducer destinationOrder ObjectMessage objectMessage session createObjectMessageQ Set lt Category gt categories order getDistinctCategories for Category c categories objectMessage setBooleanProperty c getName true objectMessage setObject order producer send objectMessage catch JMSException e throw new EJBException e finally session close gestion des exceptions Les message driven beans Une fois le message JMS envoy les message driven beans qui sont l coute du Topic peuvent traiter le contenu du message mdb com yaps petstore Envoi d e mails Le MDB EmailSenderBean a pour r le d envoyer un e mail chaque r ception de messages Cet e mail destination du client r capitule le contenu de sa commande Voici un exemple Subject YAPS Confirmation Order 1002 Dear Paul Smith your order 1002 has been successfully placed Your shopping cart content is Goldfish female 2 Iguana male 5 Looking forward to serve you again The YAPS team Pour constituer cet e mail le MDB a besoin de connaitre le num ro du bon de commande
6. String endpointInterface default Cette annotation s applique a une classe Nom donn au service web mapp sur l l ment portType du WSDL Sp cifie le namespace XML utilis dans le WSDL URL d acc s au WSDL d finissant le service 241 9 changes B2B Les Cahiers du Programmeur Java EE 5 Cette annotation s applique une m thode Red finit le nom de la m thode Ne publie pas la m thode si excl ude true Valeur de l action Soap Cette annotation s applique une m thode 242 gt La m thode Si une classe est annot e par WebService alors par d faut toutes ses m thodes publiques peuvent tre appel es Si on veut restreindre cette r gle et ne publier que certaines m thodes on peut alors utiliser l anno tation javax jus WebMethod Celle ci permet aussi de modifier certains attributs par d faut Code de l annotation javax jws WebMethod package javax jws Target METHOD Retention RUNTIME public interface WebMethod String operationName default boolean exclude default false A String action default Une m thode qui n a pas de param tres de retour peut tre annot e par OneWay Code de l annotation javax jws Oneway package javax jws TargetC METHOD Retention RUNTIME public interface Oneway L exemple suivant red finit le nom de la m thode en Deliver au lieu de deliverItems et comme el
7. Figure 3 12 Affichage des resources JMS dans la console d administration 59 3 Outils et installation Les Cahiers du Programmeur Java EE 5 Figure 3 13 Affichage des loggers 60 en criticit Finest Vous pouvez aussi utiliser la console d administration http localhost 8282 Pour ce faire naviguez dans l arborescence du menu de droite et d ployez les n uds Resources JMS Resources Vous verrez les deux sous menus Connection Factories contenant la fabrique jms petstoreConnectionFactory et Destination Resources contenant la file d attente jms topic order voir figure 3 12 page pr c dente Cr ation de loggers Pour nous aider d boguer l application ou suivre l enchainement de m thodes travers les couches nous utiliserons PAPI de logging de Java Pour cela il nous faut cr er diff rents loggers pour pouvoir con sulter les traces dans la console de GlassFish Tableau 3 1 Loggers Nom du logger Remarques com yaps petstore Traces de l application YAPS Pet Store com barkbank validator Traces du service web de validation de carte bancaire de BarkBank com petex transport Traces du service web du transporteur PetEx sun Java System Application Server Enterprise Edition 9 1 Admin Console Mozilla Firefox Dicher Edition Affichage Historique Marque pages Qutis 2 C es Home Version Logout Help User user name Rolc uscr name Server scrver n
8. RAPPEL CRUD Op rations de base pour la persistance Le terme CRUD signifie en anglais Create Retrieve ou Read Update Delete c est dire la cr ation la lecture la mise a jour et la suppression de donn es REMARQUE EJB ou stateless bean Le sigle EJB signifie Enterprise Java Bean et cor respond aux diff rents composants de la plate forme Java EE Ce terme g n rique englobe les Stateless beans qui peuvent tre appel s EJB state less stateless beans ou stateless session beans 104 Les entity beans tudi s au chapitre pr c dent offrent un mod le de per sistance objet Ils encapsulent les donn es et leur mapping relationnel grace aux annotations JPA tout comme ils d crivent des m thodes m tier qui leur sont propres En revanche les entity beans ne sont pas faits pour repr senter les taches complexes qui n cessiteraient une inter action avec d autres objets persistants Ce n est pas la couche appropri e pour ce type de traitements De la m me mani re l interface utilisateur ne doit pas comporter de logique m tier surtout lorsqu on multiplie le nombre d interfaces Web et Swing ce qui nous pousserait dupliquer du code Pour d corr ler les objets persistants de la couche de pr senta tion nous utilisons une couche de traitements m tier impl ment e sous forme de stateless beans Cette couche de traitements va agir comme un chef d orchestre Elle effectue des op ration
9. bird1 jpa F Lists all the products Name Description Cate azan Parrot Great companion for up tn 75 Riris gelfish Saltwater fish from Australia Fish Product Bulldog Friendly dog from Cngland Dogs Chihuahua Greal cumpanion dog Duys i 15 Dalmation Great dog tor a tire station Dogs Finch Golden Retriever Great family dog Dogs Great stress reliever Birds Amazon Parrot Goldfish Great companion for up to 75 years Freshwater fish from China Fish Friendly green friend Reptiles Catequry Id 5 Labrador Reti Freshwater fish from Japan Fish Category Na Great hunting dog Dogs 3 Manx Great for reducing mouse po Cats 14 Persian Friendly house cat doubles Cats rna F Lists all the cateyuries Create View Update Category ID Name Description Birds Any of the class Aves of warm blooded egg laying feathered verteb Cats Small camivorous mammal domesticated since early times as a ca Birds Fish Gags domesticated camivoraus mammal related to the faxes and walve of numerous cold blooded aquatic vertebrates characteristically ha feathered vertebrates with forelimbs modified to form wings Reptiles of various cold blooded usually egg laying vertebrates such as find Create view Update
10. Afficher le d tail d un article S lectionne une cat gorie des articles du catalogue Maquettes Les internautes et les clients visualisent le contenu du catalogue partir de leur navigateur Sur la colonne de gauche sont affich es les cing cat gories d animaux domestiques vendus par la soci t YAPS En cliquant sur la cat gorie Dogs chiens linternaute est redirig vers une page qui affiche les produits de cette cat gorie Pour chaque produit on affiche son nom et sa description figure 1 5 En cliquant sur le produit Bulldog linternaute est redirig vers la liste des articles Dans l exemple ci apr s ce produit poss de deux articles un m le et une femelle Pour chaque article on affiche son nom et son prix figure 1 6 UML Diagramme d activit s UML permet de repr senter graphiquement le comportement d une m thode ou le d roulement d un cas d utilisation l aide de diagrammes d activit s Ce type de diagramme est utilis pour repr senter des aspects dynamiques d un syst me un niveau assez g n ral Il est compos d un n ud initial repr sent par un point noir d acti vit s li es entre elles par des v nements puis se termine par un n ud final un rond noir entour Diagramme d activit s de la visualisation 1 Pr sentation de l tude de cas Les Cahiers du Programmeur Java EE 5 YAPS PetStore Products Mozilla Firefox Fichier Edition Attichoge Aler M
11. deleteCustomer customer Customer void updateCustomer customer Customer address Address Customer findCustomers List lt Customer gt lt lt interface gt gt CustomerRemote gt createCustomer customer Customer homeAddress Address Custom er findC ustomer customerld Long Customer i i i ll ll Hel gue ll I 1 t deleteCustomer customer Customer void updateCustomer customer Customer homeAddress Address Customer findC ustomers List lt Customer gt La gestion du catalogue Les crans de la gestion du catalogue ressemblent ceux du client Une particularit tout de m me est noter l utilisation des combobox pour les relations 1 n En effet un produit tant rattach 4 une cat gorie on retrouve une liste de cat gories dans l cran du produit De m me pour les articles et les produits figure 6 8 Lors de la cr ation d une cat gorie le nom ainsi que la descrip tion sont obligatoires La validation de ses informations est faite par l entity bean Category avant qu il ne persiste ses donn es c est dire dans une m thode annot e par PrePersist PrePersist PreUpdate private void validateData if name null equals name throw new ValidationException Invalid name if description null equals description throw new ValidationException Invalid description Si l on essaie de cr er une cat gorie sans nom l
12. equals country throw new ValidationException Invalid country constructeurs accesseurs m thodes hashcode equals et toString Cette m thode m tier v rifie que le mot de passe pass en param tre est valide et qu il est identique celui stock dans la base de don n es Entity bean Address rendant persistantes ses donn es dans la table t_address Une adresse est compos e d un identifiant uni que de deux attributs pour stocker la rue d une ville d un tat d un code postal et d un pays Avant d ins rer ou de mettre jour les donn es en base cette m thode est appel e Elle permet de valider les attributs de l entity bean et renvoie une exception en cas d incoh rence 95 4 Objets persistants Les Cahiers du Programmeur Java EE 5 UML St r otypes En UML les st r otypes permettent de cr er de nouveaux l ments de mod lisation Ils sont repr sent s soit par un graphique comme l acteur dans les cas d utilisation soit entre guillemets Dans nos diagrammes de classes les entity beans sont st r otyp s lt lt entity gt gt Figure 4 6 Diagramme de classes du bon de commande 96 Le bon de commande Lorsque le client ach te des animaux de compagnie un bon de com mande est automatiquement cr par le syst me Un bon de commande Order est constitu de lignes de commandes OrderLine Il fait r f rence au client qui a pass la comma
13. YAPS Pet Store Yet Another Pet Store Pets Confirm Order Birds Cats Dogs Fish Reptiles Account Cart Signoff Firstname Antonio Lastname Goncalves Email antonio goncalves g Dclivery Address Street1 42 Glass Street Street2 City Oakland state LA Zipcode 8765 _ Country USA Credit Card Credit card number 123412341234 Type Visa v Expiry date MM YY 01 09 Figure 8 8 La page confimorder jsp permet la saisie des informations de livraison Extrait du fichier faces config xml 8 Gestion du panier lectronique lt managed bean gt 4 Le managed bean AccountController a lt managed bean name gt account lt managed bean name gt comme alias account lt managed bean class gt com yaps petstore jsf AccountController lt managed bean class gt lt managed bean scope gt session lt managed bean scope gt lt managed bean gt lt managed bean gt lt managed bean name gt cart lt managed bean name gt lt managed bean class gt com yaps petstore jsf ShoppingCartController lt managed bean class gt lt managed bean scope gt session lt managed bean scope gt 229 Les Cahiers du Programmeur Java EE 5 L attribut customer du managed bean gt lt managed property gt ShoppingCartController est initialis lt property name gt customer lt property name gt avec account customer c est dir
14. em persist order publishOrder order return order ARCHITECTURE Le couplage l che La logique m tier pour cr er un bon de commande a consid rablement chang entre sa premi re impl mentation et maintenant La couche de stateless bean a t r guli rement mise jour mais pas les clients C est un des avantages d avoir un couplage l che entre les couches une partie du syst me peut tre mise jour sans en impacter une autre Injection de la fabrique de connexions et du Topic d clar s dans GlassFish Gr ce aux annotations de callback on cr e une connexion au provider JMS l instanciation du stateless bean Lorsque le stateless bean est supprim de la m moire on lib re les ressources JMS en cl tu rant la connexion l aide de l entity manager on persiste l entity bean bon de commande ainsi que ses lignes de commande On envoie un message dans le Topic 279 10 Traitements asynchrones Les Cahiers du Programmeur Java EE 5 On cr e une session JMS avec un acquittement automatique des messages On cr e un MessageProducer qui dans notre cas sera un TopicPublisher On cr e un message de type objet Dans les propri t s du message on rajoute les cat gories que l on trouve dans le bon de com mande chiens chats reptiles etc On affecte au corps du message l entity bon de commande Le message est envoy dans le Topic
15. gt http java sun com javaee 5 docs tutorial doc MDB Impl menter MessageListener La sp cification Java EE5 est assez vague sur l obligation d impl menter l interface Message Listener ou non Dans un chapitre on nous dit qu il n est pas n cessaire pour un MDB de l impl menter et dans un autre on nous dit presque le contraire Avec l impl mentation GlassFish pour qu un MDB soit reconnu comme tel il lui faut juste utiliser l annotation MessageDriven Pas besoin d impl menter une quelconque interface J ai n anmoins laiss cette interface dans les exemples de code de ce chapitre Un MDB est d fini comme tel gr ce l annota tion MessageDriven Point d entr e du MDB On transtype le message en ObjectMessage On r cup re le bon de commande qui se trouve dans le corps du message 272 Message driven bean Un message driven bean o MDB est un EJB qui se comporte comme un listener JMS c est dire qui re oit des messages et les traite de mani re asynchrone Les MDB se rapprochent des EJB Stateless car ils sont eux aussi sans tat Ils s ex cutent l int rieur d un conteneur qui assure le multithreading la s curit ou la gestion des transactions Les MDB sont l coute listener d une file d attente et se r veillent chaque arriv e de messages En fait il faut garder l esprit que c est le conteneur qui est le v ritable listener JMS et q
16. throw new ValidationException Invalid description constructeurs accesseurs m thodes hashcode equals et toString Article Chaque produit est subdivis en articles Le produit chat Siamois com porte donc les articles suivants adulte m le et adulte femelle L article est l l ment qu il est possible d acheter dans le catalogue de la soci t YAPS Un client peut donc rajouter ces articles dans son panier et les acheter Un article a un prix unitaire et poss de un lien bidirectionnel avec son produit Code de l entity bean Item package com yaps petstore entity catalog Entity Table name t_item public class Item implements Serializable Id GeneratedValue strategy GenerationType AUTO private Long id Column nullable false length 30 private String name Column name unit_cost nullable false private Float unitCost Column name image_path private String imagePath ManyToOne fetch FetchType EAGER JoinColumn name product_fk nullable false private Product product PrePersist PreUpdate private void validateData if name null equals name throw new ValidationException Invalid name constructeurs accesseurs m thodes hashcode equals et toString Le client Les cas d utilisation nous ont donn plusieurs informations sur la gestion des clients ce qui nous permet d extraire le diagramme de classes sui
17. 10 getFirstname 11 getLastname F Customer 4 Read only Customer 4 Read only Identifier First Name Last Name Age Telephone Email Login Address Street 1 Street 2 City State Zipcode Country 4 Antonio Goncalves Date of birth 29 05 1971 35 487 487 21 antonio goncalves gmail com Identification antoncal Password 42 Glass Street Oakland LA Find Create Update Delete a cusom er 8 findCustomer Figure 6 3 cran d affichage des donn es d un client 145 6 Ex cution de l application Les Cahiers du Programmeur Java EE 5 REMARQUE Look amp Feel Swing Swing peut prendre diff rents aspects graphiques Windows Metal ou Motif dans notre exemple mais il en existe bien d autres selon la plate forme et les licences gt http Awww javootoo com Figure 6 4 Menu principal Comme nous l avons vu pr c demment les entity beans peuvent se d tacher de l entity manager et devenir de simples Pojo sans persistance C est ce qui se passe lorsque l cran Swing manipule l objet Customer pour en afficher les donn es Par contre pour pouvoir traverser le r seau cette classe doit impl menter l interface Serializable L avantage de ce d coupage en couche r side dans le fait que l applica tion cliente ne connait pas la logique m tier qui se cache de
18. 113 5 Traitements m tier Les Cahiers du Programmeur Java EE 5 114 Rechercher un entity bean par son identifiant Pour rechercher un entity bean par son identifiant on utilise la m thode EntityManager findO Cette m thode prend en param tre la classe de l entity bean ainsi que son identifiant et retourne un entity bean Si celui ci n est pas trouv la m thode find retourne la valeur nu11 Exemple de recherche d un objet apr s cr ation Customer customer new Customer customer setId 1234 customer setFirstname Paul customer setLastname Dupond em persist customer customer em find Customer class 1234 1 Pour rechercher un client le stateless bean doit d clarer une m thode findCustomer dans notre exemple qui prend en param tre un identi fiant et retourne un entity bean cette valeur de retour peut tre gale nu11 si l objet n est pas trouv La recherche s effectue via l appel de la m thode find de l entity manager Recherche d un client dans un stateless bean public Customer findCustomer Long customerId Customer customer em find Customer class customerld O return customer Rattacher un entity bean Si vous vous reportez au cycle de vie des entity beans que nous avons d crit dans le pr c dent chapitre vous verrez qu un entity bean peut tre attach manag ou d tach Lorsqu il est manipul par une application graphique par
19. 69 Cl primaire 71 Colonne 72 Annotations avanc es 74 Date et heure 74 Donn es non persist es 74 Englober deux objets dans une seule table 75 Relations 76 Jointures 76 Relation unidirectionnelle 1 1 77 Relation unidirectionnelle 0 1 79 Relation bidirectionnelle 1 n 80 Relation unidirectionnelle 1 n 83 Chargement d une association 84 Ordonner une association multiple 85 Cascade 86 Le cycle de vie d un entity bean 86 Les annotations de callback 87 Les entity beans de YAPS Pet Store 88 XIV Le catalogue 89 Cat gorie 90 Produit 91 Article 92 Le client 93 Client 93 Adresse 95 Le bon de commande 96 Bon de commande 96 Ligne de commande 98 Carte de cr dit 99 Paquetages des entity beans 99 Sch ma de la base de donn es 100 En r sum 100 5 TRAITEMENTS M TIER 20 s2ceeeeesereseeeseeeeeeeesenenseeeees 103 Stateless session bean 104 Exemple de stateless bean 105 Comment d velopper un stateless bean 106 Les interfaces 106 Interface distante 107 Interface locale 108 La classe de PEJB 109 Entity manager 110 Contexte de persistance 111 Manipuler les entity beans 112 Persister un entity bean 113 Rechercher un entity bean par son identifiant 114 Rattacher un entity bean 114 Mettre jour un entity bean 115 Supprimer un entity bean 116 Langage de requ tes 116 JPQL 117 Effectuer des requ tes en JPQL 117 D ma
20. Class targetEntity default void class CascadeType cascade default FetchType fetch default FetchType EAGER boolean optional default true String mappedBy default Code de l annotation javax persistence JoinColumn package javax persistence Target TYPE METHOD FIELD Retention RUNTIME public interface JoinColumn String name default String referencedColumnName default boolean unique default false boolean nullable default true boolean insertable default true boolean updatable default true String columnDefinition default String tableQ default Voici le code DDL de la table t_order La cl trang re address_fk se trouve dans la table t_order et poss de une contrainte d int grit r f rentielle DDL de la table t_order avec cl trang re sur l adresse CREATE TABLE T_ORDER ID BIGINT NOT NULL ADDRESS_FK BIGINT NOT NULL PRIMARY KEY ID ALTER TABLE T_ORDER ADD CONSTRAINT T_ORDER_ADDRESS_FK FOREIGN KEY CADDRESS_FK REFERENCES T_ADDRESS ID 4 Contrainte d int grit Permet de contraindre la modification des donn es d une table afin que les donn es saisies dans la base soient conformes aux donn es attendues Dans le cas d une cl trang re l int grit r f rentielle s assure que la cl trang re existe dans la table r f renc e add constraint Relation unidirectionnelle 0 1 Une r
21. Delete Update Delete Figure 1 3 Application riche de gestion du catalogue Visualiser les articles du catalogue R sum Permet de visualiser le contenu du catalogue d animaux domestiques Acteurs Internaute client Description Les internautes et les clients peuvent visualiser la totalit du catalogue des animaux domestiques L organisation de l affichage doit tre intui tive c est dire que le syst me doit afficher la liste des cat gories partir desquelles le client choisit un produit puis un article Pour chaque article une image repr sentant l animal devra tre affich e tout moment il doit tre possible d afficher les produits d une cat gorie diff rente Diagramme d activit s Le diagramme d activit s ci apr s nous donne la repr sentation gra phique des actions effectu es pour visualiser le contenu du catalogue Il doit tre lu de la mani re suivante Le syst me affiche les cat gories du catalogue Lorsque linternaute en s lectionne une le syst me affiche les produits de la cat gorie Notez qu tout moment on peut revenir l action Afficher les produits de la cat gorie Afficher les cat gories S lectionne une cat gorie S lectionne une cat gorie V Afficher les produits de la cat gorie S lectionne un produit Afficher les artides du produit S lectionne un article Figure 1 4
22. Figure 8 1 P ostActivate Appel d une m thode m tier Cette annotation s applique une classe Nom de l EJB Par d faut le nom est celui de la classe Cet attribut repr sente le nom donn l EJB a l int rieur du conteneur Il est sp cifique cha que serveur d applications et peut donc ne pas tre portable Description du stateful session bean EJB Stateless vs Stateful Stateless pas de donn es internes peut tre par tag entre plusieurs clients pas de passivation est stock dans un pool Stateful conserve son tat sur une suite d appels d di a un seul client pas de pool utilise la pas sivation et l activation Cycle de vie d un stateful bean 217 8 Gestion du panier lectronique Les Cahiers du Programmeur Java EE 5 4 Activation et passivation Passivation si l EJB n est pas utilis le conteneur enregistre l tat du bean en m moire persistante disque base de donn es et l limine de la m moire Activation le conteneur r active l EJB et charge son tat depuis la m moire persistante II peut tre r utilis et invoqu par un client Le stateful bean utilise une liste d objet Linitialisation de la liste est faite apr s l instan ciation de l EJB par le conteneur L annotation PostConstruct intercepte cet v nement et effectue un new sur la liste la destruction de l EJB le conteneur appelle cet
23. Hibernate 32 67 154 222 HTML Hyper Text Markup Language 30 36 43 160 162 174 HTTP HyperText Transfer Protocol 36 160 164 184 HttpSession 184 196 214 I Idea Intellij XII 49 50 injection 179 265 J J2EE 29 32 315 J2SE 32 JAAS Java Authentication and Authorization Service 199 Java 26 annotation 27 autoboxing 26 checked exceptions 122 collections 80 constructeur par d faut 68 EE IX 31 49 289 315 g n rique 28 impression 283 passage par valeur et r f rence 106 Pet Store X 39 SE 26 threads 262 transient 74 types num r s 28 unchecked exceptions 122 Web Start 153 JavaMail 38 44 275 290 InternetAddress 277 message 276 MIME 276 session 276 SMTP 276 transport 277 JAXB Java Architecture for XML Binding 38 239 283 289 JAX RPC Java API for XML based Remote Procedure Call 239 289 JAX WS Java API for XML Based RPC 44 238 289 JBoss 49 315 JBoss Seam 186 JCP Java Community Process 31 JDBC Java Data Base Connectivity 29 44 66 Pet Store 25 pilotes 29 JDK 48 50 55 JDO Java Data Object 32 67 JEE 31 32 49 289 315 JMS Java Messaging Service IX 32 59 262 290 acquittement 270 destination 266 fabrique de connexions 265 int rop rabilit 274 message 263 corps 264 en t te 263 propri t s 264 280 MessageListener 269 272 objets administr s 265 point point 267 publication abonnement 267 s lection de messages 271 283 JNDI Java Naming and D
24. Interface web Les Cahiers du Programmeur Java EE 5 Figure 7 15 La page signon jsp permet l authentification YAPS PetStore Sign In Mozilla Firefox Fichier Edition Cats Dogs Fish Reptiles The YAPS Pet Store Demo is a tl fictional sample application Les clients qui ont d ja un compte saisissent leur login et leur mot de passe avant de se connecter Les clients qui n ont pas de compte doivent sai sir un login et deux fois le m me mot de passe 200 Affichage Historique Marque pages Outils 2 Q K antonio goncalves YAPS Pet Store EE gt gt Yet Another Pet Store Are you a returning customer Yes No I would like to sign up for an account Login Login Password Password Password Repeat Extrait de la page signon jsp Are you a returning customer Login lt h inputText value account login maxlength 10 size 12 gt Password lt h inputSecret value account password maxlength 10 size 12 gt lt h commandButton value Sign In action account doSignIn type submit gt No I would like to sign up for an account Login lt h inputText value account customer login maxlength 10 size 12 gt Password lt h inputSecret value account customer password maxlength 10 size 12 gt Password Repeat lt h inputSecret value account password2 maxlength
25. Java EE 5 EJB 3 0 JPA JSP JSF Web Services JMS GlassFish Ant Chez le m me diteur P RoGUES F VALL E UML 2 en action De l analyse des besoins la conception N 12104 4 dition 2007 382 p P Rogues UML 2 par la pratique N 12014 5 dition 2006 385 p G Poncon Best practices PHP 5 Les meilleures pratiques de d veloppement en PHP N 11676 2005 480 p H Bersini W ELLESZ L orient objet N 11538 2 dition 2004 600 p T LIMONCELLI adapt par S BLONDEEL Admin sys G rer son temps N 11957 2006 274 p P LEGAND S curiser enfin son PC Windows XP et Windows Vista N 12005 2007 500 p L Bloch C Wolfhugel S curit informatique Principes fondamentaux pour l administrateur syst me N 12021 2007 350 p B Marcelly L Godard Programmation OpenOffice org 2 Macros OOoBASIC et API N 11763 2006 700 p J DuBois J P RETAILLE T TEMPLIER Spring par la pratique Java J2EE Spring Hibernate Struts Ajax N 11710 2006 518 p T ZIADE Programmation Python N 11677 2006 530 p J BATTELLE trad D Ruerr S BLONDEEL La r volution Google N 11903 2006 280 p Collection Cahiers du programmeur Swing E Puysaret N 12019 2007 500 p Java 1 4 et 5 0 E Puysarer N 11916 3 dition 2006 400 p J2EE J MoueRE N 11574 2 dition 2005 Java XML R Fleury N 11316 2004 UL J PROTZ
26. RecipientType CC copie conforme RecipientType BCC copie cach e 276 le serveur de messagerie Les applications d velopp es avec JavaMail peuvent tre ainsi comparables aux diff rentes messageries que l on ren contre telles que Outlook Lotus Eudora etc Cette API propose donc des m thodes pour lire ou envoyer des e mails rechercher un message etc Les classes et interfaces de cette API sont regroup es dans le paque tage javax mail Dans notre application nous utiliserons le cas simple d un envoi d e mail par SMTP Pour cet exemple nous nutiliserons pas toute la panoplie des classes et interfaces de PAPI mais juste les principales c est dire Session Message Transport et InternetAddress La classe Session la mani re de JMS JavaMail poss de une classe javax mail Session qui tablit la connexion avec le serveur de messagerie C est elle qui encap sule les donn es li es la connexion options de configuration login pas sword nom du serveur et partir de laquelle les actions sont r alis es Cr ation d une session JavaMail Properties properties new Properties properties put mail smtp host smtp free fr properties put mail smtp auth true Session session Session getInstance properties null Q Pour cr er une session on utilise la m thode getInstance laquelle on passe les param tres d initialisation La classe Message La classe javax ma
27. chapitre Pet Store File Customer Catalog Order Look amp Feel List categories List products Manage category Manage product Manage item A Lists all the customers ID FirstName LastName Telephone Email Marc Fleury 545 123 45 mareq yhoss org Bill Gates 654 046 12 bill gatesgmicros Steve Jobs 548 157 15 steve jobs apple Antonio Goncatves 487 487 21 antonio goncates update Delete 6 Category Find or Cr vate Category Find or Create Country Update Ex cution de l application Les couches de persistance et de traitements m tier ont t d velopp es dans les pr c dents chapitres Il reste maintenant y acc der au travers d une application cliente Ce chapitre nous explique comment compiler l application YAPS Pet Store la packager et la d ployer sur le serveur GlassFish L interface utilisateur Swing acc dera de mani re distante aux stateless beans en utilisant JNDI b US v IE E OE a Se SOMMAIRE Couche de pr sentation Client Swing Appel distant des stateless beans Business Delegate et Service Locator Compiler packager d ployer Ex cuter l application MOTS CL S Swing JNDI GlassFish D ploiement Ant Les Cahiers du Programmeur Java EE 5 APPROFONDIR Swing Le r le de ce livre n est pas de couvrir l API Swing Pour de plus amples informations reportez vous aux r f rences suivantes Creating a GUI with JFC Swing gt http java sun com doc
28. depends yaps prepare gt lt echo message Generates client artifacts for Bark Bank gt lt exec executable wsimport fai lonerror true gt lt arg line d yaps classes dir gt lt arg line keep gt lt arg line s yaps generated src dir gt lt arg line http server host server port barkbank ValidationService WSDL gt lt exec gt lt target gt G n re les artefacts serveur des services web de BarkBank et PetEx G n re les artefacts serveur du service web de BarkBank G n re les artefacts serveur du service web de PetEx G n re les artefacts client des services web de BarkBank et PetEx G n re les artefacts client du service web de BarkBank 299 B T ches Ant Les Cahiers du Programmeur Java EE 5 G n re les artefacts client du service web de lt target name petex generate client artifacts PetEx depends yaps prepare gt lt echo message Generates client artifacts for PetEx gt lt exec executable wsimport failonerror true gt lt arg line d yaps classes dir gt lt arg line keep gt lt arg line s yaps generated src dir gt lt arg line http server host server port petex DeliveryService WSDL gt lt exec gt lt target gt D ploiement des applications YAPS Pet Store gt lt target name deploy gt BarkBank et PetEx lt antcall target barkbank bui1d gt lt
29. est que lorsque JPA le prend en compte qu il devient manag Si on met jour l entity bean ou que l on parcourt ses relations vers d autres objets il reste manag Il se d tache lorsqu il se d place vers une autre couche par exemple et peut tre rattach donc manag son retour Lorsqu on supprime un entity bean il supprime ses donn es de la base avant de dispara tre de la m moire de la JVM Notez la pr sence de d clencheurs sur chaque transition PrePersist PreRemove etc Ces points d attache ou m thodes de callback sont appel s par JPA lorsque l entity bean change d tat P ostRemove Instanciation de l objet Supprim Prise en compte par JPA PrePersist PostPersist Suppression P reRemove S rialis vers une couche exterieure Retour d une couche externe Reprise en compte par JPA Manag Recherche d un objet existant PostLoad Figure 4 3 UML Diagramme d tats Ce diagramme sert repr senter des automates d tats finis sous forme de graphes d tats reli s par des arcs orient s qui d crivent les transitions Les diagrammes d tats permettent de d crire les changements d tats d un objet ou d un compo sant en r ponse aux interactions avec d autres objets ou avec des acteurs Cycle de vie d un entity bean Mise jour PreUpdate PostUpdate Les annotations de callback Gr ce aux annotations de c
30. face permet de cr er mettre jour et supprimer les entity beans de la base de donn es En EJB 3 les entity beans sont de simples Pojo et nimpl mentent aucune interface Il leur faut donc utiliser les services de la classe javax persistence EntityManager Dans JPA l entity manager est le service centralisant toutes les actions de persistance Les entity beans ne deviennent persistants que lorsqu on le pr cise explicitement dans le code au travers de l entity manager Celui ci fournit une API pour cr er rechercher mettre jour supprimer et synchroniser des objets avec la base de donn es Pour instancier un entity bean en m moire il faut utiliser le mot cl new Ensuite pour que les donn es soient stock es en base il faut utiliser la m thode persist de l entity manager Utilisation de l entity manager dans un stateless bean Stateless public class CustomerBean implements CustomerRemote PersistenceContext unitName petstorePU private EntityManager em public Customer createCustomer Customer customer Address homeAddress customer setHomeAddress homeAddress em persist customer return customer Lorsqu un entity bean est pris en compte par l entity manager on dit qu il est attach ou manag On peut alors effectuer des op rations de persis tance Lentity manager synchronise automatiquement l tat de l entity avec la base de donn es Lorsque l entity
31. le nom du client ainsi que son adresse e mail et le contenu de son panier lectronique Extrait du MDB EmailSenderBean MessageDriven mappedName jms topic order public class EmailSenderBean implements MessageListener private static final String SMTP_HOST smtp free fr private static final String USER yaps petstore private static final String PASSWORD yapspwd public void onMessage Message message try if message instanceof ObjectMessage ObjectMessage msg ObjectMessage message Order order Order msg getObjectQ sendEMail order catch JMSException e catch MessagingException e gestion des exceptions private void sendEMail Order order throws MessagingException Properties properties new Properties properties put mail smtp host SMTP_HOST properties put mail smtp auth true Session session Session getInstance properties null Message msg new MimeMessage session msg setFrom new InternetAddress no reply petstore org String email order getCustomer getEmail O msg setRecipients Message RecipientType TO InternetAddress parse email false msg setSentDate new Date msg setSubject YAPS Confirmation Order 1 order getId MDB l coute du Topic jms topic order Propri t s pour acc der au serveur de message rie La m thode onMessage est le point d entr e du message driven bea
32. localhost 8080 barkbank ValidationService WSDL private ValidationService validationService Code de l annotation javax xml ws WebServiceRef package javax xml ws Target METHOD FIELD Retention RUNTIME public interface WebServiceRef String name default String wsdiLocation default String mappedName default Class type default Object class Class valueQ default Object class La vision globale Rien ne vaut un sch ma pour claircir le m canisme d invocation d un service web class ShoppingCartController WebService WebServiceRef public class Validation ValidationService validationService WebMethod String validateCreditCard getValidationPort validateCard gt 6 1 3 4 ValidateCreditCard XML gt ValidateCreaitcara HTTP sot f ValidateCreditCardResponse g XML ValidateCreditCardResponse Artefacts clients ne ee manne ne C E E Client Service web Figure 9 3 Communication entre client et service web Pour que le client puisse invoquer le service web on annote par WebService la classe g n r e ValidationService On appelle ce service en lui passant le num ro de carte de cr dit le type et la date d expiration Ceci a pour effet d affecter ces donn es dans la classe ValidateCreditCard Gr ce aux annotations JAXB cette classe g n re un document XML qui peut alors transiter par
33. lt managed bean gt Revenons sur l extrait de code du managed bean CatalogController Pour appeler PEJB le managed bean peut utiliser son interface locale puisqu ils sont tous deux d ploy s dans le m me fichier ear Par contre le code n utilise pas l API JNDI pour retrouver l interface Une des nou veaut s de Java EE 5 est le syst me d injection Le code pr c dent d clare une interface locale et l annotation EJB en injecte la r f rence Linjection La plupart des applications ont besoin de ressources externes source de donn es interface d EJB file d attente JMS ou service web En J2EE 1 4 le client doit explicitement d clarer cette d pendance dans des descrip teurs de d ploiement XML et en obtenir une r f rence l aide de JNDI En Java EE 5 ces r f rences sont instanci es par le conteneur lui m me puis inject es dans les objets manag s Ce m canisme est appel injec tion en anglais Dependency Injection ou Inversion of Control IoC Cette injection de d pendance ne peut tre utilis e que par des objets pris en compte par le conteneur L application Swing tant distante et ex cut e en dehors d un conteneur client ACC elle ne peut pas utiliser ce m canisme d injection et doit avoir recours aux lookups JNDI Les managed beans quant eux s ex cutent l int rieur du conteneur web et peuvent donc utiliser le m ca nisme d injection JNDI est bien s r toujours
34. 2 a ServiceLocatorException La ui lag entity la exception Ou stateless Figure 6 10 Classes Swing Delegate et Locator lt lt boundary gt gt PetstoreFrame PS2 lt lt Delegate gt gt Catalog elegate _ amp lt lt Delegate gt gt QO lt lt com ponent gt gt g L gt lt lt entity gt gt en CustomerBean Customer EO CustomerD elegate Paquetages du client Swing Les classes de lapplication graphique sont plac es dans le paquetage com yaps petstore client Les classes Swing sont dans le sous paquetage ui les Business Delegate dans delegate et le Service Locator dans locator Architecture L architecture globale de l application est maintenant constitu e de trois couches principales l interface graphique la couche de traitements et les objets persistants Les crans Swing utilisent les Delegate et le Servi ceLocator pour acc der aux interfaces distantes des stateless beans Ces derniers manipulent les entity beans l aide de l entity manager es stateless lt lt entity gt gt lt lt entity gt gt lt lt com ponent gt gt 8 L H gt Category Product Local CatalogBean lt lt Delegate gt gt OrderD elegate Remote lt lt utility gt gt ServiceLocator PTE lookup JNDI Arborescence des r pertoires Les classes java sont d velopp es dans le r per toire src compil es dans classes et packa g es dans bui 1d E E Yaps H E build H O
35. CartItem cartItem cartItems total cartItem getSubTotal return total public void empty cartItems clearQ Cartltem L objet CartItem repr sente un l ment du panier En effet il fait r f rence l entity bean Item article ainsi qu la quantit achet e Le panier lectronique est constitu d une liste de CartItem public class CartItem private Item item private Integer quantity public Float getSubTotal return item getUnitCost quantity getters amp setters Paquetages du stateful bean L interface la classe du stateful bean ainsi que la classe CartItem se trou vent dans le paquetage com yaps petstore stateful Cette m thode supprime un article du panier Cette m thode additionne le prix de chaque arti cle pour retourner le prix total du panier Cette m thode vide le panier Simple objet Java sans annotation R f rence l entity bean Item ainsi que la quan tit achet e Cette m thode retourne le sous total prix uni taire d un article multipli par sa quantit SF com c ay yaps s a7 petstore 1 E client ii aJ entity P laJ exception i 21 jsf y stateful L D a Cartitem L a ShoppingCartBean L D ShoppingCartLocal E stateless Figure 8 3 Sous paquetage stateful 221 8 Gestion du panier lectronique Les Cahiers du Programmeur Java EE 5 222 Figure 8
36. Cette page est d coup e en deux parties Les clients qui ont d j un compte saisissent leur login et mot de passe dans la partie gauche Pour les autres ils peuvent se choisir un login et saisir deux fois le m me mot de passe Ils seront ensuite redirig s vers un formulaire leur demandant de compl ter les informations de leur compte client RETOUR D EXPERIENCE S authentifier un site Dans notre application nous n utilisons aucun m canisme sophistiqu pour g rer l authentification En effet on teste juste si le managed bean account se trouve dans la session HTTP ou non Tout site qui se respecte doit avoir une politique de s curit toute preuve En standard la sp cification des servlets introduit un m canisme d authentifica tion j_username j_password j_security_check S il ne vous convient pas vous pouvez aussi utiliser JAAS Java Authentication and Authorization Service ou un outil de Single Sign On SSO https opensso dev java net http java sun com products jaas Balise Core JSP permettant de faire un test Si le managed bean account ne se trouve pas dans la session HTTP cela signifie que le client n est pas connect On affiche alors le lien Sign On pour lui permettre de se connecter Sinon le client est d j authentifi Ce lien utilise la navigation statique pour acc der la page du compte client Lien permettant de se d connecter 199 7
37. Cr ation des r pertoires de travail des applica tions YAPS Pet Store Barkbank et PetEx Cr ation des r pertoires de travail de l applica tion YAPS Pet Store Cr ation des r pertoires de travail de l applica tion BarkBank 294 lt path id barkbank classpath gt lt pathelement location barkbank classes dir gt lt path gt lt path id petex classpath gt lt pathelement location petex classes dir gt lt path gt lt target name clean gt lt antcall target yaps clean gt lt antcall target barkbank clean gt lt antcall target petex clean gt lt target gt lt target name yaps clean gt lt echo message Cleans the Yaps environment gt lt delete dir yaps home classes gt lt delete dir yaps build dir gt lt target gt lt target name barkbank clean gt lt echo message Cleans the BarkBank environment gt lt delete dir barkbank home classes gt lt delete dir barkbank build dir gt lt delete dir barkbank generated src dir gt lt target gt lt target name petex clean gt lt echo message Cleans the PetEx environment gt lt delete dir petex home classes gt lt delete dir petex build dir gt lt delete dir petex generated src dir gt lt target gt lt target name prepare gt lt antcall target yaps prepare gt lt antcall target barkbank prepare gt lt antcall target petex prepare
38. Lorsque les clients valident leurs achats sur le site le syst me doit envoyer un e mail de confirmation imprimer un bon de commande et alerter les employ s des achats contenant des reptiles Tous ces traite ments se font de mani re asynchrone en utilisant JMS et les message driven beans petstore ear E lib H utility jar H ws interface jar Bentity jar LES persistence xml stateless jar k stateful jar amp mdb jar 3 petstore war C9 WEB INF L ffaces config xmi L 54 web xml Figure 10 10 Contenu du fichier petstore ear 287 10 Traitements asynchrones Sp cifications Java EE 5 Les sp cifications Java EE s accumulent ou se subdivisent Certaines disparaissent tandis que d autres naissent C est pourquoi chacune d entre elles poss de un num ro de version Pour s y retrouver plus ais ment les tableaux ci dessous dressent une liste exhaustive des sp cifica tions qui composent ce jour Java EE 5 Tableau A 1 Sp cifications Java Enterprise Edition 5 Sp cification Version JSR URL Java EE Java Platform Enterprise Edition 5 0 244 http jcp org en jsr detail id 244 Tableau A 2 Sp cifications Web Services Sp cification Version JSR URL JAX RPC Java APIs for XML based RPC 1 1 101 http jcp org en jsr detail id 101 JAX WS Java API for XML Based Web Services 2 0 224 http jcp org
39. Pet Store File Customer Catalog Order Look amp Feel C Lists all the orders og Number of it Total NH 0 2006 Floury Marc 2 E 28 08 2006 Gates Bill 3 1 1 fim 19 1 232006 Linbs Steve 103 1912 2006 Jobs Steve A Order 4 Read only oo Order 1 Read only Identifier 1 ID Hem Quantity Sub total Spotted 120 Order date 05 05 2006 Spotless 1 1 Customer Female Puppy 5 60 0 1 12 0 Spotted Female Puppy 0 320 0 FirstName Sleve LastName Jobs Date of birth 30 11 1964 Address Delivery Address Total 404 0 Street 1 154 Star Doulevard Street 2 Credit card Street 1 154 Star Boulevard Street 2 City San Francisco State WC Zipende 5454 Country USA City San Francisco Number 1234 5648 7890 WC Type visa Expiry date 09 09 Update Figure 8 12 Affichage du d tail d un bon de commande En r sum Dans ce chapitre nous avons enrichi l application web existante en y ajoutant un panier lectronique Cette nouvelle fonctionnalit permet aux clients d acheter en ligne des animaux domestiques Pour cela nous avons utilis les stateful session beans de Java EE 5 Les managed beans de JSF font l interm diaire entre la repr sentation graphique du panier JSP et son contenu EJB Stateful 232 chapitre YAPS PelSture Iens Muzilla Firefox Fichier Edition Affichage Historique Marque pages Outils YAP
40. Voici la DDL de la table des bons de commandes DDL de la table t_order contenant les attributs des deux entity bean CREATE TABLE T_ORDER ID BIGINT NOT NULL ORDER_DATE DATE CREDIT_CARD_TYPE VARCHAR 255 CREDIT_CARD_NUMBER VARCHAR 30 CREDIT_CARD_EXPIRY_DATE VARCHAR S5 PRIMARY KEY ID Relations Nous venons d tudier toutes sortes d annotations permettant de mapper une classe dans une table un attribut dans une colonne et changer cer taines valeurs par d faut Le monde de l orient objet regorge aussi de relations entre classes associations unidirectionnelles multiples h ri tages etc JPA permet de rendre persistante cette information de telle sorte qu une classe peut tre li e une autre dans un mod le relationnel Il existe plusieurs types d associations entre entity beans Tout d abord une association poss de un sens et peut tre unidirectionnelle ou bidirec tionnelle c est dire qu on peut naviguer d un objet vers un autre et inversement Ensuite cette association poss de une cardinalit c est dire que nous pouvons avoir des liens 0 1 1 1 1 n ou n m Nous ne d crirons pas toutes les combinaisons possibles d associations mais juste celles utilis es dans l application YAPS Pet Store Dans notre mod le les classes sont reli es entre elles par des associa tions Cette notion objet a son pendant dans le monde relationnel JPA est donc capable de mapper des asso
41. YapsPetstore yaps build lib entity jar lyaps build utility jar echo Creates the jar Building jar ility jar E YapsPetstore yaps build libNutility jar lyaps build ear echo Creates the PetStore Enterprise Application jar Building jar E YapsPetstore yaps build petstore ear lyaps build BUILD SUCCESSFUL 4 La variable classpath La variable classpath d finit les r pertoires o doit tre recherch le byte code et ou les sources des classes Java lors de la compilation et de l ex cution Figure 6 14 Ex cution de la t che yaps build 151 6 Ex cution de l application Les Cahiers du Programmeur Java EE 5 client C3 entity ES META INF L B MANIFEST MF Figure 6 15 Contenu du fichier petstore jar 4 Le fichier MANIFEST MF Dans l arborescence graphique du fichier petstore jar vous voyez appara tre un fichier MANIFEST MF Celui ci est indispensable aux fichiers d archive Pr sent dans le r pertoire META INF il peut contenir de nombreuses infor mations sous la forme cl valeur sur l archive et son contenu a petstore ear E ib B E utility jar entity jar fa persistence xml Q stateless jar Figure 6 16 Contenu du fichier petstore ear 4 Les fichiers d archive Il existe plusieurs types de fichiers d archive pour packager une application Java EE e les jar java archive pour les classes Java et les EJB e les war web
42. affiche le contenu du panier Extrait de la page showcart jsp lt taglib uri http java sun com jsf core prefix f gt lt taglib uri http java sun com jsf html prefix h gt lt f view gt lt c choose gt Utilisation de l Expression Language EL pour lt c when test empty sessionScope cart cartItems gt v rifier si le panier est vide The Shopping Cart is empty lt c when gt Si le Caddie n est pas vide on affiche son con lt c otherwise gt tenu lt h form gt Permet d it rer la liste des articles contenus dans gt lt h dataTable value cart cartItems var cartItem gt le panier 226 lt h outputText value cartItem item product name gt 4 lt h commandLink action catalog doFindItem gt 4 lt h outputText value 4 cartItem item name gt lt f param name itemId value cartItem item id gt lt h commandLink gt lt h commandLink action 4 cart updateQuantity gt lt h outputText value Update gt lt f param name itemId value cartItem item id gt lt h commandLink gt lt h inputText value 4 cartItem quantity gt 4 x lt h outputText value cartItem item unitCost gt lt h outputText value 4 cartItem subTotal gt lt h commandLink action cart removeltemFromCart gt 4 lt h outputText value Remove gt lt f param name itemId value cartItem item id gt lt h commandLink gt lt
43. alable tre authentifi Le menu Add to cart ajouter au panier s affichera alors en face de chaque article Un simple clic permet d ajouter un article dans le panier L internaute peut alors en modifier la quantit ou supprimer un article qu il ne souhaiterait plus Durant sa session le client peut tout moment visualiser le contenu de son panier en cliquant sur le menu Cart situ dans l en t te La navigation partir des pages affichant un article showi tems jsp et showi tem jsp il est possible de cliquer sur le lien Add to cart pour ajouter un article et consulter le contenu du panier showcart jsp Cette page se r affiche lorsque le client supprime un article du Caddie ou qu il en modifie la quantit Apr s validation de son panier en cliquant sur le lien Check Out le client est dirig vers une page confirmorder jsp lui deman dant de saisir l adresse de livraison ainsi que son num ro de carte ban caire En confirmant il est redirig vers une page r capitulant le contenu de son panier et l informant du num ro de bon de commande orderconfirmed jsp Comme nous l avons vu dans le pr c dent chapitre Interface web la navigation est d finie dans le fichier faces config xm1 Voici donc au format compr hensible par JSF l encha nement entre ces pages Extrait du faces config xml concernant la navigation lt navigation rule gt lt from view id gt showitems jsp lt from vi ew id
44. appel direct entre le stateless qui envoie les messages OrderBean et les MDB qui les re oivent le diagramme suivant ne fait pas appara tre de liaison ligne en pointill entre ces composants Notez que le client Swing est aussi l coute d une destination JMS lt lt entity gt gt lt lt entity gt gt lt lt entity gt gt Categ Product Item lt lt entity gt gt lt lt entity gt gt Customer Address lt lt entity gt gt OrderLine lt lt entity gt gt lt lt entity gt gt Order CreditCard lt lt control gt gt lt lt control gt gt AccourtCortroller CatalogController lt lt component gt gt OrderPrinterB ean Figure 10 9 Architecture avec les MDB Ex cuter l application Pour ex cuter l application il faut utiliser les m mes t ches Ant yaps clean yaps build et yaps deploy qui compileront packageront les classes et d ploieront les fichiers archives Les message driven beans sont d ploy s dans un fichier jar part mdb jar qui est inclus dans le petsto re ear Vous pouvez maintenant utiliser l application web pour acheter des ani maux domestiques Ceci aura pour cons quence d envoyer un e mail en utilisant votre serveur de messagerie et d afficher les informations du bon de commande dans les logs GlassFish Si vous achetez un reptile vous verrez l interface Swing recevoir un v nement En r sum Ce chapitre compl te le d veloppement de lapplication YAPS Pet Store
45. au travers des interfaces Home Local ou Remote alors que maintenant on utilise tout simplement l op rateur new Dans la version 2 x les possibi lit s du mapping O R taient limit es alors qu avec JPA on peut mainte nant mettre en ceuvre les notions d h ritage et de multitable les attributs d un objet peuvent tre stock s dans plus d une table JPA est une abstraction au dessus de JDBC et permet de s affranchir du langage SQL Toutes les classes et annotations de cette API se trouvent dans le paquetage javax persistence PERSISTANCE Hibernate Hibernate est un framework Open Source destin g rer la couche d acc s aux donn es Pour ceux d entre vous qui connaissent ce framework vous remarquerez que JPA s en est tr s fortement ins pir La grande nouveaut tant le syst me d annotations qui permet de se passer de fichiers de configuration XML fichier hbm dans hiber nate On peut retrouver ce m canisme en m lant Hibernate et xDoclet Depuis sa version 3 2 Hibernate est compatible JPA gt http www hibernate org gt http xdoclet sourceforge net EJB Les entity beans 2 x Pour vous faire une id e des modifications appor t es a la sp cification EJB retrouvez en annexe le code source d un entity bean 2 1 PERSISTANCE Impl mentations JPA Cet ouvrage utilise TopLink Essentials comme impl mentation de JPA mais il en existe d autres comme Hibernate Kodo ou OpenJPA Ch
46. d Oracle TopLink Essentials GlassFish est constitu e d un serveur web d di au service de fichiers c est dire des pages HTML statiques images vid os etc e dun conteneur de servlets h bergeant des applications compos es de servlets et ou JSP e d un conteneur d EJB pour la gestion des composants stateless sta teful MDB et entity beans e de l impl mentation de PAPI de persistance JPA d Oracle TopLink Essentials Comme nous le verrons l administration du serveur GlassFish se fait soit par interface web soit par ligne de commande GlassFish h bergera l application YAPS Pet Store ainsi que les services web des partenaires BarkBank et PetEx Derby Anciennement appel e Cloudscape cette base de donn es d velopp e en Java a t donn e a la fondation Apache par IBM De petite taille 2 Mo cette base de donn es relationnelle est int gr e au serveur Glass Fish Nous utiliserons Derby pour stocker les donn es de l application Environnement de d veloppement L environnement minimal pour d velopper application se compose dun JDK de Ant et d un simple diteur de texte Cependant il est important d avoir un outil int gr pour vous permettre d acc l rer vos d veloppements IDE ou Integrated Development Environment Vous pouvez ainsi utiliser Eclipse ou NetBeans en ce qui concerne les outils Open Source ou tout autre IDE de votre choix si vous en poss dez la l
47. es au protocole HTTP JBoss Seam offre de nombreuses facilit s pour le d veloppement d applications et se pr sente de plus en plus comme une alternative aux d veloppements web classiques gt http www jboss com products seam protocole HTTP sans tat bouton retour des navigateurs GRAPHISME Cascading Style Sheet L application utilise le fichier petstore css pour d finir tous les aspects graphiques couleurs polices de caract res etc 186 L application web YAPS Pet Store L application web YAPS Pet Store permet aux internautes de visualiser le catalogue et de rechercher des articles L internaute peut aussi se con necter en se cr ant un compte et devenir ainsi client de la soci t I peut alors mettre jour les donn es de son compte D corateurs Avant de nous concentrer sur les fonctionnalit s de l application web regardons son aspect graphique Toutes les pages sont construites de la m me mani re et utilisent les m mes l ments c est dire e un en t te header jspf qui affiche le logo et le nom de la soci t ainsi que des liens pour se connecter et se d connecter du site e sur la gauche une barre de navigation navigation jspf liste toutes les cat gories des produits e un bas de page footer jspf o se trouvent les logos des technolo gies utilis es Java GlassFish et Derby Au lieu de dupliquer ces l ments sur toutes les pages on les inclut a l aide de
48. et invoque les stateless beans pour conna tre les donn es du catalogue ou du client Le diagramme de classes suivant nous montre ces interactions jsf stateless com yaps petstore lt lt interface gt gt lt lt control gt gt gt Cataloglocal ShoppingCartController creditC ard Credi i i CreditC ard acintertece gt gt customer Customer gt Order I deliveryAddress Address Eg order Order additemT oC art String removeltemFromCart String updateQuantit y String State ful checkout String confirmOrder String lt lt interface gt gt gt ShoppingCartLocal Extrait du ShoppingCartController public class ShoppingCartController QEJB private ShoppingCartLocal shoppingCartBean GEIB private CatalogLocal catalogBean GEIB private OrderLocal orderBean private CreditCard creditCard new CreditCard private Order order private Customer customer 4 private Address deliveryAddress public String addItemToCart 4 Item item catalogBean findItem getParamId itemId shoppingCartBean addItem Ci tem return item added public String removeltemFromCart 4 Item item catalogBean findItem getParamId itemId shoppingCartBean removeltem i tem return null public String checkout 4 return cart checked out public String confirmOrder 4 order orderBean createOrder customer deliveryAddress creditCard shoppingCa
49. ger riche et lourd N avec les technologies du Web le client l ger d signe un poste utilisateur dont la fonction se limite interpr ter l affichage de pages web Le client riche se limite afficher les donn es mais en utilisant des API Java telles que Swing et n cessite un d ploiement Java Web Start Issu des architec tures client serveur le client lourd d signe un poste utilisateur en Swing par exemple effec tuant en plus de l affichage une part de traite ments m tier Il faut aussi mentionner les syst mes informatiques externes utilis s par la soci t YAPS e BarkBank YAPS d l gue la validation des cartes bancaires a la banque BarBank e PetEx la livraison des animaux est assur e par la soci t de transport PetEx Celle ci se rend l entrep t de YAPS charge les animaux dans ses camions puis les achemine chez les clients Les cas d utilisation Chaque cas d utilisation repr sent dans le diagramme pr c dent doit tre compl t d un texte explicatif Bien que le formalisme de ce texte ne soit pas sp cifi dans UML il poss de fr quemment les rubriques suivantes e Nom le plus souvent le nom contient un verbe l infinitif puisqu un cas d utilisation d crit une interaction entre un acteur et le syst me e R sum une br ve description du cas d utilisation e Acteurs cette rubrique d crit la liste des acteurs interagissant avec le cas d utilisation e Pr cond
50. gt 4 D ploiement de l application PetEx lt echo message Deploys the PetEx application gt lt exec executable asadmin gt lt arg line deploy gt B T ches Ant lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfi le gt lt arg line host server host gt lt arg line port server admin port gt lt arg line petex war gt lt exec gt lt target gt lt target name undeploy gt 4 Suppression des applications YAPS Pet Store lt antcall target yaps undeploy gt BarkBank et PetEx lt antcall target barkbank undeploy gt lt antcall target petex undeploy gt lt target gt lt target name yaps undeploy gt 4 Suppression de l application YAPS Pet Store lt echo message Undeploys the YAPS application gt lt exec executable asadmin gt lt arg line undeploy gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line application name gt lt exec gt lt target gt lt target name barkbank undeploy gt 4 Suppression de l application BarkBank lt echo message Undeploys the BarkBank application gt lt exec executable asadmin gt lt arg line undeploy gt lt
51. http en wikipedia org wiki Separation_of_concerns gt http Awww latece uqam ca publications mili kharraz mcheick pdf 165 7 Interface web Les Cahiers du Programmeur Java EE 5 166 Le langage d expression Avant de d crire JSTL il faut introduire le langage d expression utilis dans les JSP Le langage d expression ou Expression Langage EL permet de manipuler des donn es plus simplement qu avec les scriptlets lt gt Une expression est de la forme suivante exp La cha ne exp correspond l expression interpr ter Une expression peut tre compos e de plusieurs termes s par s par des points notation point e Ainsi pour acc der a la propri t name de notre entity bean Product on utilise la syntaxe suivante product name En fait ce n est pas l attribut name qui est appel mais la m thode getName puisque les accesseurs sont utilis s par introspection pour acc der aux propri t s d un objet Cette syntaxe remplace celle que nous avons vue pr c demment lt product getName gt JSTL En utilisant le design pattern MVC on s pare les traitements de la pr sentation c est dire le code Java du code HTML Cependant il est souvent n cessaire d effectuer de la logique d affichage Par exemple imaginons les cas de figures suivants si le client est connect alors j affiche un lien dans l en t te de ma page ou ta
52. il saisit son adresse de livraison ainsi que ses coordonn es bancaires le syst me cr e un nou veau bon de commande Au m me moment il envoie un e mail de con firmation au client lui d taillant le contenu de sa commande et imprime le bon de commande pour pouvoir tre archiv par le service comptable Limpression et l envoi de l e mail peuvent s av rer tre des traitements longs Imaginez que l imprimante soit d branch e qu elle manque de papier ou que l adresse e mail soit erron e ou le pare feu en panne Pour toutes ces raisons il est pr f rable d effectuer ces traitements de mani re asynchrone La cr ation du bon de commande dans le syst me peut se faire sans attendre que l impression soit effectu e Dans le m me esprit les employ s de YAPS doivent tre avertis en temps r el de la cr ation d un bon de commande contenant des reptiles Ces alertes se font par envoi de messages et sont affich es sur PIHM des employ s Si les employ s ne sont pas connect s leur application les alertes doivent tre empil es jusqu ce qu ils se reconnectent Ce chapitre couvre les fonctionnalit s restantes du cas d utilisation Cr er un bon de commande JMS JMS ou Java Messaging Service est une API d changes de messages pour permettre un dialogue entre applications via des brokers de mes sages ou MOM Middleware Oriented Messages L application cliente envoie un message dans une file d attente
53. lectronique Les Cahiers du Programmeur Java EE 5 Affiche le nom pr nom et adresse e mail du client en lecture seule Le formulaire de saisie de l adresse de livraison gt est pr initialis par l adresse de domiciliation du client voir fichier faces config xml Formulaire de saisie du moyen de paiement gt Le type de carte de cr dit est pr sent dans une gt combo box 228 lt h3 gt Personal information lt h3 gt lt h outputText value Firstname gt lt h inputText value 4 cart customer firstname readonly true gt lt h outputText value Lastname gt lt h inputText value cart customer lastname readonly true gt lt h outputText value Email gt lt h inputText value cart customer email readonly true gt lt h3 gt Delivery Address lt h3 gt lt h outputText value Street1 gt lt h inputText value 4 cart deliveryAddress street1 gt lt h outputText value Street2 gt lt h inputText value cart deliveryAddress street2 gt lt h outputText value City gt lt h inputText value 4 cart deliveryAddress city gt lt h outputText value State gt lt h inputText value cart deliveryAddress state gt lt h outputText value Zipcode gt lt h inputText value 4 cart deliveryAddress zipcode gt lt h outputText value Country gt lt h inputText value cart deliveryAddress country gt l
54. re est obligatoire la deuxi me optionnelle e pays de r sidence ville tat et code postal e date de naissance YAPS veut pouvoir envoyer des cartes de v ux la date d anniversaire du client e ge du client Une fois les donn es saisies employ souhaite pouvoir les exploiter Ainsi partir d un identifiant le syst me doit donner la possibilit d afficher les coordonn es du client et proposer l employ de les mettre 1 Pr sentation de l tude de cas Les Cahiers du Programmeur Java EE 5 UML Les exceptions dans les cas d utilisation Un cas d utilisation d crit le comportement normal de l application Si des exceptions apparaissent elles peuvent tre r f renc es dans la description l aide de num ros Dans notre cas il faut lire ces exceptions de la mani re suivante le client un identifiant unique si cette valeur n est pas unique une exception est lev e si cette valeur n est pas renseign e alors qu elle est obligatoire une exception est lev e RETOUR D EXP RIENCE Les maquettes Les maquettes d crans facilitent la compr hen sion des cas d utilisation Souvent non informati ciens les utilisateurs se rep rent facilement gr ce ce moyen visuel et peuvent ent riner les choix mis par l analyste Figure 1 2 Application riche de gestion des clients jour ou de les supprimer Dans le cas de la suppression le syst me
55. tout au long du dialogue Les donn es conserv es par le bean sont stock es dans les variables d instances Les donn es sont donc conserv es en m moire G n rale ment les m thodes propos es par le composant permettent de consulter et de mettre jour ces donn es Exemple d EJB Stateful Stateful public class MonBean Attribut conservant sa valeur private String monAttribut Le code m tier public void maMethodeQ return Message driven bean Les pr c dents types d Enterprise Java Beans offrent des services de mani re synchrone Le client met une requ te puis attend que l EJB lui envoie un r sultat Pour les message driven beans MDB le comportement est compl te ment diff rent Les clients n appellent pas directement des m thodes mais utilisent JMS pour produire un message et le publier dans une file d attente l autre bout le MDB est l coute de cette file d attente et se r veille l arriv e dun message Il extrait ce dernier de la file d attente en r cup re le contenu puis ex cute un traitement Le client na donc pas besoin de figer son ex cution durant le traitement du MDB Le traitement est asynchrone Exemple de MDB MessageDriven public class MonMDB implements MessageListener public void onMessage Message msg Traiter le message Entity bean Les stateful session beans sont d truits lorsque la session du client se ter
56. user_name Server server_name Sun Java System Application Server Admin Con private Long id A nullable fi 5 Common Tasks Common Tasks Appication Server private String name m x v lahia f General Settings Logging Monitor Diagn domain TB sotestens General Information Starting petstore domain for F Tool Glaesfi Starting Donain petsto plea ait Log redirected to F T Glasefish Glasef i Redirecting output to Tools Glasefish Gla Donain petstore is ready to receive client Donain petstore is running Sun Java Systen D D D tion and logs at F Toole Glassfich Glasefi D Connecto D D pihsisxe Mew Log Files Rotate Log JND Browser Wed Appi cover Transaction EJB Modu con Admin Console is available at http localho Heme locamest sane port 3282 for acadnin opu and gt Uffecycle HTTP Port s 262 8161 8080 LR itet 0m teca shoes Aco Cie NOP Portis 3700 3820 3920 owing web contex available 16 vebi adminconsule ervices J l Wed Services IVM epon Standard JMK Client like JConsule can conne 6 eg ervice jnx rni jndivrni test 8686 jnxrs Configuration Directory F Took Glassfisn Giass fsnV2030 d0m ain listens on at least following ports for Custom uBee 3 80 8181 8282 3700 3828 3928 8686 Inetalledt Verein Donain does not support application server clu gt Sun terre oror Em i i 1 User application gt available at th
57. 154 Star Boulevard Street 1 154 Star Boulevard Street 2 Street 2 Credit card City San Francisco Number 1234 5f48 TRAN State we Typo viga Zipcude 5455 Expiry date 09 09 EN Country USA City San Francisco State Zipcode E usts an tne orders ID Date Customer Name Number of it 34 10 2006 Fleury Marc 28 03 2006 Gates Bill Create View Update En r sum Dans ce chapitre nous avons pr sent l tude de cas de l application YAPS Pet Store ainsi que les acteurs qui l utilisent Le diagramme de cas d utilisation nous a permis de formaliser les besoins de mani re synth tique puis d expliciter chaque cas d utilisation de mani re textuelle Les diagrammes d activit s et les maquettes d crans sont venus claircir la dynamique de certains cas d utilisation Cette application sera con ue et r alis e au cours des prochains chapitres Figure 1 20 Application client riche de la gestion des bons de commande 23 1 Pr sentation de l tude de cas All n Architecture de l application Dans le pr c dent chapitre nous avons d crit le comportement souhait de la future application de commerce lectronique pour la soci t YAPS Vous allez maintenant d couvrir les technologies utilis es pour d velopper cette application c est dire le langage Java et la nouvelle plate forme Java EE 5 Gr ce l utilisation de diagrammes UML de composants et de d ploiement nous allon
58. 456 789 789 Date of birth dd MM yyyy 29 05 1971 Strect1 32 Broad Street Street2 city 5an Francisco state O O OOOO Figure 7 19 Zipcode 4567 Affichage d un message d erreur Country USA E E Yaps E build z e e E classes Paquetages et r pertoires de interface web L Egresources E E common Les managed beans AccountController et CatalogController sont j i foater jspf plac s dans le paquetage com yaps petstore jsf Re L 8 navigation jspf C1 images createaccount jsp L application ne comporte plus seulement des classes Java mais aussi des pages JSP une feuille de style et des images Tous ces l ments se situent D index isp y 3 x 55 i cf main jsp dans le r pertoire resources au m me niveau que le r pertoire src qui E petstore css contient les classes Java Les JSP ainsi que la feuille de style H searchresul jsp 2 A I D showaccount jsp petstore css sont la racine les d corateurs en t te bas de page et li B eiken ko barre de navigation sont dans le sous r pertoire common et les images H F showitems jsp showproducts jsp 4s signoff jsp signon jsp L updateaccount jsp t Gai src S ES WEB INF faces config xml L 54 web xml des animaux dans images Figure 7 20 l ments de l application web 207 7 Interface web Les Cahiers du Programmeur Java EE 5 ui lt lt boundar
59. 5 Figure 7 17 The YAPS Pet Store Demo is a 3 fictional sample application A La page showaccount jsp JAVA Gm J Derby 7 affiche les informations f es du client Extrait de la page showaccount jsp lt h2 gt Your Account Information lt h2 gt lt h messages layout table styleClass error gt lt h form gt lt h3 gt Personal information lt h3 gt 4 Section identit du client lt h panelGrid columns 2 gt lt h outputText value Firstname gt 4 Les balises outputText permettent d afficher lt h outputText value account customer firstname gt en lecture seule les attributs de l entity bean lt h outputText value Lastname gt Customer lt h outputText value account customer lastname gt lt h outputText value Email gt lt h outputText value account customer email gt lt h outputText value Telephone gt lt h outputText value account customer telephone gt 203 Les Cahiers du Programmeur Java EE 5 Remarquez l acc s la variable age qui est cal cul e par l entity bean partir de la date de naissance Adresse de domiciliation Affiche les attributs de l entity bean Address lt h outputText value Date of birth Cdd MM yyyy gt lt h outputText value account customer dateOfBirth gt lt h outputText gt gt lt h outputText value Age gt lt f convertDateTime pattern dd MM yyyy gt lt h outputText value accou
60. 7 Interface web Les Cahiers du Programmeur Java EE 5 Managed bean Attribut du managed bean Getter de l attribut A partir de cette page 180 gt JNDI et la r solution des d pendances est fortement typ e les op ra tions de cast ne sont pas n cessaires La glue entre le managed bean et la page D un c t nous avons des managed beans qui contiennent des attributs des m thodes et de l autre nous avons des pages qui affichent ces attri buts et invoquent ces m thodes Le lien entre les deux se fait par le lan gage d expression Prenons l exemple d un managed bean qui d clare un attribut keyword de type String Exemple de managed bean d clarant un attribut public class CatalogController private String keyword Cure public String getKeyword return keyword Pour afficher l attribut keyword de ce managed bean les pages utilisent l expression catalog keyword Le pr fixe catalog fait r f rence Palias d fini dans le fichier faces config xm1 Ainsi catalog keyword qui vaut a invoquer CatalogController getKeyword D claration de l alias dans le faces config xml lt managed bean gt lt managed bean name gt catalog lt managed bean name gt lt managed bean class gt com yaps petstore jsf CatalogController lt managed bean class gt lt managed bean gt La navigation entre pages Autre l ment pris en compte par JSF la navigati
61. 8282 Pour cela naviguer dans l arborescence du menu de droite et d ployez les n uds Resources JDBC Connection Pools Vous verrez alors apparaitre le pool petstorePool sun Java System Application Server Enterprise Edition 9 1 Admin Console Mozilla Firefox Fichier Edition Affichage bistorique Marquepages Outs 2 G AN T che setup Toutes les t ches de configuration que nous allons voir sont regroup es dans la t che setup Ainsi au lieu de les taper toutes une une vous pouvez utiliser ant f admin xml setup Pool de connexions Un pool de connexions est un m canisme permet tant de r utiliser les connexions la base de don n es Comme la cr ation d une nouvelle connexion JDBC consomme beaucoup de ressources il est plus judicieux d utiliser un pool qui r utilise les connexions libres e ah O htti lochost822 Home Version User user_name Role user nome Server scrver_name Sun Java System Application Server Admin Console a v I Applications Common Tasks gt Resources gt J08C gt Connection Pools gt petstorePool m Enterprise Applications i General Advance Properties wen Appacatone FJA Modules Edit Connection Pool Connector Modules gt D Litecycie Mouse gt D oec Resources v Connection Pools Poot settings CalrowPool Initial and Minimum Pool Size 8 Connections 8 _lim
62. APPROFONDIR JAX WS gt http java sun com webservices jaxws index jsp gt http jax ws dev java net ApPROFONDIR JAXB gt http java sun com Webservices jaxb http java sun com Webservices docs 1 5 tutorial doc JAXBWorks html Pour savoir comment transformer un graphe d objets en XML en utilisant JAXB vous pouvez consulter un article que j ai crit pour le site DevX gt http Awww devx com Java Article 34069 239 9 changes B2B Les Cahiers du Programmeur Java EE 5 4 SOA Le terme SOA Service Oriented Architecture d finit une architecture logicielle base de ser vices Un service d signe une action ex cut e par un composant fournisseur l attention d un com posant consommateur 240 Repr sentation XML de la classe Customer lt xml version 1 0 encoding UTF 8 standalone yes gt lt customer gt lt id gt 1234 lt id gt lt firstname gt Paul lt firstname gt lt lastname gt Smith lt lastname gt lt e mail gt yaps petstore com lt e mail gt lt customer gt SAX et DOM Il existe deux grandes familles de solutions pour lire un fichier XML en Java SAX Simple API for XML est une solution tr s pratique pour parser des fichiers XML simples L analyseur SAX s occupe d interpr ter le document XML identifiant les diff rent attributs et balises D s qu un l ment est reconnu SAX avertit le programme afin que celui ci fasse un traitement approp
63. Address homeAddress if customer null throw new ValidationException Customer object is null L appel au merge rattache l entity bean au customer setHomeAddress homeAddress 4 manager et synchronise les ventuelles mises em merge customer jour 129 Les Cahiers du Programmeur Java EE 5 Cette m thode retourne la liste de tous les clients Gr ce une query JPQL tous les entity beans Customer sont ramen s de la base de don n es UML Les diff rents liens En UML les diagrammes de classes utilisent toutes sortes de liens l image suivante repr sente de gauche droite un h ritage une impl mentation une utilisation et une association A A Figure 5 3 Liens UML UML La visibilit des attributs et m thodes Les m thodes et les attributs d une classe utilisent diff rents modes de visibilit Ceux ci ont une repr sentation graphique en UML priv e pro t g e paquetage et publique Figure 5 4 Visibilit en UML Figure 5 5 Classe et interfaces du stateless bean catalogue 130 gt return customer public List lt Customer gt findCustomers Query query List lt Customer gt customers query em createQuery SELECT c FROM Customer c customers query getResultList return customers La gestion du catalogue Le catalogue de YAPS est organis en cat gories produits et articles Pour pouvoir mettre jour le
64. Annotations et g n riques Si vous voulez en savoir plus sur les annotations et les g n riques consultez le tutoriel de Sun Vous y trouverez de l information mise jour ainsi que des exemples de code gt http java sun com docs books tutorial APPROFONDIR Les types num r s Les types num r s offrent d autres possibilit s it ration utilisation dans un switch EnumSet EnumMap etc Pour en savoir d avantage con sultez le site de Sun l adresse gt http java sun com j2se 1 5 0 docs guide language enums html RAPPEL P rim tre de ce livre Ce livre n a pas la pr tention de vous enseigner les nouveaut s du langage Java mais uniquement de vous pr senter celles qui vont tre utilis es lors de la r alisation de l application YAPS Pet Store Si vous n tes pas encore l aise avec les annota tions les g n riques ou les types num r s reportez vous aux r f rences donn es dans cet ouvrage pour approfondir vos connaissances 28 G n riques Pour les personnes famili res avec les templates C les g n riques sont simples comprendre m me si leur fonctionnement rest pas du tout similaire Ils permettent de ne pas sp cifier le type la compilation param tre ou retour de m thode par exemple tout en assurant que le type reste coh rent dans ses diff rentes utilisations Il est par exemple possible de sp cifier qu une collection un objet Vector Hashtable
65. Conserver l tat dans une application web Stateful session bean Cycle de vie des stateful beans MOTS CL S Stateful bean HTTP Session Les Cahiers du Programmeur Java EE 5 214 YAPS Pet Store propose un syst me de Caddie lectronique pour les clients d sirant acheter des animaux en ligne Une fois authentifi le client consulte le catalogue et peut ajouter des articles dans son panier virtuel Il peut en rajouter autant qu il le d sire en modifier la quantit en supprimer puis r gler ses achats Lorsque le client valide son panier une commande est automatiquement cr e Ces interactions entre Puti lisateur et l application web doivent tre pr serv es Si ce n tait pas le cas l application perdrait toute coh rence Imaginez qu chaque ajout d un produit l utilisateur doivent s identifier pour ensuite s apercevoir que tous les produits ajout s pr c demment aient disparus Il est donc n cessaire de pr server les interactions en m moire La gestion de l tat dans une application web est difficile car le protocole sur lequel elle se base est intrins quement sans tat En effet HTTP ne dispose pas de moyens pour se souvenir des interactions qui auraient pu se produire avec l utilisateur Le serveur web avec l aide du navigateur doit donc maintenir les informations entre deux requ tes C est pour cette raison qu il est n cessaire d utiliser le concept de session voir cha pitre pr c den
66. Fully exec Make sure that this file remains protected Information stored in this file will be used by asadmin commands to manage this domain Figure 3 7 delete Deleting F Tools Glassfich GlassfishU2b3 passfile x BUILD SUCCESSFUL Configuration de GlassFish otal tine 40 seco IF Tools Glacsfich ef ichU2b30 gt GlassFish Administration avec asadmin Le serveur GlassFish est livr avec un utilitaire d administration en mode ligne de commande asadmin asadmin permet de d marrer et d arr ter le serveur mais aussi de le param trer Pour faciliter l administration du serveur les com mandes asadmin seront incorpor es dans des t ches Ant fichier admin xm1 54 La configuration s effectue avec succ s lorsque le message build successful s affiche sur l cran Il faut alors positionner la variable GLASSFISH_HOME par exemple set GLASSFISH_HOME F Too1s Glassfish GlassfishV2b30 et rajouter le r pertoire bin dans la variable syst me PATH pour notre exemple PATH XGLASSFISH_HOME bi n PATH Pour v rifier que l installation s est bien d roul e d marrez le domaine par d faut domain1 de GlassFish en tapant la commande suivante asadmin start domain domainl Avec votre navigateur rendez vous l adresse http localhost 8080 Si vous voyez la page d accueil par d faut s afficher c est que votre serveur fonc tionne Sun Java System Application Server Platfor
67. HTTP dans une enveloppe Soap A la r ception de ce mes sage XML le service web utilise les annotations JAXB pour reconstruire un objet ValidateCreditCard Il valide alors les donn es bancaires puis retourne le r sultat de cette validation via la classe ValidateCreditCardResponse En utilisant le m me m canisme cette classe est transform e en flux XML pour transiter travers le r seau Le r sultat arrive enfin chez le client qui le retransforme en objet et peut ainsi r cup rer la valeur de retour Les services web utilis s par YAPS Pet Store L application YAPS Pet Store utilise deux services web la validation des num ros de cartes bancaires de la soci t BarkBank et le service de transport de marchandises de PetEx 249 9 changes B2B Les Cahiers du Programmeur Java EE 5 REMARQUE L algorithme de v rification Comme pour l existence de la soci t YAPS l algo rithme de v rification des cartes bancaires est compl tement fictif Figure 9 4 Diagramme de classe du service web de validation La m thode de validation prend en param tre le num ro de la carte son type sa date d expira tion et retourne le statut de la carte On utilise des m thodes utilitaires pour obtenir l ann e et le mois partir du format MM AA L ann e de la carte est inf rieure l ann e en cours On renvoie le statut L ann e de la carte bancaire est expir e L ann e de la carte
68. Ils ont t int gr s ce langage de mod lisation pour repr senter les fonctionnalit s du syst me du point de vue utilisateur Ils permettent de mod liser des processus m tier en les d coupant en sc narii Les cas d utilisation sont normalement repr sent s par un sch ma puis enrichis par un document d crivant plus pr cis ment chaque cas ainsi que d une maquette de l interface graphique et ou d un diagramme d activit s Le diagramme de cas d utilisation se compose e acteurs ce sont les entit s externes personne humaine ou robot qui utilisent le syst me e de cas d utilisation ce sont les fonctionnalit s propos es par le syst me Diagramme de cas d utilisation Le diagramme de cas d utilisation ci apr s d crit les besoins de la soci t YAPS de fa on synth tique et peut tre lu comme ceci Un employ peut g rer les articles du catalogue g rer les clients visualiser et sup primer les commandes Un internaute peut se cr er un compte visualiser et rechercher un article dans le catalogue YAPS P etstore E cr er un compo Maa gt se a waliser les articles cu ue Internaute pa See an ae EE dl Re G rer leserens crane un ane m Hov D ee __ Ee ae Jo ciem Ge et D Ge comectr ses deconnedter oot ra lescommandes ee A Co onsuiter et modifier son compte DT Z Cr er un bon de commande 2 Acheter des arti
69. L a ValidationException H D a OrderLocal L OrderRemote Figure 5 7 Stateless beans et exceptions UML Les composants Les composants en UML sont repr sent s par le st r otype lt lt component gt gt lls publient une ou plusieurs interfaces repr sent es par un cercle O lt lt component gt gt 8 Interface Composant Figure 5 8 Composant et interface 133 5 Traitements m tier Les Cahiers du Programmeur Java EE 5 134 lt lt com ponent gt gt a entity gt gt lt lt entity gt gt lt lt entity gt gt CatalogBean Product Item lt lt component gt gt 3 lt lt entity gt lt lt entity gt gt CustomerB ean Customer Address lt lt entity gt gt OrderLine a lt lt component gt gt a lt entity gt gt lt lt entity gt gt Figure 5 9 OrderBean Order CreditCard Architecture globale du YAPS Pet Store En r sum Les stateless beans forment une couche de traitements m tier qui sera invoqu e par les interfaces graphiques Ils manipulent les entity beans assurent la coh rence des donn es gr ce aux transactions et sont accessi bles de mani re locale ou distante La sp cification EJB 3 simplifie gran dement leur d veloppement via utilisation des annotations Pi ce incontournable de Java EE les EJB seront d ploy s sur le serveur Glass Fish dans le prochain chapitre et seront utilis s l aide d une application distante Swing
70. La session permet de pr ciser dans ces param tres une cha ne de caract res qui va servir de filtre sur les messages recevoir Le consommateur utilise un s lecteur sur les propri t s Session session connection createSession true Session AUTO_ACKNOWLEDGE MessageConsumer consumer 4 session createConsumer destinationOrder Reptiles true consumer setMessageListener this JMS S lection sur l en t te JMS permet de faire une s lection sur les champs de l en t te JMSDeliveryMode JMSPriority JMSMessageID JMSCorrelationID JMSType et JMSTimestamp Celle ci n est pas possible pour JMSDestination JMSReplyTo JMSExpiration ou JMSRedelivered Re oit les messages de priorit sup rieurs 6 JMSPriority est un champ de l en t te Re oit les messages de priorit sup rieurs 6 et ayant une propri t OrderId inf rieure 100 OU une propri t Repti les vrai Le producteur cr e un message de type objet et affecte un bon de commande dans le corps du message On rajoute une propri t de type bool en sur laquelle le filtrage s effectuera Le message est envoy Le consommateur ne recevra que les messages ayant la propri t Repti les a vrai 271 10 Traitements asynchrones Les Cahiers du Programmeur Java EE 5 ApPROFONDIR MDB Ed Roman Rima Patel Sriganesh Gerald Brose Mastering Enterprise JavaBeans 3rd Edition Wiley 2004
71. Lextrait de code ci apr s nous montre uniquement la m thode de recherche des articles TransactionAttribute value TransactionAttributeType REQUIRED Stateless name CatalogSB mappedName ejb stateless Catalog public class CatalogBean implements CatalogRemote CatalogLocal PersistenceContext unitName petstorePU private EntityManager em GES public List lt Item gt searchItems String keyword Query query List lt Item gt items query em createQuery SELECT i FROM Item i WHERE UPPERCi name LIKE keyword OR UPPER i product name LIKE keyword ORDER BY i product category name i product name query setParameter keyword keyword toUpperCase items query getResultListQ return items La gestion des bons de commande Les bons de commande ne sont pas automatiquement cr s par une interface graphique C est le processus d achat d animaux par le client qui d clenche la cr ation d un bon de commande et de toutes les actions qui en d coulent envoyer un e mail de confirmation au client avertir le transporteur etc 4 Le nom JNDI de l EJB est ejb stateless Catalog 4 Les autres m thodes ne sont pas d crites 4 Cette m thode retrouve tous les articles dont le nom correspond au mot cl pass en param tre 131 5 Traitements m tier Les Cahiers du Programmeur Java EE 5 132 Ajout de trace La journalisation consiste
72. Master Card gt lt h selectOneMenu gt Balise JSF Rendu graphique lt h selectOneMenu value 4 cart creditCard type gt 9 lt f selectItem itemLabel Visa gt lt f selectItem itemLabel Visa Gold gt Visa x lt h panelGrid columns 4 gt lt h outputText value 1 gt lt h outputText value 2 gt lt h outputText value 3 gt lt h outputText value 4 gt lt h outputText value 5 gt lt h outputText value 6 gt lt h outputText value 7 gt lt h panelGrid gt 171 7 Interface web Les Cahiers du Programmeur Java EE 5 Balise JSF Rendu graphique lt h column gt lt h column gt lt h column gt lt h column gt lt h dataTable gt lt h dataTable value catalog products var product gt lt h outputText value product name gt lt h outputText value product description gt Bulldog Excellent odorat Caniche Petit chien JSF Les balises sont des classes Les balises JSF sont d finies par des classes Java qui se trouvent dans le paquetage javax faces component Chaque classe h rite de UIComponent qui d finit un certain nombre de m thodes pour interagir avec les managed beans avoir un rendu graphique con vertir ou valider des donn es etc JSF Convention de nommage des balises Les balises peuvent tre pr fix es par ce que l on veut Il est pourtant commun d utiliser
73. Mozilla Firefox chier Edition Affichage Historique Marque pages Outs 2 G hpa antoniv goncalves YAPS Pet Store Yet Another Pet Store Lsearcn J Female Adult Birds Cats Dogs Fish Unit Cost 120 0 Reptiles Figure 7 12 The YAPS Pet Store Demo is a fictional sample application La page showitem jsp wa ou Derby L affiche le d tail d un article tire 194 Extrait de la page showitem jsp lt h2 gt lt h outputText value catalog item name gt lt h2 gt lt h messages layout table styleClass error gt lt h form gt lt h panelGrid columns 2 gt lt h column gt lt h graphicImage url images catalog item imagePath gt lt h column gt On dessine un tableau gr ce a la balise panelGrid Dans la premi re colonne on affiche l image de l animal Les images sont stock es dans le sous r pertoire images lt h column gt Prix unitaire lt h outputText value Unit Cost gt lt h outputText value catalog item unitCost gt lt h column gt lt h panelGrid gt lt h form gt La gestion du compte par les clients La gestion du compte client est d taill e dans les cas d utilisation Se connecter et se d connecter Se cr er un compte et Consulter et modifier son compte L internaute peut se cr er un profil en se choisis sant un login et un mot de passe Ensuite en se connectant l applica tion il
74. Page de r sultat du service web GlassFish Consulter les logs Pour lire les logs du serveur GlassFish vous pouvez soit consulter le fichier GLASSFISH_HOME domains petstore logs soit vous con necter la console d administration Pour cela allez l adresse http 1ocalhost 8282 puis saisissez le nom de l utilisateur admin et son mot de passe adminpwd Cliquez sur le menu Application Server gt View Log Files 258 Il est alors possible de saisir les param tres que l on souhaite et invoquer le service web Par exemple dans l cran pr c dent vous pouvez saisir un num ro impair pour une carte Visa Lorsque vous cliquez sur le bouton validateCard le service est invoqu et le r sultat s affiche dans la page ci apr s Method invocation trace Mozilla Firefox Fichier Edition Affichage Historique Marque pages Outils Ss 00 antonio goncalves walidateCard Method invocation a Method parameter s Type Value ljava lang String 123 java lang String Visa ljava lang String 10 10 Method returned java lang String Visa card number has to be even Pour consulter le contenu du document WSDL vous pouvez aussi vous rendre l adresse suivante http localhost 8080 barkbank ValidationService WSDL Ex cuter Pour v rifier que tout cela fonctionne il suffit d utiliser l application YAPS Pet Store pour acheter des articles Au moment de valider le panier l
75. Traitements m tier Dans le chapitre pr c dent nous avons impl ment les objets persistants de l application sous forme d entity beans Nous allons maintenant d velopper la couche de traitements qui les manipulera en utilisant les EJB session sans tat stateless Cette couche se charge de g rer les exceptions de d marquer les transactions et utilise l entity manager de JPA ainsi que son langage de requ tes JPQL pour acc der aux donn es w yoo ww e E Pea a a ae SOMMAIRE Couche de traitements m tier Gestion du catalogue et des clients Stateless session bean Cycle de vie des stateless beans Interfaces locale et distante Entity manager Langage de requ tes JPQL Gestion des exceptions D marcation des transactions MOTS CLES Stateless bean Entity manager JPQL Contexte de persistance CRUD Logging Les Cahiers du Programmeur Java EE 5 ARCHITECTURE S paration des responsabilit s La s paration des responsabilit s ou Separation of Concerns est le processus visant d couper un programme en l ments distincts dont les fonc tionnalit s se recouvrent le moins possible Dans notre cas les entity beans s occupent de la persis tance les stateless des traitements et l interface graphique de l affichage Ceci garantit le principe de s paration des donn es des traitements et des interfaces pour faciliter la maintenance et la r uti lisabilit de tout ou partie d un logiciel
76. U i i i i Outils et installation Les chapitres pr c dents ont permis de pr senter les fonctionnalit s le contenu de l application YAPS Pet Store ainsi que son architecture et les technologies utilis es Avant de commencer les d veloppements ce chapitre nous pr sente les outils que nous allons utiliser leur installation et leur configuration vv v v v v v SOMMAIRE Outils utilis s pour le d veloppement Installation de Ant et du JDK Installation et configuration du serveur GlassFish Administration de GlassFish Installation de Derby Cr ation de la base de donn es Derby MOTS CL S JDK Ant GlassFish Derby DataSource Pool de connexions JMS Les Cahiers du Programmeur Java EE 5 4 Logiciel libre Ce qui caract rise les logiciels libres Open Source c est leur code source En effet celui ci est visible modifiable et librement redistribuable sous certaines conditions licence T L CHARGER JDK 1 5 gt http java sun com javase TELECHARGER Ant 1 7 gt http ant apache org 48 Plusieurs outils seront utilis s pour d velopper notre tude de cas Ils ont tous la particularit d tre gratuits et parfois m me Open Source logiciels libres Il ne vous en co tera donc rien de les installer et de les utiliser Outils utilis s pour le d veloppement de l application JDK Indispensable pour le d veloppement et l ex cution de notre ap
77. Voil pour l aspect graphique Mais qu en est il des traitements Com ment a t on r ussi obtenir une liste de produits De plus dans presque tous les exemples que nous venons de voir les balises utilisent fr quemment le symbole di se Quelle est son utilit Le langage d expression unifi Avant d aborder la partie traitement nous devons d abord nous attarder sur le langage d expression unifi et parler un peu du pass Le langage d expression EL que nous avons vu pr c demment est entr dans la sp cification JSP 2 0 Il permet d acc der facilement aux attributs d un objet product name Alors que la sp cification JSP 2 0 n tait pas encore termin e JSF 1 0 est apparu avec ses composants graphiques ses convertisseurs son mode de programmation v nementielle et son langage d expression product name La raison de la cr ation de ce nouveau langage au lieu de est prin cipalement due au fait que le JSP EL ne satisfaisait pas le mod le JSF En effet JSP EL value une expression la vol e c est dire que le conteneur r sout l expression au moment o il interpr te la page puis renvoie le r sultat JSF utilise un mode diff r puisque l expression peut tre convertie valid e r pondre un v nement un clic de souris une valeur qui change avant d tre valu e Les deux langages ont donc leur raison d exister s par ment It ration avec
78. action il nous faut d cider dans quelle classe la mettre Une erreur fr quemment ren contr e consiste 4 d finir un stateless bean pour chaque entity bean Cette relation un pour un peut exister mais ne doit pas tre la r gle L application YAPS Pet Store utilise trois stateless beans e CatalogBean pour la gestion du catalogue au sens large c est dire les cat gories les produits et les articles CustomerBean pour la cr ation mise jour suppression des clients ainsi que leur connexion au site marchand e OrderBean pour les bons de commande les lignes de commandes et tout ce qui concerne le paiement par carte de cr dit communication avec BarkBank ainsi que l acheminement PetEx La gestion des clients Si on se reporte au cas d utilisation G rer les clients on s aper oit que les employ s de la soci t doivent avoir la possibilit de cr er mettre jour supprimer et lister les clients de l application Leur interface gra phique Swing tant distante elle utilisera les m thodes de l interface CustomerRemote Les clients quant eux utilisent l interface web pour se connecter au syst me consulter et mettre jour leurs coordonn es cas d utilisation Consulter et modifier son compte L application web tant d ploy e dans le m me ear que les stateless beans elle utilise l interface locale CustomerLocal Ci apr s le diagramme de classes repr sentant ces deux in
79. architectes parler d architecture quatre cinq ou n tiers II ne faut pas comprendre par l que l architecture est en 4 3 ou 5 3 mais bien en 4 ou 5 couches UML Paquetages et sous syst mes Un paquetage package en anglais est un m ca nisme destin regrouper des l ments comme des classes des cas d utilisation voire d autres paquetages Le terme sous syst me subsystem indique que le paquetage repr sente une partie ind pendante du syst me Ci apr s la repr senta tion graphique UML d un paquetage et d un sous syst me Package Subsystem Figure 2 5 Paquetage et sous syst me 42 Architecture de l application L application YAPS Pet Store va donc utiliser toutes les technologies nonc es ci dessus Comme nous l avons vu au chapitre pr c dent Pr sentation de l tude de cas l application peut tre acc d e par des naviga teurs client l ger utilis par les internautes et par les clients riches d ploy s sur les postes des employ s Ces interfaces graphiques acc dent un serveur qui va effectuer les traitements m tier puis stocker les don n es dans une base Pour ce faire l application YAPS Pet Store est d coup e en plusieurs couches L architecture en trois couches On peut donc dire que l architecture logique de l application YAPS Pet Store est d coup e en trois couches ou trois niveaux L architecture en trois couches est le mod le le plus g n ral des architec
80. archive pour les applications web servlet jsp jsf images html etc e les ear enterprise archive pour contenir les fichiers jar et war ANNOTATIONS Les descripteurs XML Lorsqu on d ployait des EJB en J2EE 1 4 il fallait fournir des descripteurs de d ploiement XML ejb jar xml et application xml Les annotations de Java EE 5 nous permettent de nous affranchir de ces fichiers devenus optionnels 152 Interface graphique La totalit de l application graphique est contenue dans le fichier petstore jar Il y a bien s r toutes les classes Swing du paquetage com yaps petstore client ui mais aussi les Business Delegate et le Ser vice Locator Pour pouvoir manipuler les entity beans il faut les rajouter dans ce jar ainsi que les exceptions et les interfaces distantes des EJB Stateless c est dire CatalogRemote CustomerRemote et OrderRemote Le fichier petstore jar ne requiert ni les interfaces locales car unique ment accessibles l int rieur du conteneur ni les classes d impl menta tion des EJB Stateless Application serveur C t serveur l application est packag e dans un fichier ear Ce type particulier d archive est utilis pour les applications d entreprise enter prise archive et contient plusieurs autres fichiers Sa structure est repr sent e graphiquement ci apr s Les classes et interfaces des EJB Session Remote Local et Bean se trou vent dans le fi
81. arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line barkbank gt lt exec gt lt target gt lt target name petex undeploy gt 4 Suppression de l application PetEx lt echo message Undeploys the PetEx application gt lt exec executable asadmin gt lt arg line undeploy gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line petex gt lt exec gt lt target gt 301 V rifie les applications YAPS Pet Store BarkBank et PetEx gt lt target name verify gt lt antcall target yaps verify gt lt antcall target barkbank verify gt lt antcall target petex verify gt lt target gt Les Cahiers du Programmeur Java EE 5 V rifie l application YAPS Pet Store gt lt target name yaps verify gt lt mkdir dir verifier dir gt lt exec executable verifier gt lt arg line d verifier dir gt lt arg line yaps ear gt lt exec gt lt target gt V rifie l application BarkBank gt lt target name barkbank verify gt lt mkdir dir verifier dir gt lt ex
82. aussi utiliser des feuilles de style Cascading Style Sheets ou CSS pour enrichir les possibilit s graphiques Cependant un site web nest pas uniquement constitu de pages stati ques de sons d images et de couleurs Il est n cessaire d y ajouter des donn es provenant de traitements c t serveur pour obtenir un contenu dynamique Pour cela la plate forme Java EE met disposition plu sieurs sp cifications comme les servlets les pages JSP les taglibs ainsi que JSF Les servlets Bien que le d veloppement de l application YAPS Pet Store n utilise pas les servlets mais les JSP Java Server Pages les balises JSTL JSP Stan dard Tag Library et JSF Java Server Faces une petite introduction est n cessaire Fonctionnant c t serveur au m me titre que CGI ASP ou PHP les servlets permettent de g rer des requ tes HTTP d effectuer des traite ments d appeler des EJB des services et de fournir au navigateur une r ponse sous forme de page web Les servlets impl mentent les classes et les interfaces des paquetages javax servlet classes g n riques ind pen dantes du protocole et javax servlet http sp cifique au protocole HTTP En pratique les servlets socle omnipr sent de Java EE ne sont plus uti lis es directement dans la programmation web En effet elles souffrent de nombreuses lacunes comme l absence de s paration entre les traite ments et la pr sentation Le code ci apr s nous montr
83. avec ses partenaires externes banque et transporteur UML cas d utilisation Le chapitre 2 se concentre sur l architecture technique et logicielle de l application YAPS Pet Store Ce chapitre pr sente bri vement les outils et API utilis s pour le d veloppement Java 5 HTML XML Java EE 5 Blueprint design pattern UML Linstallation et la configuration des outils se fait au chapitre 3 JDK Ant GlassFish Derby TopLink Le chapitre 4 entre dans le vif du sujet en d veloppant les objets persis tants de l application JPA entity bean Le chapitre 5 rajoute une couche de traitements m tiers venant mani puler les objets persistants EJB Stateless entity manager JPQL Le chapitre 6 nous explique comment compiler et d ployer l application pour que celle ci soit utilis e par une IHM Swing Ant JNDI Swing GlassFish TopLink Derby Le chapitre 7 cr e une premi re version de l application web qui permet de visualiser le catalogue des articles de la soci t et de g rer l acc s des clients JSB JSTL JSF Unified Expression Language Le chapitre 8 rajoute un panier lectronique au site pour pouvoir acheter des animaux domestiques en ligne EJB Stateful Le chapitre 9 s int resse aux changes B2B entre la soci t YAPS et ses partenaires externes banque et transporteur Web Service WSDL Soap JAXB Les traitements asynchrones comme l impression d un bon de com mande ou l env
84. bean scope gt session lt managed bean scope gt lt managed bean gt lt navigation rule gt lt from view id gt lt from view id gt lt navigation case gt lt from outcome gt items found lt from outcome gt lt to view id gt searchresult jsp lt to view id gt lt navigation case gt lt navigation rule gt lt faces config gt lt lt stateless gt gt CatalogBean searchlitems keyword Figure 7 6 Recherche d articles searchresult jsp M YAPS Pet Store va ssena ra re lt h dataTable value catalog items gt Voyons maintenant en d tail comment ces encha nements se font Tout d abord concentrons nous sur la saisie de la cha ne de caract res et l appel au managed bean Le code ci apr s affiche une zone de saisie et un bouton Lorsqu on catalog doSearch est invoqu e commandButton clique sur le attribut bouton action de l action la balise 183 7 Interface web Les Cahiers du Programmeur Java EE 5 Affiche une zone de saisie Le bouton intitul Search d clenche une action Wes HTTP un protocole sans m moire Rappelons que le protocole HTTP est non connect c est dire qu il ne garde aucune information con cernant l appelant entre deux requ tes La session HTTP classe HttpSession est le seul moyen qui permet de s affranchir de ce probl me en mainte nant au fil des pages acc d es par l internaute une transmis
85. bean se d tache il n est plus pris en compte par l entity manager il devient un simple Pojo et peut ainsi tre utilis par les autres couches par le client Swing par exemple Contexte de persistance Lentity manager est la pi ce centrale servant manipuler les entity beans Grace aux annotations JPA il sait comment faire le mapping entre un entity bean et une table et plus pr cis ment entre un attribut et une colonne Par contre il lui manque toujours une information dans quelle base de donn es doit il persister ces entity beans Pour cela il utilise un contexte de persistance qui le renseigne sur plu sieurs informations le type de la base de donn es dans notre cas on utilise Derby et les param tres de connexion cette base de donn es via l utilisation d une source de donn es Le contexte de persistance informe l entity manager du type de base de donn es et des param tres de connexion D claration de l entity manager L entity manager est utilis pour persister l entity bean client dans la base de donn es RAPPEL Source de donn es Une source de donn es ou Data Source repr sente une connexion physique a une base Lorsque nous avons configur le serveur GlassFish nous avons cr la source de donn es jdbc petstoreDS qui pointe vers la base petstoreDB dans Derby 111 5 Traitements m tier Les Cahiers du Programmeur Java EE 5 112 Remarquez
86. cas d utilisation Se cr er un compte se d roule normalement le r sultat obtenu est que l internaute devient un client de la soci t YAPS Figure 1 9 Le client saisit son login et deux fois son mot de passe 13 1 Pr sentation de l tude de cas Les Cahiers du Programmeur Java EE 5 Figure 1 10 Saisie des informations du client UML Pr conditions des cas d utilisation Pour ex cuter un cas d utilisation les pr condi tions doivent tre remplies Dans l exemple du cas d utilisation Se connecter et se d connecter le client doit auparavant s tre cr un compte pour pouvoir se connecter l application 14 YAPS PalStore Create Customer Mozilla Firefox D Fher Edtion Affichage Aler Marque pages Cutis 2 th antonio goncalves A a a sant sat Pets Create Your Account Birds cats Personal information Dogs Fish Reptiles Login james Firstname James Lastname Rorisson Email Jr mymail com Telephone 02154 254 147 Date of birth dd MM yyyy 24 12 1968 Street1 Ritherdon Road Street City New York State Zipende 4568 Country USA Se connecter et se d connecter R sum Permet un client de se connecter et de se d connecter du syst me Acteurs Client Pr conditions Le client s est auparavant cr un compte cas d utilisation Se cr er un compte Description Le client
87. catalogue lapplication doit permettre aux employ s de mettre jour chacun de ces l ments On retrouve ainsi des m thodes CRUD pour la cat gorie le produit et l article dans l interface CatalogRemote Le site web quant lui ne permet pas les mises jour mais simplement la consultation du catalogue et la recherche d articles interface CatalogLocal catalog com yaps petstore stateless lt lt interface gt gt CatalogRemote createC ategory category Category Category findC ategory categoryld Long Category deleteC ategory category Category void updateC ategory category Category Category findCategores List lt Category gt catalog com yaps petstore entit y lt lt entity gt gt Category updateltem item Item product Product Item finditem ss List lt Item gt H lt lt interface gt gt l CatalogLocal I findCategory categoryld Long Category l findProduct productld Long Product i finditem temid Long Item i i i i i searchitems ke yword String List lt Item gt lt lt Session Bean gt gt CatalogB ean em EntityManager Le stateless bean CatalogBean manipule les entity beans Category Product et Item CatalogBean Vous l aurez compris le code des m thodes CRUD des l ments du catalogue ressemble de tr s pr s celui du client que nous venons de voir Toute description de ce code est donc superflue
88. classes lay yaps 5 petstore s E client b a entity b 29 exception EJ stateless Figure 6 12 R pertoires de l application 150 8 z Figure 6 11 Architecture de l application avec l interface graphique Notez la relation une classe Delegate pour une interface distante d un EJB Les interfaces locales seront utilis es par l application web dans le prochain chapitre Ex cuter l application Maintenant que nous avons tudi les crans Swing et leur imbrication dans l architecture il ne nous reste qu ex cuter l application Pour cela il faut d abord compiler les classes d velopp es jusqu ici les packager dans des fichiers jar puis les d ployer sur le serveur GlassFish Les t ches Ant s occuperont d effectuer tous ces traitements Compiler Avant tout il faut compiler les classes qui se trouvent dans le r pertoire src La t che Ant yaps compi le se charge de les compiler et de les placer dans le r pertoire classes Si l on souhaite supprimer tous les fichiers class et les r pertoires de travail build et classes il suffit d utiliser la t che Ant yaps clean at Open JEE5 E YapsPetstoredant yaps compile Buildfile build xml yaps pre pare echo Setup the Yaps environment mkdir Created dir E YapsPetstore yaps build lib lyaps compile echo Compile the classes javac Compiling 88 source files to E YapsPetstore yaps c lasses production
89. clenchent des actions de navigation un clic sur un bouton balise commandButton ou un lien hypertexte commandLink Lorsque lutilisateur clique sur l un ou l autre une cl de navigation outcome est renvoy e Cette cl peut tre statique en dur dans le code de la page JSP ou dynamique calcul e par une EL Navigation statique On appelle navigation statique un encha nement entre deux pages qui sera toujours le m me Un clic sur un bouton ou sur un lien hypertexte d clenchera toujours la m me destination Pour illustrer ce propos l exemple suivant affiche un lien hypertexte avec une action ayant comme valeur updateaccount Exemple de navigation statique lt h commandLink action updateaccount gt lt h outputText value Edit Your Account Information gt lt h commandLink gt Lorsque l utilisateur clique sur le lien HTML la cl de navigation updateaccount est renvoy e au gestionnaire de navigation de JSF qui va 4 et pour cette cl de navigation 4 on se rend sur cette page 4 partir de n importe quelle page 4 et pour cette cl de navigation 4 on se rend sur cette page 181 7 Interface web Les Cahiers du Programmeur Java EE 5 JSF Cl de navigation a null Les m thodes des managed beans doivent retourner une cl de navigation de type String Cette cl doit correspondre a une r gle de naviga tion d finie dans le fichier faces c
90. clique sur ce lien la m thode doFindProducts du managed bean est invoqu e On peut ensuite r cup rer ce param tre gr ce la m thode getParamid Le managed bean r cup re la valeur de ce param tre public String doFindProducts category catalogBean findCategory getParamId categorylId products category getProducts return products displayed La m thode getParamId utilise le contexte JSF FacesContext pour r cup rer les param tres pass s a la requ te HTTP getRequestParameterMap Ces param tres sont stock s dans une map sous la forme cl valeur Il suffit ensuite de r cup rer le param tre qui nous int resse map get param 4 Cette m thode retourne les articles d un produit 4 Pour un identifiant donn cette m thode retourne un article partir d une cha ne de caract res keyword cette m thode retourne une liste d articles JSF Le contexte Le contr leur FacesServlet cr e un objet FacesContext qui contient les informations n cessaires l ex cution d une requ te utilisateur c est dire les objets ServletContext ServletRequest et ServletResponse qui sont fournis par le conteneur web 189 7 Interface web Les Cahiers du Programmeur Java EE 5 REMARQUE La recherche d articles La recherche d articles a t d velopp e dans le paragraphe Comment d velopper une applica tion web avec JSF Nous ne l aborderons donc p
91. com blueprints corej2eepatterns Patterns BusinessDelegate html Business Delegate gt http c2 com cgi wiki BusinessDelegate UML Diagramme de s quences Le diagramme de s quences permet de repr senter des collaborations entre objets selon un point de vue temporel On y met l accent sur la chronologie des envois de messages Les diagrammes de classes montrent la composition statique des classes alors que le diagramme de s quences se penche sur la dynamique de leurs collaborations RAPPEL Interface locale des EJB L application graphique ne peut pas utiliser l inter face locale de l EJB car elle se trouve en dehors du conteneur Elle ne peut utiliser que la Remote 144 public static void deleteCustomer Customer customer getCustomerRemote deleteCustomer customer private static CustomerRemote getCustomerRemote CustomerRemote customerRemote customerRemote CustomerRemote ServiceLocator getInstance getRemoteInter face ejb stateless Customer return customerRemote Vous retrouverez ci apr s l extrait de code initial permettant d afficher une cat gorie en utilisant dor navant la classe CatalogDelegate cran d affichage de la cat gorie avec Business Delegate public class CategoryCrudFrame extends JInternalFrame Gio public void findActionPerformed EventObject evt Category category CatalogDelegate findCategory identifier model setIdentifier catego
92. confirmation de l adresse et du mode de paiement la page de r capitulatif orderconfirmed s affiche orderconfirmed jsp a i YAPS Pet Store pat ha ue 225 8 Gestion du panier lectronique Les Cahiers du Programmeur Java EE 5 La page de contenu du Caddie PRECISION Le code des JSP Cette page permet d afficher et de modifier le contenu du panier lectro nique Lorsque celui ci est vide un message en avertit le client Sinon la Pour que le code des JSP soit plus lisible certaines balises omire anaes linn S page showcart jsp s affiche avec pour chaque article son nom sa des lt h pane1Grid gt ont t supprim es cription sa quantit son prix unitaire et le sous total prix unitaire quantit Le montant total du panier est galement renseign YAPS PetStore Shopping Cart Mozilla Firefox chier dition Affichage Historique Marquepages Qutis 2 G ove ne antonio goncalves YAPS Pet Store ae Account Cart Sign off Yet Another Pet Store at Birds Amazon Parrot Cats Female Adult Chihuahua Dogs Female Adult Fish Rattlesnake n zid Reptiles Male Adult Update 1 x20 0 20 0 Remove Bulldog Spotless Male Puppy Update 4 x 120 0 480 0 Remove update 5 x 100 0 500 0 Remove Update 2 x22 0 440 Remove Total 1044 0 Check Out The YAPS Pet Store Demo is 3 Figure 8 7 fictional sample application La page showcart jsp
93. corps du message bien qu optionnel est la zone qui contient les don n es Ces donn es sont format es selon le type du message qui est d fini par les interfaces suivantes Tableau 10 2 Types de messages Interface Description javax jms BytesMessage Pour les messages sous forme de flux d octets javax jms TextMessage Echange de donn es de type texte XML par exemple javax jms ObjectMessage Messages compos s d objets Java s rialis s javax jms MapMessage change de donn es sous la forme cl valeur La cl doit tre une String et la valeur de type primitif javax jms StreamMessage change de donn es en provenance d un flux 264 Il est possible de d finir son propre type de message en impl mentant l interface m re javax jms Message Lors de la r ception d un message celui ci est toujours de type javax jms Message Il doit donc tre trans typ en fonction de son type L op rateur instanceof est alors utilis pour d tecter le type exact du message ce moment il faut utiliser le getter correspondant pour obtenir les donn es ObjectMessage getObjectO TextMessage getText etc Exemple de transtypage d un message public void onMessage javax jms Message message if message instanceof ObjectMessage ObjectMessage objMsg ObjectMessage message objMsg getObjectO Les objets administr s Dans l utilisation
94. createConnection Session session connection createSession true Session AUTO_ACKNOWLEDGE 10 Traitements asynchrones MessageConsumer consumer session createConsumer 4 On cr e un MessageProducer qui filtre les mes destinationOrder Repti les true sages sur la propri t Repti les true consumer setMessageListener this 4 On associe un listener la classe courante connection start 4 On d marre la connexion public void onMessage Message message 4 Les messages arrivent par la m thode if message instanceof ObjectMessage onMessage et sont affich s dans une JTable ObjectMessage objMsg ObjectMessage message tableModel add objMsg getObject Le r sultat graphique est le suivant Les commandes contenant des rep tiles s affichent au fur et mesure de leur arriv e dans une liste En s lec tionnant une commande et en cliquant sur le bouton View on peut en conna tre le d tail Pet Store File Customer Catalog Order Look amp Feel List ordars T watch for new orders containing reptiles Manage order ID Date Customer Name Number of items Watch orders 151 02 01 2007 Jobs Steve 02 01 2007 Jobs Steve 2 7 Gates Bill C order 157 Read onw Order 157 Read only Identifier 157 ID item Quantity Sub total 160 Male Adull Order date 02 01 2007 159 poissa ROMBIOPUDET Customer 150 Male Adult
95. de ce message En JMS ces messages doivent impl menter l interface javax jms Message et sont compos s de trois parties e l en t te header qui comporte des caract ristiques techniques iden tifiant date d envoi etc e les propri t s properties qui repr sentent les caract ristiques fonc tionnelles du message e et le corps du message body qui contient les donn es transporter En t te Propri t s Corps JMSMessagelD BytesMessage JMSCorrelationID TextMessage JMSDeliveryMode ObjectMessage JMSDestination MapMessage JMSExpiration StreamMessage JMSPriority JMSRedelivered JMSReplyTo JMSTimestamp L en t te du message Len t te du message contient un certain nombre de champs pr d finis permettant de l identifier On peut voir cette section comme les m ta donn es du message qui a cr le message date de cr ation dur e de vie accus de r ception demand ou non etc Chacune de ces m tadon n es poss de des accesseurs d finis dans l interface javax jms Message qui permettent d en modifier le contenu mais la plupart sont affect es automatiquement par le provider Figure 10 1 Anatomie d un message JMS 263 10 Traitements asynchrones Les Cahiers du Programmeur Java EE 5 Tableau 10 1 M tadonn es de l en t te Nom Description JMSMessagelD Identifiant unique du message JMSCorrelationID Utilis pour associer de fa on applicative deux messages par l
96. de possibi lit s comme la gestion d acc s simultan s de plu sieurs bo tes aux lettres 4 XSD XSD ou XML Schema Description est un lan gage de description de format de document XML permettant de d finir la structure d un document XML XSD est commun ment appel grammaire 38 JSF 1 2 Entre les servlets et les JSP il manquait un framework pour aiguiller de mani re simple un v nement utilisateur vers une action serveur Des outils libres comme Struts sont venus aider le d veloppeur en d corr lant la couche pr sentation de la couche m tier Mais aucune sp cifica tion n existait jusqu l apparition de JSF Java Server Faces est venu combler ce vide en facilitant la conception d interfaces graphiques web en g rant automatiquement l tat HTTP ainsi que les v nements entre client et serveur JSF tablit une norme dont le r le est de fournir aux d veloppeurs une large palette d outils leur permettant d impl menter des applications web en respectant un mod le bien pr cis Le conteneur de serviet Le cycle de vie d une servlet donc d une JSP est assur par le moteur de servlet aussi appel conteneur de servlet o conteneur web Celui ci est responsable de fournir la requ te HTTP la servlet de l ex cuter et de renvoyer la r ponse C est le moteur de toute application web simple c est dire ne mettant pas en jeu d EJB JavaMail 1 4 JavaMail est PAPI
97. doit attendre une confirmation de l employ avant de supprimer d finitive ment le client du syst me Le syst me doit aussi pouvoir afficher la totalit des clients pr sents dans le syst me Exceptions Valeur unique Si cette donn e existe d j dans le syst me une excep tion doit tre lev e Donn e obligatoire Si cette donn e est manquante une exception doit tre lev e Maquettes Les employ s de la soci t YAPS utilisent une application riche pour dia loguer avec le syst me Pour la gestion des clients ils utilisent un cran qui leur affiche la liste de tous les clients menu List customers Ils peuvent ensuite consulter les informations en cliquant sur le bouton View ou sup primer le client en cliquant sur Delete Un autre menu Manage customer permet de manipuler les informations d un client c est dire la cr ation mise jour suppression et recherche partir de son identifiant Pet Store Customer Catalog Order Look amp Fecl List custumers A Custumer Manage Customer Customer Identifier a Hirst Name Antonio Last Name Concatves Telephone 487 487 21 Email jantonio goncalves jee5 com Street1 42 Glass Street street2 City Oakland State La Zipcode 8765 Country usa Find Create Update 1 Lists all the customers Telephone Email Country ID FirstName Las Name
98. et d truira le stateless bean Les exceptions de type syst me h ritent de java rmi RemoteException javax ejb EJBException ou de java lang RuntimeException mais sans utiliser l annotation ApplicationException Il est important de com prendre que des exceptions non contr l es peuvent tre lanc es par d autres syst mes et qu elles n ont rien voir avec la mod lisation d un EJB m tier Elles ne doivent donc g n ralement pas appara tre dans la signature des m thodes En revanche pour les exceptions contr l es telles que javax jms JMSExcepti on l EJB est oblig de les catcher Une bonne pratique consiste encapsuler ce type d exception dans une EJBException et la relancer Le conteneur pourra alors la traiter comme une exception syst me et appliquer la politique transactionnelle Exemple de traitement d exception JMS public void publishOrder Order order try Session session connection createSession true 0 Ges ObjectMessage objectMessage session createObjectMessage objectMessage setObject order producer send objectMessage catch JMSException e throw new EJBException e Le cycle de vie d un stateless bean Le cycle de vie d un stateless bean est tr s simple En fait il n a que deux tats soit il existe soit il existe pas L tat inexistant signifie que EJB na pas encore t instanci et n existe pas en m moire Le passage l tat pr t se fait lors
99. gt lt head gt lt body gt lt Date today new Date gt lt br gt lt center gt La date est lt today gt lt center gt lt body gt lt html gt Une JSP est un autre moyen d crire une servlet Lorsqu un utilisateur appelle une page JSP le serveur web cr e un code source Java partir du script JSP c est dire qu il constitue une servlet partir du script JSP le compile puis l ex cute Langage d expression Le langage d expression ou Expression langage EL permet aux JSP d acc der aux objets Java de manipuler des collections ou d ex cuter des actions JSF Une expression est de la forme suivante expression Exemple de page JSP utilisant le langage d expression lt htm1 gt lt body gt lt c if test bean attr lt 3 gt lt center gt La date est bean today lt center gt lt c if gt lt body gt lt html gt JSTL 1 2 JSTL est le sigle de JSP Standard Tag Library C est un ensemble de balises personnalis es Custom Tag d velopp es sous la JSR 052 facili tant la s paration des r les entre le d veloppeur Java et le concepteur de pages web L avantage de ces balises est de d porter le code Java contenu dans la JSP dans des classes d di es Ensuite il suffit de les utiliser dans le code source de la JSP en utilisant des balises particuli res tout comme vous le feriez avec des balises HTML classiques Les biblioth ques de balises Zag ibs
100. gt lt target gt lt target name yaps prepare gt lt echo message Setup the Yaps environment gt lt mkdir dir yaps classes dir gt lt mkdir dir yaps build dir lib gt lt target gt lt target name barkbank prepare gt lt echo message Setup the Barkbank environment gt lt mkdir dir barkbank classes dir gt lt mkdir dir barkbank build dir gt lt mkdir dir barkbank generated src dir gt lt target gt lt target name petex prepare gt lt echo message Setup the PetEx environment gt lt mkdir dir petex classes dir gt lt mkdir dir petex build dir gt lt mkdir dir petex generated src dir gt lt target gt lt target name compile depends prepare gt lt antcall target yaps compi le gt lt antcall target barkbank compi 1le gt lt antcall target petex compile gt lt target gt lt target name yaps compile depends yaps prepare gt lt echo message Compile the YAPS generated classes gt lt javac srcdir yaps generated src dir destdir yaps classes dir deprecation on gt lt classpath refid classpath gt lt classpath refid yaps classpath gt lt javac gt lt echo message Compile the YAPS classes gt lt javac srcdir yaps src dir destdir yaps classes dir deprecation on gt lt compilerarg value Xlint unchecked gt lt classpath refid classpath gt lt classpath refid yaps classpath gt lt
101. image lien hyper texte XML est un m talangage qui va permettre d inventer volont de nouvelles balises pour d crire des donn es et non leur repr sentation XML permet donc de d finir des fichiers dont la structure est personna lis e par la cr ation de balises De fait ce langage s impose comme un standard dans les changes inter syst mes d information XML devient un format pivot encore qualifi de format d changes De plus un cer tain nombre d API offre des m canismes pour cr er extraire et v rifier la validit d un document XML Cette validation n est possible que si l on conna t la structure du document Cette structure est d finie par un XML Schema Definition XSD technologie d riv e d XML Un sch ma XML XSD est lui m me un fichier XML Exemple de document XML lt racine gt lt titre nom exemple de message XML gt lt message gt donn es envoy es entre metteur et r cepteur lt message gt lt racine gt HTML et XHTML partir de 1992 Internet popularise le langage HTML Hypertext Markup Language ou langage de balisage hypertexte con u vers 1990 pour la pr sentation de documents lectroniques hypertextes Issu de SGML HTML d finit un certain nombre de balises li es uniquement la pr sentation Depuis quelques ann es le HTML tend tre remplac par le XHTML qui lui apporte la rigueur de la notation XML Exemple de page HTML lt html gt lt head
102. javac gt lt target gt lt target name barkbank compile depends barkbank prepare gt lt echo message Compile the BarkBank classes gt lt javac srcdir barkbank src dir destdir barkbank classes dir deprecation on gt lt classpath refid classpath gt lt classpath refid barkbank classpath gt lt javac gt lt target gt lt target name petex compile depends petex prepare gt lt echo message Compile the Petex classes gt lt javac srcdir petex src dir destdir petex classes dir deprecation on gt lt classpath refid classpath gt lt classpath refid petex classpath gt lt javac gt lt target gt 4 Cr ation des r pertoires de travail de l applica tion PetEx Compile le code source des applications YAPS Pet Store Barkbank et PetEx Compile le code source de l application YAPS Pet Store Compile le code source de l application Bark Bank Compile le code source de l application PetEx 295 B T ches Ant Les Cahiers du Programmeur Java EE 5 Compile le code source de l application YAPS Pet Store gt Package les applications YAPS Pet Store Bark bank et PetEx gt Package l application YAPS Pet Store Cr e le jar client Cr e le jar contenant les stateless beans 296 lt target name yaps compile depends yaps prepare gt lt echo message Compile the YAPS generated classes gt
103. jnp interfaces NamingContextFactory props setProperty java naming factory url pkgs org jboss naming org jnp interfaces props setProperty java naming provider url localhost ic new InitialContext props 4 On recherche dans JNDI l interface m tier qui se Object objRef HelloHome ic lookup ejb Hello nomme ejb Hel lo HelloHome home Hel 1loHome PortableRemoteObject narrow objRef HelloHome class Hello hello home create Hello 4 On cr e un entity bean avec les attributs hello setValeur PetStore Hello pour la cl et PetStore pour la valeur hello home findByPrimaryKey Hello 4 Une fois cr on le recherche a partir de sa cl System out printin hello getCle primaire Une fois obtenu on affiche la valeur System out printin hello getValeur des attributs 319 Les Cahiers du Programmeur Java EE 5 En modifiant les attributs on met jour la base de donn es L entity bean est supprim ainsi que ses donn es en base L interface de fabrique h rite de javax ejb EJBHome L interface m tier h rite de javax ejb EJBObject Les m thodes m tiers permettant de retourner une chaine de caract res et la date du jour 320 gt gt hello setValeur PetStore Modifie O hello removeO O catch Exception e e printStackTrace Comme vous pouvez le constater les entity beans 2
104. la lettre c pour le Core JSP h pour les balises HTML de JSF et f pour le Core JSF JSF Cr er ses propres convertisseurs Un convertisseur est une classe Java qui doit impl menter les m thodes de l interface javax faxes convert Converter Suivez les tapes l adresse suivante gt http www 128 ibm com developerworks library j jsf3 172 Certaines balises JSF n ont cependant pas de rendu graphique imm diat comme la balise lt h form gt qui permet de g rer les formulaires Il faut bien comprendre que chacune de ces balises sera transform e en HTML pour ensuite constituer une page et tre affich e par un naviga teur Par exemple la balise JSF suivante lt h inputText value cart customer firstname gt sera transform e en HTML comme ceci lt input type text value Smith gt Les balises Core Contrairement la biblioth que HTML les balises Core n ont pas de rendu graphique sp cifique Par convention elles sont pr fix es par la lettre f Voici une liste non exhaustive de balises Core utilis es dans l application Attachons nous aux balises principales dans un premier temps Les balises view et subview permettent votre page de contenir d autres balises JSF et de pouvoir tre interpr t es Elles se retrouvent g n rale ment en d but et en fin de la JSP La seule diff rence entre ces deux balises se r sume par le fait que subview est utilis e pour les fragm
105. la nouvelle sp cification des EJB 3 distingue les exceptions applicatives des exceptions syst me Les exceptions En Java les exceptions sont des objets instances de java lang Throwable Elles peuvent tre r pertori es en deux cat gories exception contr l e et exception non contr l e Les exceptions non contr l es unchecked exceptions sont en g n ral lanc es par le syst me Elles correspondent des erreurs l ex cution et proviennent d extensions de la classe java lang RuntimeException Le compilateur java n exige pas qu elles soient d clar es ou trait es par les m thodes qui peuvent les lancer Les exceptions contr l es checked exceptions correspondent des excep tions cr es par l utilisateur et proviennent d extensions de la classe java lang Exception Le compilateur exige qu une m thode dans laquelle une telle exception est lanc e d clare cette exception dans sa signature ou bien la traite Exceptions d application Les EJB utilisent les exceptions d application pour informer un client qu une anomalie applicative s est produite param tre invalide num ro de carte de cr dit erron etc Ce type d exception mest pas fait pour remonter les probl mes syst me base de donn es indisponible file d attente JMS introuvable etc Une exception d application peut soit tre contr l e h rite de la classe java lang Exception soit non contr l e h rite alors de la classe
106. la syntaxe de SQL Sa particularit est de mani puler des objets dans sa syntaxe de requ te et de retourner des objets en r sultat On manipule donc des objets dans une requ te JPQL puis le m canisme de mapping transforme cette requ te JPQL en langage com pr hensible par une base de donn es relationnelle en SQL L avantage de JPQL est que le d veloppeur ma pas conna tre un nou veau langage Comme nous le verrons dans les exemples venir JPQL est plus intuitif pour un d veloppeur Java car il utilise une approche objet En effet le d veloppeur manipule son mod le objet et non une structure de donn es en utilisant la notation point e c est dire maClasse monAttribut JPQL cr e donc une abstraction par rapport la base de donn es Il est portable quel que soit le moteur utilis via son interface Query Si vous souhaitez utiliser les sp cificit s d une base de donn es JPQL vous permet de le faire en utilisant son interface NativeQuery Effectuer des requ tes en JPQL Les requ tes JPQL se font l aide de l interface javax persistence Query Cette interface est utilis e pour contr ler l ex cution d une requ te JPQL Lentity manager fabrique un objet Query partir d un ordre JQPL et le retourne pour qu il soit ensuite manipul par le programme Dans l exemple de code suivant l entity manager cr e une Query l aide d une cha ne de caract res Cette Query est ensuite util
107. le pr c dent chapitre chapitre YAPS PetStore Mozilla Firefox Fichier dition Affichage Historique Marque pages Outils 2 YAPS Pet Store Yet Another Pet Store Birds Cats Dogs Fish Reptiles The YAPS Pet Store Demo is a fictional sample application JA Me antonio goncalves Interface web SOMMAIRE Interface web de l application L application est maintenant d ploy e et utilisable par Visualiser le catalogue un client Swing Il nous faut maintenant d velopper l interface web qui sera utilis e par les internautes et clients de la soci t YAPS Ce chapitre introduit les technologies servlet JSP et JSTL avant de pr senter JSF et son mod le MVC L application web utilise JSF et dialogue avec la couche de stateless beans Rechercher les articles G rer le compte client Le duo servlet JSP JSF et le mod le MVC Appel local des stateless bean L injection A a OR CREER CS AD ONE Navigation entre pages MOTS CL S Servlet JSP JSTL JSF Managed bean EL et UEL MVC loC a a a ae ee ae Les Cahiers du Programmeur Java EE 5 APPROFONDIR HTML amp CSS gt http www w3 org MarkUp gt http www htmlprimer com gt http www w3 org Style CSS gt http www w3schools com css C2 ric Sarrion Introduction HTML et CSS O Reilly 2006 4 CGI ASP et PHP CGI Common Gateway Interface invent en 1993 permet d ex cuter un
108. lors du d ploiement des entity beans Cette information est contenue dans le fichier persistence xm1 packag dans entity jar et peut tre modifi e lt persistence gt lt persistence unit name petstorePl gt lt jta data source gt jdbc petstoreDS lt jta data source gt lt properties gt lt property name toplink target database value Derby gt lt property name toplink dd1 generation value drop and create tables gt lt property name toplink create dd1 jdbc file name value create sql gt lt property name toplink drop ddl jdbc fi le name value drop sql gt lt property name toplink logging level value FINEST gt lt properties gt lt persistence unit gt lt persistence gt L attribut toplink ddl generation permet a TopLink de savoir quelle action entreprendre lors du d ploiement accepte les valeurs suivantes e drop and create tables lors du d ploiement le sch ma de la base de donn es est supprim puis recr e create tables chaque d ploiement toplink ex cute les requ tes de cr ation des tables m me si elles existent d j Des avertissement peuvent alors appara tre e none toplink n entreprend aucune action vous de garantir l existence des tables Les autres propri t s de ce fichier signifient que les scripts SQL de cr a tion et de suppression g n r s par TopLink se trouvent dans les fichiers create sql et drop sql Pour augmenter ou diminuer le nive
109. lt arg lt arg lt exec gt lt target gt line 1ist components gt line echo echo gt line user server user name gt line passwordfile server passwordfile gt line _ host server host gt line _ port server admin port gt lt target name list description list all components gt lt antcal lt antcal lt antcal lt antcal lt antcal lt target gt 1 target list connection pool gt 1 target list datasource gt 1 target list jms resources gt 1 target list jndi gt 1 target 1ist components gt lt target name setup gt lt antcall target create connection pool gt lt antcall target ping connection pool gt lt antcall target create datasource gt lt antcall target create jms connection factory gt lt antcall target create jms topic gt lt antcall target set loggers gt lt target gt lt project gt Sigles et acronymes Le monde de l informatique et plus particuli rement Java est parsem d une multitude de sigles et d acronymes en tout genre Vous trouverez ci apr s une liste non exhaustive de ceux rencontr s les plus fr quem ment dans la litt rature informatique Tableau C 1 Sigles et acronymes Sigle Acronyme Signification ACC Application Client Container Ant Another Neat Tool API Application Programming Interface ASP Active Server Pa
110. lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line jdbc pool name gt lt exec gt lt target gt Affiche la liste des pools de connexions gt lt target name 1ist connection pool gt lt exec executable asadmin gt lt arg line list jdbc connection pools gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt exec gt lt target gt Affiche la liste des sources de donn es 306 gt lt target name ist datasource gt lt exec executable asadmin gt lt arg line list jdbc resources gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt exec gt lt target gt lt target name delete connection pool gt lt exec executable asadmin gt lt arg line delete jdbc connection pool gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host serve
111. lt javac srcdir yaps generated src dir destdir yaps classes dir deprecation on gt lt classpath refid classpath gt lt classpath refid yaps classpath gt lt javac gt lt echo message Compile the YAPS classes gt lt javac srcdir yaps src dir destdir yaps classes dir deprecation on gt lt compilerarg value X1int unchecked gt lt classpath refid classpath gt lt classpath refid yaps classpath gt lt javac gt lt target gt lt target name build depends compi le gt lt antcall target yaps build gt lt antcall target barkbank bui 1d gt lt antcall target petex bui 1d gt lt target gt lt target name yaps build depends yaps compile yaps build client jar yaps build stateless jar yaps build stateful jar yaps build mdb jar yaps build entity jar yaps build utility jar yaps build ws jar yaps build war yaps build ear gt lt target name yaps build client jar gt lt echo message Creates the Client jar gt lt jar jarfile yaps client jar gt lt fileset dir yaps classes dir gt lt include name com yaps petstore client class gt lt include name com yaps petstore entity class gt lt include name com yaps petstore uti 1 class gt lt include name com yaps petstore exception class gt lt include name com yaps petstore stateless Remote class gt lt include name org class gt lt fi leset gt lt j
112. m me utilis de pair avec le pattern DAO est un tra vail fastidieux r p titif qui consomme beaucoup de temps Mapping objet relationnel Le principe du mapping objet relationnel ORM ou odject relational mapping consiste d l guer l acc s aux donn es des outils ou fra meworks externes Son avantage est de proposer une vue orient e objet d une structure de donn es relationnelle lignes et colonnes Les outils de mapping mettent en correspondance bidirectionnelle les donn es de la base et les objets Pour cela ils utilisent des m canismes de configuration pour ex cuter les requ tes SQL Il existe plusieurs API et frameworks permettant de faire du mapping objet relationnel les entity beans 2 x Hibernate TopLink JDO et JPA Pour stocker les donn es de l application YAPS Pet Store le choix se porte logiquement sur JPA la nouvelle API de persistance de Java Enterprise Edition Java Persistence API La persistance des donn es en EJB 3 a t compl tement r architectur e au travers de JPA Java Persistence API Alors que nous parlions de composants persistants en EJB 2 x JPA se recentre sur de simples classes Java En EJB 2 x la persistance ne pouvait tre assur e qu l int rieur du conteneur alors qu avec JPA elle peut tre utilis e dans une simple appli cation JSE Java Standard Edition Il fallait auparavant utiliser le m ca nisme complet de cr ation des EJB pour obtenir un entity bean
113. manag l appel aux m thodes set mettra jour les attributs de l objet mais ces mises jour ne seront pas synchronis es dans la base de donn es Exemple de mise jour qui choue Customer customer em find Customer class 1234 em clear customer setFirstnameC Antonio customer setLastname Goncalves Revenons notre stateless bean Les entity beans sont instanci s et leurs attributs mis jour par les interfaces graphiques L appel aux m thodes set s effectue donc sur des entity beans d tach s Comment rendre effectifs ces changements Tout simplement en rattachant l entity bean l aide de la m thode EntityManager merge Dans le code suivant la m thode pour mettre jour un client poss de deux param tres un entity bean Customer et un entity bean Address Les attributs de ces deux entity beans ont t mis jour par l application cliente l aide des setters L appel PEJB est effectu en passant ces entity beans en param tres Ensuite le stateless bean a en charge de relier les beans entre eux et de les rattacher l entity manager qui synchronisera les changements en base de donn es PERSISTANCE Avantages des outils de mapping Pour manipuler les entity beans nous n avons crit aucun ordre SQL Dans l exemple de la mise jour on voit bien qu il est plus facile d appeler une m thode set plut t que d crire un ordre SQL update 115 5 Traiteme
114. na pas besoin d impl menter une interface G n rer les artefacts serveurs Cette classe d velopp e BarkBank doit g n rer les artefacts de son ser vice c est dire le document WSDL et les classes Java qui formeront les messages d changes XML Pour cela on utilise l utilitaire wsgen 4 Artefact Un artefact est compos de l ensemble des docu ments n cessaires un service web On peut citer par exemple le document WSDL ou encore les classes Java qui formeront les messages d changes XML PR CISION Service web et EJB Il y a deux moyens d impl menter un service web Le premier repose sur les servlets o une simple classe annot e est d ploy e dans un conteneur web dans un WAR L autre moyen repose sur les EJB sans tat qui sont annot s la fois par Stateless et GWebSevice puis d ploy s dans un conteneur EJB dans un jar ou ear Dans cet ouvrage nous utiliserons la premi re solution 245 9 changes B2B Les Cahiers du Programmeur Java EE 5 ANNOTATION OneWay Les m thodes annot es GOneWay n ont pas de valeur de retour Il n y a donc pas de classes Response g n r es pour ce type de m thodes Figure 9 1 Artefacts serveur du service web de validation La classe ValidateCreditCard repr sente les param tres de la m thode de valida tion Elle utilise les annotations JAXB XmlRootE lement et XmlElement pour g n rer un message XML Les noms de
115. ou balises personnalis s Custom Tag permettent de d finir ses propres balises bas es sur XML de les regrouper dans une biblioth que et de les r utiliser dans des JSP C est une extension de la technologie JSP apparue partir de la version 1 1 des sp cifications Exemple d utilisation d une balise choose dans une page JSP lt taglib uri http java sun com jsp jstl core prefix c lt html gt lt c choose gt lt c when test empty sessionScope cart gt Le panier est vide lt c when gt lt c otherwise gt Le panier contient des articles lt c otherwise gt lt c choose gt lt html gt 37 2 Architecture de l application Les Cahiers du Programmeur Java EE 5 AURE JSF et Struts LQ Bill Dudney Jonathan Lehr Bill Willis LeRoy Mattingly Mastering JavaServer Faces 2004 Wiley Jean Charles Felicit D veloppement Java sous Struts ENI 2006 gt http struts apache org Le chapitre 7 se concentre sur le d veloppement web de l application YAPS Pet Store Chaque API y est expliqu e ainsi que la mani re de les assem bler pour obtenir un site web JAVAMAIL Les protocoles de messagerie Le protocole Smtp Simple Mail Transfer Pro tocol est le protocole standard de messagerie Le protocole POP Post Office Protocol permet d aller r cup rer son courrier sur un serveur distant et Imap Internet Message Access Protocol est une alternative POP offrant plus
116. peut acc der son profil et le mettre jour Le managed bean AccountController La gestion du compte client se fait via le managed bean AccountController Celui ci invoque EJB Stateless CustomerBean qui manipule les donn es du client entity beans Customer et Address Le diagramme de classes suivant nous montre ces interactions jsf customer com yaps petstore com yaps petstore stateless lt lt control gt gt AccourtCorntroller login String password String password2 String customer Customer address Address lt lt entity gt gt lt lt entity gt gt Figure 7 13 HdoSignOff String Cater Address Diagramme du AccountController et de ses d pendances 195 7 Interface web Les Cahiers du Programmeur Java EE 5 L injection de l interface locale de l EJB est r ali s e l aide de l annotation GEIB Attributs et entity beans manipul s par le mana ged bean partir d un login et d un mot de passe cette m thode permet d identifier un client Cette m thode cr e un client L internaute saisit ses informations dans un formulaire ces don n es sont mapp es sur les entity beans Customer et Address du managed bean pour ensuite tre pass es l EJB Mise jour du compte client Cette m thode d connecte l utilisateur du site Pour cela elle utilise le contexte JSF FacesContext pour r cup rer la session HTTP et l invalider Extrait du AccountCo
117. peuvent ensuite tre utilis es la compilation ou l ex cu tion pour automatiser certaines taches Une annotation peut tre utilis e sur plusieurs types d l ments paquetage classe interface num ration annotation constructeur m thode param tre attribut de classe ou variable locale Exemple d utilisation d annotations CeciEstUneAnnotationSurUneClasse public class MaClasse UneAnnotationSurUnAttribut private Date unAttribut SurUneMethode private void maMethode return Comme vous le verrez tout au long de cet ouvrage Java Enterprise Edition 5 utilise tr s fr quemment les annotations Nous aurons l occasion de nous y attarder plus longuement par la suite JAVA5 JConsole La JConsole est un utilitaire de surveillance fourni avec Java SE 5 Li e aux technologies JMX et MBean la JConsole permet de surveiller et super viser les applications Java occupation m moire threads en cours classes charg es tout comme prendre en charge certaines op rations appeller le garbage collector changer le niveau des logs INFORMATION Acronymes La plate forme Java est extr mement riche Elle a donc tendance a utiliser abondamment et a abuser d acronymes en tout genre souvent commen ant par la lettre J Vous trouverez en annexe un lexique d acronymes et de sigles 27 2 Architecture de l application Les Cahiers du Programmeur Java EE 5 APPROFONDIR
118. plut t qu une application ce qui permet de faire du d couplage logiciel sans se soucier de la disponi bilit de cette application chaque syst me poss de son propre cycle de vie Le client a de la part du broker de messages une garantie de qualit de service certitude de remise au destinataire d lai de remise etc LAPI JMS contenue dans le paquetage javax jms d finit plusieurs entit s e Un provider c est un outil un broker de messages qui impl mente l API JMS pour changer les messages entre deux clients Le serveur GlassFish utilise l impl mentation Sun Java System Message Queue MQ e Un client classe Java qui utilise JMS pour mettre et ou recevoir des messages Un client envoie un message vers une file d attente et le client destinataire reste l coute d une file d attente pour recevoir le message Le transfert du message et sa persistance sont assur s par le provider e Un message donn es chang es de mani re asynchrone entre les com posants Il existe plusieurs types de messages texte objet binaire etc e Les objets administr s les ressources rechercher dans l annuaire JNDI du provider telles que les fabriques de connexions et les desti nations Les messages Pour dialoguer les clients JMS s changent des messages c est dire qu un client exp die un message vers une file d attente et qu un client destinataire ex cutera un traitement la r ception
119. public interface OrderBy String valueQ default 4 Cha ne de caract res contenant les noms des attributs de l entity bean sur lesquels effectuer le tri Ainsi pour classer la liste des produits dans l ordre ascendant du nom on utilise la cha ne de caract res name ASC ou name DESC pour l ordre descendant On peut aussi utiliser plusieurs attributs comme name ASC description DESC pour trier dans l ordre croissant des noms et d croissant de la description 85 4 Objets persistants Les Cahiers du Programmeur Java EE 5 Lorsqu on acc de aux produits de la cat gorie la liste est ordonn e en mode ascendant sur le nom des produits name ASC L entity bean produit a un attribut nom name sur lequel l ordonnancement se fait L attribut cascade est pr sent dans les annota tions que nous avons vu pr c demment ManyToOne OneToMany et OneToOne 86 Les produits d une cat gorie sont class s dans l ordre ascendant du nom Entity public class Category OneToMany mappedBy category fetch FetchType LAZY OrderBy name ASC private List lt Product gt products Cas Entity public class Product private String name ManyToOne fetch FetchType EAGER private Category category re Cascade Parfois lorsqu on effectue une op ration sur un entity bean on souhaite que celle ci se propage sur les associations On parle alors d act
120. public abstract String getValeur throws RemoteException public abstract void setValeur String valeur throws RemoteException public String ejbCreate String cle throws RemoteException CreateException setCle cle return null public void ejbPostCreate String cle throws CreateException public void setEntityContext EntityContext entityContext throws EJBException public void unsetEntityContext throws EJBException public void ejbRemove throws RemoveException EJBException public void ejbActivate throws EJBException public void ejbPassivate throws EJBException public void ejbLoad throws EJBException O public void ejbStore throws EJBException Comme vous pouvez le constater il ny a ni ordres SQL ni attributs ni colonnes ou tables dans lesquelles les donn es doivent persister La plu part de ces informations sont d crites dans le fichier norm ejb jar xm1 ainsi que dans des fichiers sp cifiques au conteneur d EJB jbosscmp jdbc xm1 pour JBoss Dans le fichier ejb jar xm1 on d clare le nom de l entity bean ainsi que les interfaces et classes d impl mentation La balise persistence type avertit le conteneur qu il doit g rer la persistance Container pour les CMP ou Bean pour les BMP La cl primaire que nous utilisons est de type String Dans les balises cmp field on d clare les attributs c1 et valeur du composant puis on indique au conteneur l
121. que l instance fonctionne en vous rendant l adresse http localhost 8080 Pour acc der la console d administration allez l adresse http localhost 8282 puis saisissez le nom de l utilisateur admin et son mot de passe adminpwd Pour arr ter l instance tapez la commande suivante PETSTORE_HOME ant f admin xml stop domain Configuration de la base de donn es Apr s avoir cr un domaine sp cifique application YAPS Pet Store nous allons en faire de m me pour la base de donn es Derby Pour cela il nous faut tout d abord la d marrer l aide de la commande PETSTORE_HOME ant f admin xml start db Vous verrez alors appara tre un cran affichant les param tres de Derby Pour arr ter la base de donn es tapez la commande suivante XPETSTORE_HOME ant f admin xml stop db Cr ation d un pool de connexions Dans un premier temps nous allons cr er un pool de connexions dans le serveur GlassFish pour les t ches qui vont suivre GlassFish et la base de donn es doivent tre d marr s Pour cela utilisez la commande XPETSTORE_HOME ant f admin xml create connection pool Cela a pour effet de cr er le pool de connexions petstorePool avec Puti lisateur dbuser et le mot de passe dbpwd Pour v rifier que le pool est bien cr vous pouvez soit utiliser la commande PETSTORE_HOME ant f admin xml list connection pool soit utiliser la console d administration http localhost
122. r pertoire cou rant Pensez donc a bien vous positionner dans le r pertoire souhait depuis votre fen tre de commande avant de lancer la commande de d compression vue pr c demment lib jdic javadoc org Jde ktop adic Miletupes class use fssociationException html di Mice ciationNotRegisteredExcept ion html filetypes cla MissociationService htnl RegicterFailedE Filet ypes pac frame htnl Lib jdic javadocsor Wupdatecenter lib jdic javadoc org Nupdatecenter 1ib jdic javadoc org jde filetypes cla h updatecenter 1ih jd ic javadac jde ption html ich updatecenter1ib jdic javadoc ong hrign ter g lassf ish up iy lass ish uplate iq Lass ish up by lass f is hvupr jdic jav ki lassf ish updatccenterslib idicSjavado ig lace f ish up enter 1lib jdic javado iy lasst ishsupdatecenter Lib jdic javado fis recenter 1lib jdic javado enter lib jdic javado lib jdic javado Lib jdic javado lib jdic javado enter lib jdic anteri libs enter lib ssfis h update y is huulat jl ic par kaye jlassfishs dic RENDHE html ishsuplatecenter Ntray 11 pdatecenter dic WinMsitrapper d1l thx heme be an v t 1 0 i jar ig La 3Fioh updatecenter Libsupdatecenter qui jar glace f ish updatecenter 1lib updatecenter install ig lassf ish updatecenter lib updatecentc a ig lace f ish updatecenter LICENSE txt ig lassfish updatecenter HEADAL installation complete IF Toole Glacefish gt Ne tray pac unn
123. re Par exemple ci apr s la liste des articles r pondant au crit re adult YAPS PetStore Mozilla Firefox DER Fichier Edition Attichage Aler Marquepagcs Outils antonio goncalves SSA YAPS Pet Store Yet Another Pet Store Pets Items found for keyword adult Birds temale Adult Birds Amazon Parrot 120 0 Cats Male Adult Birds Amazon Parrot 120 0 Female Adult Birds Finch 80 0 Mais Adult Birds Finch 750 h female Adult Cats Manx 120 0 Reptiles Malo adult Cats Many 120 0 Female Adult Cats Persian 90 0 Male Adult Cats Persiar 70 0 Female Adult Dags Chihuahua 100 0 female Adult Dogs Chihuahua 1UU U Fomale Adult Fish Koi 12 0 Male Adult Fish Kui 120 hais Adult Reptiles Iguana 160 0 female Adul Reptiles Iguana 150 0 Male Adult Reptiles Rattlesnake 20 0 Female Adult Reptiles Rattlesnake 20 0 Dogs Fish 7 The YAPS Pet Store Demo is a fi fictional sampie application YA EA x ET Deroy P Jrowtato Se cr er un compte R sum Permet un internaute de se cr er un compte dans le syst me et de devenir ainsi un client Acteurs Internaute Description Ce cas d utilisation diff re du cas G rer les clients dans le sens o linternaute ne peut renseigner que ses propres donn es Pour se cr er un compte linternaute doit saisir un login un mot de passe et ressaisir un
124. saisit son login et son mot de passe Il est reconnu par le syst me qui affiche alors son nom et pr nom Lorsque le client se d connecte il redevient internaute jusqu sa prochaine connexion Exceptions Si le login n est pas connu du syst me une exception doit tre lev e Si le mot de passe n est pas le bon une exception doit tre lev e Maquettes En cliquant sur le lien Sign on linternaute est redirig vers une page lui demandant de s authentifier Apr s avoir saisi son identifiant et son mot de passe il est dirig vers la page d accueil YAPS PelStore Sign In Mozilla Firefox Fichier Edtion Affichage Aller Marque pages Outs w antonio goncalves 22 YAPS Pet Store Birds Cats Dogs Fish Yes No I would like to sign up for an account Are you returning customer Reptiles Login james Login sas Password Password Sign In Password Repeat The YAPS Pet Store Demo is 2 fictional sample application Figure 1 11 Saisie du login et du mot de passe YAPS PelStore Mozilla Firefox EEE Fichier Edtion Affichage Aler Marque pages Outs ls antonio goncalves 22 dccount Cart Sign off Birds Cats Dogs Fish Reptiles The YAPS Pet Store Demo is C Figure 1 12 pene ae La page d accueil affiche le nom et pr nom du client 1 Pr sentation de l tude de cas Les Cahiers du Programmeur Java EE 5 16 Figure 1 13 Les co
125. schema gt lt property name jdbc pool name value application name Pool gt lt property name jdbc datasource name value jdbc application name DS gt lt property name imq home value glassfish home imq gt lt property name imq lib value imq home lib gt lt property name jms connection factory name value jms application name ConnectionFactory gt lt property name jms topic value jms topic order gt lt path id classpath gt lt pathelement location db 1lib derbytools jar gt lt pathelement location db 1ib derbyclient jar gt lt pathelement location db 1ib derby jar gt lt path gt lt target name start domain gt lt echo message Starting application name domain for glassfish home gt lt exec executable asadmin failonerror true dir glassfish home gt lt arg line start domain gt lt arg line echo echo gt lt arg line application name gt lt exec gt lt target gt lt target name stop domain gt lt echo message Stopping application name domain for glassfish home gt lt exec executable asadmin failonerror true dir glassfish home gt lt arg line stop domain gt lt arg line echo echo gt lt arg line application name gt lt exec gt lt target gt lt target n lt echo m lt exec e lt arg lt arg lt arg lt exec gt lt target gt lt tar
126. sollicit mais de fa on plus discr te Le d veloppeur ma plus besoin de manipuler directement PAPIJNDI Linjection de EJB se fait gr ce annotation javax ejb EJB Code de l annotation javax ejb EJB package javax ejb Target value TYPE METHOD FIELD Retention value RUNTIME public interface EJB String name default String description default String beanName default Class beanInterface String mappedName default En annotant un attribut avec EJB le conteneur l initialise automatique ment avec la r f rence vers EJB ou plus pr cis ment son interface locale Cette initialisation se produit avant qu aucune autre m thode ne soit appel e Notre code ne contient alors plus aucune API technique ARCHITECTURE Principe de l injection Martin Fowler est l origine du terme Dependency Injection ou injection Au lieu de faire un lookup de l interface de l EJB celle ci est inject e par le conteneur dans le managed bean gt http Awww martinfowler com articles injection html Managed bean Lookup JNDI Figure 7 5 L injection S applique une classe une m thode ou un attribut Nom JNDI de l EJB utilis Description Nom de l EJB Correspond au nom d fini dans l annotation Stateless de l EJB Classe de l interface retourn e par le lookup R f rence l EJB sp cifique au serveur d appli cations Non portable 179
127. son tour divis en articles Ce sont ces arti cles qui sont propos s et vendus aux clients Par exemple le produit Caniche regroupe les articles suivants caniche femelle adulte caniche male adulte caniche femelle 3 mois caniche male 3 mois Chaque article est d fini comme suit e identifiant unique de l article nom exemple Caniche 3 mois femelle prix unitaire de l article image elle repr sente l article en question Exceptions Valeur unique Si cette donn e existe d j dans le syst me une excep tion doit tre lev e Donn e obligatoire Si cette donn e est manquante une exception doit tre lev e 1 Pr sentation de l tude de cas Les Cahiers du Programmeur Java EE 5 Pet Store File Custumer Catalog Order Luuk amp Feel List categories List products List tems Maquettes L application client riche de l employ permet de g rer tous les l ments du catalogue c est dire les cat gories les produits et les articles Ci apr s les crans permettant d afficher la totalit du catalogue ainsi que de manipuler individuellement chacun des l ments le composant ID nit Cast Product Name 32 Fema Manage Category 8U U Finch i 120 0 Amazon Parrot 30 Fema Manage Product 28 Fema 26 Fema Manage Item 90 0 Persian Ferale Adult 120 NMany 800 23 Female Adult 150 0 Iguana
128. sur un serveur physique distinct et les faire communi quer au travers d un r seau Pour ne pas compliquer le d ploiement et l ex cution de l application nous utiliserons donc une seule et m me instance du serveur GlassFish pour h berger la totalit des composants fy barkbank validator H ObjectFactory H E package info java 0 ValidateCard 0 amp ValidateCardResponse D amp Validation L 0 amp ValidationService bay petex transport 2 fa Deliverltems WD Delivery L D DeliveryPlace H D amp DeliveryService L a ObjectFactory L il package info java g Gai src t Figure 9 10 Classes g n r es pour l application YAPS Pet Store 255 9 Echanges B2B Les Cahiers du Programmeur Java EE 5 ui lt lt boundary gt gt PetstoreF rame lt lt Delegate gt gt gt CustomerDelegate gt lt lt Delegate gt gt OrderD elegate i i i i 1 1 1 k j i lt lt entity gt gt Item lt lt entity gt gt Address lt lt entity gt gt lt lt com ponent gt gt 53 Customer CustomerB ean lt lt com ponent gt gt 53 lt centity gt gt Ordenan CreditCard lt stateful 1 lt lt component gt gt CartLine ShoppingCartB ean Local ANT Les t ches dans build xml et admin xml Les fichiers contenant les taches Ant build xml et admin xml sont d
129. un syst me de cache Service Locator avec cache et singleton public class ServiceLocator private Context initalContext private Map lt String Object gt cache private static ServiceLocator instance new ServiceLocator public static ServiceLocator getInstance return instance private ServiceLocator throws ServiceLocatorException try initalContext new InitialContext cache new HashMap lt String Object gt Q catch Exception e throw new ServiceLocatorException e public Object getRemotelnterface String jndiName throws ServiceLocatorException Object remoteInterface cache get jndiName if CremoteInterface null try remoteInterface initalContext lookup jndiName cache put jndiName remoteInterface catch Exception e throw new ServiceLocatorException e return remoteInterface Business Delegate Nous venons d isoler le code JNDI dans un Service Locator il ne nous reste plus qu d l guer son appel par un Business Delegate L id e de ce pattern est d avoir une classe Business Delegate par stateless session bean qui red finit chaque m thode distante Les interfaces graphiques nutilisent donc que les m thodes des objets Delegate sans se pr occuper de la fa on de r cup rer la r f rence sur l interface distante Ce design pattern permet de regrouper un seul endroit tous les appels distants Nous disposerons donc de trois classes
130. utilise une m thode m tier pour v rifier que le mot de passe saisi par le client lors de la connexion est bien le m me que celui stock en base de don n es Cette m thode m tier est appelable par des composants externes la m thode est publique et utilise pas d annotations de callback Un client poss de un lien unidirectionnel avec l entity bean Address Code de l entity bean Customer package com yaps petstore entity customer Entity Table name t_customer 4 Entity bean Customer rendant persistantes public class Customer implements Serializable ses donn es dans la table t_customer 93 4 Objets persistants Les Cahiers du Programmeur Java EE 5 Un client poss de un identifiant unique un nom un pr nom un num ro de t l phone et une adresse e mail Le login et le mot de passe sont utilis s pour se connecter au syst me partir de la date de naissance on calcule l ge du client dans la m thode calculateAge Cet attribut n est pas stock en base de donn es transient Association unidirectionnelle vers l adresse charg e automatiquement Avant d ins rer ou de mettre jour les donn es en base cette m thode est appel e Elle permet de valider les attributs de l entity bean et renvoie une exception en cas d incoh rence Lorsque l entity bean est charg PostLoad ou avant que ses donn es ne soient ins r es ou mises jour on calcule l g
131. 1 Mare Fleury Bill Gates Steve Jobs 4 Antuniv Guncalves 545 123 45 marca yhnss org Las Angeles USA 654 046 12 bill gates microsof com lAhabama USA 540 157 15 steve jobs apple com San Francisco USA 487 487 21 anluniv guncalves ives USA Update Delete L G rer le catalogue R sum Permet un employ de cr er modifier supprimer rechercher visualiser le catalogue des articles Acteurs Employ Description Le catalogue d articles de la soci t YAPS est divis en cat gories Bien qu elle envisage d tendre sa gamme YAPS ne vend actuellement que cing cat gories d animaux poissons chiens chats reptiles et oiseaux Une cat gorie est d finie par les donn es suivantes e identifiant unique de la cat gorie e nom exemple Poisson Chien Chat e description exemple un chien est un animal affectueux qui parta gera avec vous des moments de bonheur Chacune de ces cat gories est divis e en produits Par exemple pour les chiens on peut avoir les produits suivants bulldog caniche dalmatien labrador l vrier Chaque produit est d fini comme suit e identifiant unique du produit nom exemple Bulldog Caniche Dalmatien e description exemple un caniche est un petit chien affectueux qui ne prendra pas trop de place et saura vous r conforter par sa tendresse Enfin chaque produit est 4
132. 1 18 Saisie de l adresse de livraison et du mode de paiement Figure 1 19 Confirmation de la cr ation du bon de commande 21 1 Pr sentation de l tude de cas Les Cahiers du Programmeur Java EE 5 22 Cr er un bon de commande R sum Une fois le panier lectronique valid par le client un bon de commande est cr Acteurs PetEx Pr conditions Le client ach te des articles et valide son panier lectronique voir cas d utilisation Acheter des articles Description Lorsque le panier lectronique du client est valid le syst me cr e auto matiquement un bon de commande Ce dernier contient toutes les informations n cessaires pour tre trait un num ro de bon de commande e la date de cr ation de ce bon de commande e les r f rences du client qui a achet les articles e les lignes de commande une ligne de commande r f rence l article achet et sa quantit Il y a autant de lignes de commande que d arti cles contenus dans le panier lectronique e les informations de la carte bancaire Vadresse de livraison des animaux Cette cr ation du bon de commande entraine plusieurs traitements 1 Le bon commande est imprim puis stock dans les archives de la soci t YAPS 2 Toutes les informations n cessaires l acheminement des animaux sont envoy es au transporteur PetEx de mani re lectronique au format XML PetEx livre ensuite les animaux aux nouve
133. 1 et build xml gt http Awww antoniogoncalves org TELECHARGER GlassFish V2 gt https glassfish dev java net public downloadsindex html 52 Ant 1 7 Linstallation de Ant se limite 4 d compresser un fichier Selon la plate forme et le mode de compression utilis s vous t l chargerez le fichier suivant e apache ant 1 7 0 bin tar bz2 e apache ant 1 7 0 bin tar gz e apache ant 1 7 0 bin zip D compressez le fichier t l charg dans un r pertoire et positionnez la variable ANT_HOME par exemple set ANT_HOME F Too1s Java Ant apache ant 1 7 0 Rajoutez le r pertoire ANT_HOME bin dans la variable syst me PATH V rifiez que l interpr teur ant est reconnu en tant que commande interne en tapant la commande ant version dans une fen tre de commande ex Open JEE5 ojx F N gt echo ANT_HOMEz F Tools Java fnt apache ant 1 7 8 F gt ant version Apache Ant version 1 7 8 compiled on December 13 2006 Fi Une fois Ant install nous pourrons l utiliser pour administrer et d ve lopper l application YAPS Pet Store Les diff rentes t ches Ant sont regroup es dans deux fichiers distincts admin xml contient les t ches d administration build xml les t ches pour le d veloppement de l application GlassFish V2 L installation du serveur GlassFish n cessite plus d op rations que les ins tallations pr c dentes mais reste tout de m me tr s simple Tout d ab
134. 10 size 12 gt lt h commandButton value Create new account action account doCreateNewAccount type submit gt Le formulaire de saisie Cette page permet aux clients n ayant pas de compte de s en cr er un en saisissant leurs informations identit et adresse de domiciliation YAPS PetStore Create Customer Mozilla Firefox Fichier Edition Affichage Historique Marque pages Outils I Google Q Une antonio goncalves Birds Cats Dogs Fish Reptiles Account Cart Sign off Yet Another Pet Store Create Your Account Personal information Login antonio Firstname Antonio Lastname Goncalves Email goncalves gmail com Telephone Streeti 32 Broad Street Street2 city 5an Franasco State Zipcode Country Figure 7 16 createaccount jsp affiche un formulaire de cr ation de compte 201 7 Interface web Les Cahiers du Programmeur Java EE 5 Extrait de la page createaccount jsp lt h2 gt Create Your Account lt h2 gt lt h messages layout table styleClass error gt readonly true gt lt h form gt Identit du client gt lt h3 gt Personal information lt h3 gt Tableau de deux colonnes gt lt h panelGrid columns 2 gt Login nom pr nom adresse e mail et num ro gt lt h outputText value Login gt de t l phone Remarquez qu
135. 1604 2005 250 p Ubuntu efficace L Daicot et al N 12003 2 dition 2007 360 p avec CD Rom Gimp 2 efficace C Gemy N 11666 2005 360 p avec CD Rom OpenOffice org 2 efficace S Gautier C HARDY F Lasse M PINQUIER N 11638 2006 420 p avec CD Rom R ussir un projet de site Web 4 dition N Chu N 11974 2006 230 p Home cin ma et musique sur un PC Linux V FaBRE N 11402 2004 200 p SPIP 1 9 Cr er son site avec des outils libres Perline A L Quatravaux et al N 12002 2 dition 2007 376 p OpenOffice org 2 Calc S GAUTER avec la contribution de J M THomas N 11667 2006 220 p OpenOffice org 2 Writer S GAUTER avec la contribution de G VeyssieRE N 11668 2005 248 p Antonio Goncalves Java EE 5 EYRO LLES DITIONS EYROLLES 61 bd Saint Germain 75240 Paris Cedex 05 www editions eyrolles com Avec la contribution de J rome Moli re DANGER Le code de la propri t intellectuelle du 1 juillet 1992 interdit en effet express ment la photocopie usage collectif sans autorisation des ayants droit Or cette pratique s est g n ralis e notamment dans les tablissements d enseignement provoquant une baisse brutale des achats de livres au point que la possibilit m me pour les auteurs de cr er des uvres nouvelles et de les faire diter correctement est aujourd hui menac e En application de la loi du 11 mars 1957 il est interd
136. 4 lt to view id gt searchresult jsp lt to view id gt 13 4 lt navigation case gt lt navigation rule gt Le contr leur de JSF se charge d appeler la page searchresult jsp Celle ci n a plus qu it rer la liste des articles contenus dans l attribut items du managed bean et en afficher les informations Extrait de la page searchresult jsp affichant la liste des articles lt h dataTable value catalog items var item gt 14 4 lt h column gt lt lt h outputText value item name gt lt h column gt lt h column gt 4 lt h outputText value item product category name gt lt h outputText value item product name gt lt h column gt lt h column gt 4 lt h outputText value item unitCost gt 15 lt h column gt lt h dataTable gt partir de n importe quelle page on applique cette r gle de navigation Cl de navigation Page de destination JSF Le contr leur FacesServlet Comme vous pouvez le voir dans cet exemple nous ne manipulons pas directement la FacesServlet La servlet est d ploy e dans le conteneur et intercepte les requ tes HTTP sans que nous ayons interagir avec It re la liste d articles sous forme de tableau Affiche le nom de l article dans une colonne Le langage d valuation permet d obtenir les attributs des objets li s item getProduct getCategory getName Affiche le prix de
137. 4 Diagramme du ShoppingCartController et de ses d pendances RETOUR D EXPERIENCE Les noms des paquetages Vous l aurez remarqu le nom de nos paquetages se rapporte aux tech nologies utilis es Ainsi le paquetage entity comporte tous les entity beans de l application stateless tous les stateless session beans etc Ce d coupage en technologie est int ressant pour un apprentissage rapide un simple nom voque une API ou une sp cification Ce mod le a donc t utilis pour une fois de plus simplifier la compr hension de Java EE 5 et vous aider vous rep rer rapidement dans le code En revanche ce d coupage est proscrire dans un projet Imaginez que vous laissiez les stateless beans pour utiliser de simples Pojo ou que les entity beans se tranforment en classes Hibernate Vous devriez alors changer le nom des paquetages Il est pr f rable de prendre des noms plus g n riques tels que business pour la couche de traitements ou domain pour les objets m tiers On peut aussi regrouper les classes par domaines plut t que par couches On aurait ainsi un paquetage catalogue qui comporterait les stateless beans les entity beans les exceptions etc li s au catalogue Le managed bean Le managed bean ShoppingCartController fait le lien entre les pages et les appels aux composants m tier Il comporte toutes les m thodes li es la gestion du panier ajout et suppression d un article qu il d l gue au stateful bean
138. 9 Navigation entre pages du catalogue A partir de la liste des articles on navigue vers la lt from view id gt showitems jsp lt from view id gt page affichant le d tail d un produit 191 7 Interface web Les Cahiers du Programmeur Java EE 5 La page d affichage des produits En cliquant sur une cat gorie la page showproducts jsp affiche la liste de ses produits YAPS PetStore Products Mozilla Firefox Fichier Edition Affichage Historique Marque pages Outils La ua antonio goncalves YAPS Pet Store Yet Another Pet Store Pets Products for category Birds Birds Amazon Parrot Cats Great companion for up to 75 years Finch Dogs Great stress reliever Fish Reptiles Figure 7 10 The YAPS Pet Store Demo is a La page sh owprodu cts isp fictional sample application oe affiche les produits IKA lt J Derby e POWERED d une cat gorie Extrait de la page showproducts jsp Cette page utilise les biblioth ques de balises gt lt taglib uri http java sun com jsf core prefix f gt JSF lt taglib uri http java sun com jsf html prefix h lt f view gt Titre de la page avec le nom de la cat gorie gt lt h2 gt Products for category lt h outputText value catalog category name gt lt h2 gt Les ventuels messages d erreurs sont affich s gt lt h messages layout table styleClass error
139. AR autonome stateful jar L application d ployer sur le serveur est packag e dans le fichier petstore ear qui contient e le fichier des EJB Stateless stateless jar e PEJB Stateful stateful jar lt lt entity gt gt Product lt lt entity gt gt Item lt lt entity gt gt Address lt lt entity gt gt OrderLine lt lt entity gt gt CreditCard lt lt com ponent gt gt 63 ShoppingCartB ean Hpetstore ear E lib utility jar entity jar LC persistence xml stateless jar amp stateful jar petstore war amp ES WEB INF F J taces config xml GI web xml Figure 8 11 Contenu du fichier petstore ear 231 8 Gestion du panier lectronique Les Cahiers du Programmeur Java EE 5 REMARQUE Stateful dans l arbre JNDI e les entity beans entity jar et les classes utilitaires accessibles depuis le sous r pertoire lib Apr s le d ploiement si vous consultez l arbre 3 e _ INDI partir de la console GlassFish vous noterez l application web contenue dans le fichier petstore war avec ses des que le stateful bean n y appara t pas En effet cripteurs de d ploiement web xm1 et faces config xml pes Flamed mee ices ia Vous pouvez maintenant utiliser l application web pour acheter des ani ne peut donc pas tre recherch lookup par un maux domestiques et l interface Swing pour consulter les bons de com client distant mande qui sont cr s
140. B EJB Les stateless beans 2 x Pour vous faire une id e des modifications appor t es a la sp cification EJB retrouvez en annexe le code source d un stateless bean 2 1 Cette annotation s applique une classe Sp cifie la liste des interfaces distantes sous forme de tableau de classes Cet attribut est uti lis si la classe du bean impl mente plus d une interface distante 107 5 Traitements m tier Les Cahiers du Programmeur Java EE 5 APPROFONDIR Que signifie locale Bien que nous n ayons pas encore vu le d ploie ment de l application la notion d interface locale est fortement li e ce processus L application YAPS Pet Store va tre d ploy e dans un fichier ear Enterprise Archive qui contient tous les com posants de l application EJB application web entity bean L interface locale d un EJB est visible et utilisable l int rieur de ce fichier ear Si on d ploie deux applications sur le m me serveur A ear et B ear l interface locale d un EJB dans A ne pourra pas tre vu par un EJB dans B La visibilit n est donc pas directement li e au serveur d applications mais l Enterprise Archive ear 108 DTO design pattern ou anti pattern Aussi connu sous le nom de Value Object VO le design pattern Data Transfert Object permet de transporter des donn es du client au serveur et inversement en r duisant les appels r seaux Ce design pattern est commun me
141. BUILD SUCCESSFUL ANT Les t ches dans build xml et admin xml Les fichiers contenant les t ches Ant build xml et admin xml sont d crits en annexe Figure 6 13 Ex cution de la t che yaps compile Pour pouvoir compiler notre application requiert l utilisation de cer taines librairies du serveur GlassFish toutes les classes et annotations de Java EE 5 import es dans notre code La t che Ant se charge de rajouter ces librairies externes dans le classpath Vous retrouverez la liste de ces librairies en annexes dans le fichier bui1d xm1 Packager Une fois les classes compil es il est n cessaire de les packager dans des fichiers d archive Ces archives constituent le moyen standard d empa queter toutes les parties de l application bytecode Java images fichiers de propri t s etc afin d tre ex cut es ou d ploy es On ex cute la tache yaps build pour cr er les fichiers d archive de l interface graphique et de l application serveur Ces fichiers sont plac s dans le r pertoire build at Open JEE5 E YapsPetstoredant yaps build Buildfile build xml lyaps build client jar Lecho Creates the Client jar jar Building jar E YapsPetstore yaps build petstore jar iyaps build stateless jar echo Creates the EJB Statele jar Building jar jar E YapsPetstore yaps build stateless jar yaps build entity jar Lecho Creates the EJB Entity jar jar Building jar E
142. Boulevard Street 2 City San Francisco F Lists all the customers FirstName LastName Telephone Email City Marc Fleury 545 123 45 marci boss org Los Ange USA 1654 046 12 bill yales ricrus Al Figure 6 5 Actions possibles sur le client A Custumer 3 Update Customer 3 Update Steve Jobs 30 11 1964 41 Jaan tas 15 steve lobs apple com Identification Login job Password Address Street 1 154 Star Doulevard Street 2 San Francisco WC City State Zipcode Country Create Update Delete 147 6 Ex cution de l application Les Cahiers du Programmeur Java EE 5 Figure 6 6 Delegate et interface distante REMARQUE Le code des Delegate Le code des Delegate est assez simple et r p titif Pour des raisons de clart le code ainsi que les diagrammes de classes des CatalogDelegate et OrderDelegate ne seront pas d taill s Affichage des erreurs Chacune de ces actions un clic sur un bouton appelle une m thode de la classe CustomerDelegate en passant les param tres attendus Ci apr s un diagramme de classes montrant la r ciprocit entre le Delegate et l interface de l EJB lt lt Delegate gt gt Customer elegate createCustomer customer Customer address Address Customer findCustomer customerld Long Customer
143. DI JMS Acquittement de message Lorsqu on cr e une session on peut sp cifier le mode d acquittement des messages Il en existe trois e acquittement automatique Session AUTO_ACKNOWLEDGE e acquittement fait par le client Session CLIENT_ACKNOWLEDGE e duplication des acquittements tol r e Session DUPS_OK_ACKNOWLEDGE L injection n est pas utilis e On recherche la fabrique de connexions et le Topic d clar s dans l annuaire JNDI de l ins tance Glassfish On se connecte au provider de messages Le premier param tre true signifie que la Session est transactionnelle On cr e un MessageProducer qui dans notre cas sera un TopicPublisher On associe un listener la classe On d marre la connexion Les messages arrivent par la m thode onMessage 270 Pour effectuer cette t che le client a tout d abord besoin d impl menter l interface MessageListener Il doit ensuite obtenir la fabrique de con nexions et la destination JMS sur lesquelles il souhaite couter l arriv e des nouveaux messages L application Swing s ex cutant en dehors d un conteneur il nous faut utiliser l API JNDI pour obtenir les r f rences Tout comme pour l envoi d un message le consommateur doit se connecter au provider via l objet javax jms Connection pour en retour obtenir une session partir de la session on cr e un MessageConsumer qui va per mettre de con
144. ENKO B Picaup N 11675 2005 320 p PHP MySQL et JavaScript P CHALEAT D CHARNAY J R Rover N 11678 2005 212 p Collection Connectez moi Partage et publication Quel mode d emploi pour ces nouveaux usages de l Internet Wikip dia Comprendre et participer S BLONDEEL N 11941 2006 168 p Peer to peer Comprendre et utiliser F LE FESSANT N 11731 2006 168 p Les podcasts couter s abonner et cr er F DUMESNIL N 11724 2006 168 p Cr er son blog en 5 minutes C BECHET N 11730 2006 132 p Collection Acc s Libre Pour que l informatique soit un outil pas un ennemi D MERCER adapt par S BURRIEL Cr er son site e commerce avec osCommerce N 11932 2007 460 pages PGP GPG Confidentialit des mails et fichiers M Lucas ad par D GARANCE contrib J M THOMAS N 12001 X 2006 248 p R ussir son site web avec XHTML et CSS M Negra N 11948 2007 306 p La 3D libre avec Blender O Sanja N 11959 2006 370 p avec CD et cahier couleur D buter sous Linux avec Mandriva S BLONDEL D CarTRON J Ris N 11689 2006 530 p avec CD Rom Premiers pas en CSS et HTML Guide pour les d butants F DRAILLARD N 12011 2006 232 p Mezilla Thunderbird Le mail s r et sans spam D GARANG A L et D QuatRavaux N 11609 2005 320 p avec CD Rom Firefox Un navigateur web s r et rapide T TRUBACZ pr face de T NoT N 1
145. JSP EL lt c forEach var product items products gt lt h inputText value product name gt 2 lt c forEach gt Cet exemple it re une liste de produits products l aide d une balise JSTL forEach et utilise le langage d expression JSP EL L expres sion products est donc valu e imm diatement lors de l interpr ta tion de la page Qu en est il de la variable product Lorsque la balise JSF inputText essaie d valuer l expression product name en dif f r e il est trop tard la variable n est plus accessible L utilisation des deux langages en m me temps peut donc faire appara tre des erreurs Pour r soudre ce probl me les sp cifications JSP 2 1 et JSF 1 2 ont unifi leur langage Les deux EL continuent exister l un c t de l autre chacun avec sa sp cificit valuation la vol e et en diff r e mais peuvent d sormais tre utilis s conjointement ce qui n tait pas le cas auparavant Gr ce au langage d expression unifi UEL il est pos sible d crire le code suivant APPROFONDIR UEL gt http java sun com products jsp reference techart unifiedEL html gt http java sun com developer technicalArticles J2EE jstl JSF Cycle de vie d une page Le fait que l valuation soit diff r e est d au cycle de vie de la page JSF qui est bien plus compliqu qu une page JSP Nous ne rentrerons pas dans le d tail mais il faut savo
146. Les Cahiers du Programmeur Java EE 5 Serveur web Requ te Servlet contr leur 3 YAPS Pet Store Figure 7 1 Le design pattern MVC Entity bean mod le R ponse APPROFONDIR Requ te et r ponse HTTP L objet javax servlet ServletRequest encapsule la requ te du client c est dire qu il contient l ensemble des param tres pass s la servlet informations sur l environnement du client cookies du client URL demand e etc L objet ServletResponse quant lui permet de renvoyer une r ponse au navigateur Il est ainsi possible de cr er des en t tes HTTP headers d envoyer des cookies au navigateur du client etc La servlet transmet la liste des produits la JSP gt La port e de cette liste est la requ te 164 1 Par le biais d une page web l utilisateur met une requ te HTTP au serveur web en cliquant sur un lien ou sur un bouton Cette requ te est prise en charge par le contr leur servlet 2 Le contr leur ex cute les traitements n cessaires appelle un EJB Stateless par exemple et r cup re le mod le c est dire les entity beans 3 Le contr leur s lectionne alors la JSP qui sera en charge de la cons truction de la r ponse et lui transmet les entity beans contenant les donn es afficher 4 La JSP construit la r ponse en faisant appel aux accesseurs des entity beans 5 La r ponse HTTP est transmise au navigateur qui l affic
147. Les anti patterns Les anti patterns sont des erreurs courantes de conception de logiciels Leur nom vient du fait que ces erreurs sont apparues d s les phases de con ception du logiciel notamment par l absence ou la mauvaise utilisation de design pattern AURE Design pattern Erich Gamma Richard Helm Ralph Johnson John Vlissides Design Pattern Addison Wesley 1995 Floyd Marinescu EJB Design Patterns Wiley 2002 Deepak Alur Dan Malks John Crupi Core J2EE Patterns Prentice Hall 2003 4 OMG L objectif de l Object Management Group est de standardiser et de promouvoir le mod le objet sous toutes ses formes L OMG est notamment a la base des sp cifications UML MOF CORBA IDL et MDA APPROFONDIR UML Jim Arlow Ila Neustadt UML2 and the Unified Process Addison Wesley 2005 gt http Awww uml org 41 2 Architecture de l application Les Cahiers du Programmeur Java EE 5 4 Architecture L architecture sp cifie la structure d un syst me On parle d architecture fonctionnelle pour d finir les services du syst me d architecture technique pour les composants techniques utilis s et d archi tecture applicative pour d crire le d coupage en sous syst mes ARCHITECTURE Couches ou tiers Lorsqu on parle d architecture en couches on uti lise souvent le terme anglais tiers Ce terme signifie couche non le chiffre tiers 1 3 On entend par cons quent les
148. NDI Affiche l arborescence JNDI 307 B T ches Ant Les Cahiers du Programmeur Java EE 5 Cr e la fabrique de connexions JMS gt lt target name create jms connection factory gt lt exec executable asadmin gt lt arg line create jms resource gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line restype javax jms ConnectionFactory gt lt arg line enabled true gt lt arg line jms connection factory name gt lt exec gt lt target gt Cr e le Topic JMS gt lt target name create jms topic gt lt exec executable asadmin gt lt arg line create jms resource gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line restype javax jms Topic gt lt arg line enabled true gt lt arg line property Name 0rderTopic gt lt arg line jms topic gt lt exec gt lt target gt Affiche les ressources JMS gt lt target name 1ist jms resources gt lt exec executable asadmin gt lt arg line list jms resources gt lt arg line echo ech
149. NTH return The month of the credit card is passed return OK Avertir le transporteur Pour la livraison des marchandises YAPS utilise le transporteur PetEx Celui ci poss de un service web lui permettant d tre averti des trans ports effectuer Ce service prend trois param tres une adresse de d part lieu o la marchandise est charg e dans les camions une adresse de livraison et une r f rence Dans notre cas cette r f rence correspond au num ro de la commande DeliveryPlace contac String Delivery street String deliver fomPlace Delivery lace toPlace Delivery lace reference String void city String state String Figure 9 5 Fapcode String Diagramme de classe country String Notez dans le diagramme ci dessus que la m thode deliver prend un objet en param tre DeliveryPlace Cet objet correspond une adresse qui permet PetEx de charger ou de livrer une marchandise On voit ici que les services web ne sont pas oblig s d utiliser seulement des types primitifs De toute fa on lors de l utilisation de wsgen et wsimport des artefacts vont tre g n r s pour annoter la classe DeliveryPlace avec JAXB Cet objet sera donc transform en flux XML Code du service web Delivery WebService public class Delivery private Logger logger Logger getLogger com petex transport WebMethod Oneway public void deliverItems DeliveryPlace from DeliveryPlac
150. PT permettant de construire des interfaces graphiques sophistiqu es telles que AWT et Swing AWT est ant rieure Swing et fut d velopp e pour la premi re version du JDK 1 0 alors que Swing est apparue en tant que librairie annexe dans cette m me version mais na t int gr e dans le JDK qu partir de la version 1 2 soit Java 2 Il en r sulte donc des diff rences fondamentales de conception entre les deux librairies Par exemple un composant AWT est associ une fen tre g r e par le syst me d exploitation sous jacent responsable de son apparence Par opposition les composants Swing sont simplement dessin s l int rieur de leur conteneur comme s il s agissait d une image Le syst me d exploi tation n est pas sollicit mais uniquement la machine virtuelle Java Avec Swing les possibilit s graphiques sont d cupl es On peut par exemple cr er des boutons comportant une image la place d un texte des bou tons ronds des bordures vari es pour les composants ou encore utiliser un composant d arborescence JTree Ce chapitre ne couvre pas l API Swing car elle est trop riche et ne cor respond pas au th me principal de ce livre qui n est autre que Java EE Swing rest utilis e ici que comme support graphique pour appeler des EJB de mani re distante via JNDI Exemple d appel a un EJB dans Swing Dans la gestion du catalogue les employ s peuvent consulter le d tail d une cat gorie p
151. Prenons l exemple du bon de commande et de l adresse de livraison Les cas d utilisation d finissent qu un bon de commande doit poss der une et une seule adresse de livraison cardinalit 1 Il est important de naviguer du bon de com mande vers l adresse par contre il n est pas utile de pouvoir naviguer dans le sens inverse Le lien est donc unidirectionnel JPA utilise Panno tation OneToOne pour d finir ce type de lien Relation unidirectionnelle 1 1 entre bon de commande et adresse Entity Table name t_order public class Order Id GeneratedValue private Long id 77 4 Objets persistants Les Cahiers du Programmeur Java EE 5 L annotation OneToOne d finit un lien 1 1 gt entre le bon de commande et l adresse de livraison OneToOne Pour respecter la cardinalit 1 1 et rendre la rela gt JoinColumn name address_fk nullable false tion obligatoire on utilise l annotation private Address deliveryAddress JoinColumn On sp cifie alors que la cl C5340 trang re ne doit pas accepter la valeur nu11 nul lable false ANNOTATIONS Programmation par exception Pour rendre un lien unidirectionnel il suffit de ne pas avoir d attribut Order dans la classe Address Remarquez l utilisation de annotation JoinColumn Celle ci est utilis e pour param trer la colonne de la jointure la cl tran g re Dans notre exemple on renomme la colonne en address_fk au lieu de
152. S Pet Store Account Cart Signoff Yet Another Pet Store i JA Q hu antonio goncalves Your Order is Complete 103 Birds Your order id is 103 Cats Amazon Parrot E Dogs Female Adull 4 x 120 0 480 0 Fish rar 5 x 100 0 500 0 Rattlesnake Male Adult 1x sti Bulldog Spotless Male Puppy Reptiles 2x YAPS Pa et hehe 704 Bhar JAVA changes B2B Lorsqu un client valide ses achats les donn es de sa carte bancaire doivent tre v rifi es Une fois le bon de commande cr le transporteur doit tre averti pour livrer les animaux leurs propri taires Ces changes avec les soci t s partenaires BarkBank et PetEx se font au travers de services web Ce chapitre nous pr sente ces technologies puis un exemple de d veloppement et de test de services web ND I ed W bis oi b 0e a ha SOMMAIRE Syst mes externes et interop rabilit Validation de la carte bancaire Avertir le transporteur Les services web Technologies autour des services web G n ration des artefacts D ployer et tester un service web MOTS CL S Services web Soap WSDL JAX WS JAXB Les Cahiers du Programmeur Java EE 5 4 B2A B2B B2C C2C Ces sigles distinguent le commerce inter entre prises Business to Business ou B2B du commerce avec les particuliers Business to Consumer ou B2C Il y a aussi les changes entreprises adminis trations B2A ou Business to Admi
153. SP portent l extension j sp Lorsqu une page est d velopp e pour produire de l XHTML elle a l extension jspx Pour les frag ments de page en t te menu pied de page il est courant d utiliser l extension jspf 162 Les JSP Les JSP permettent l affichage de contenus dynamiques de mani re plus lisible que les servlets Elles consistent en une page HTML incluant des directives JSP et du code Java page qui sera ensuite pr compil e en ser vlet puis ex cut e dans un conteneur web La page est principalement constitu e de balises HTML pour l affichage et de code Java pour les traitements C est un peu l inverse de la servlet L exemple ci apr s nous montre une JSP qui effectue le m me traite ment c est dire afficher la liste des produits pour une cat gorie Extrait de JSP appelant un EJB pour afficher des produits lt page import com yaps petstore entity catalog Product gt lt page import java util List lt page import javax naming InitialContext gt 3 49 lt TABLE gt lt Context initalContext new InitialContext CatalogLocal catalogLocal CatalogLocal initalContext lookupC ejb stateless Catalog Long categoryId Long valueOf request getAttribute categorylId Category category catalogLocal findCategory categorylId List lt Product gt products category getProducts for Product product products O lt TR gt lt TD gt l
154. T on P Jrowrinto Permet de rechercher un article par son nom ou le nom de son produit Acteurs Internaute client Description En plus de visualiser le catalogue de mani re lin aire voir cas d utilisa tion Visualiser les articles du catalogue les internautes et les clients peuvent rechercher les animaux domestiques contenus dans le syst me partir d une cha ne de caract res Par exemple si la cha ne de caract res saisie est iche le syst me retournera les articles suivants Nom de l article Nom du produit Caniche nain m le adulte Caniche Femelle 3 mois Caniche Plus petit qu un caniche Chihuahua Figure 1 7 Affichage du d tail d un article 11 1 Pr sentation de l tude de cas Les Cahiers du Programmeur Java EE 5 12 Figure 1 8 Liste des articles r pondant au crit re de recherche La recherche ne tient pas compte des minuscules ou majuscules Si aucun article ne correspond aux crit res demand s une information est affich e linternaute pour lui indiquer que sa recherche n a pas abouti et qu il doit modifier le crit re de recherche Maquettes Pour rechercher les articles linternaute utilise la zone de saisie situ e dans l en t te de toutes les pages du site Cette zone est suivie d un bouton Search Lorsque l internaute clique sur ce bouton apr s avoir saisi un texte le syst me retourne la liste des articles qui r pondent au crit
155. Total calcule le montant total du bon de commande c est a dire quelle cumule le montant de chaque ligne de commande Code de l entity bean Order package com yaps petstore entity order Entity Table name t_order public class Order implements Serializable Id GeneratedValue strategy GenerationType AUTO private Long id Column name order_date updatable false Temporal TemporalType DATE private Date orderDate ManyToOne fetch FetchType EAGER JoinColumn name customer_fk nullable false private Customer customer 1 OneToOne fetch FetchType EAGER cascade CascadeType ALL JoinColumn name address_fk nullable false private Address deliveryAddress Embedded private CreditCard creditCard new CreditCardO OneToMany cascade CascadeType ALL fetch FetchType EAGER JoinTable name t_order_order_line joinColumns JoinColumn name order_fk inverseJoinColumns JoinColumn Cname order_line_fk private List lt OrderLine gt orderLines PrePersist private void setDefaultData O orderDate new Date public Float getTotal if CorderLines null orderLines isEmptyQ return Of Float total Of for OrderLine orderLine orderLines total orderLine getSubTotal return total constructeurs accesseurs m thodes hashcode equals et toString Entity bean Order rendant persistant
156. UNTIME 4 Cette annotation s applique une classe public interface MessageDriven String name default Nom du MDB Class messageListenerInterface default Object class 4 Le type d interface impl ment e par le MDB peut tre d fini par cet attribut MessageListener dans notre exemple ActivationConfigProperty activationConfig default 4 Permet de configurer le MDB String mappedName default 4 Nom JNDI de la destination sur laquelle le MDB est l coute String description default 4 Description du message driven bean Les MDB peuvent tre l coute de messages arrivant de diff rents types de providers Pour cela l annotation javax ejb MessageDriven permet au MDB de configurer certains param tres de ses providers Il suffit d utiliser le tableau activationConfig comme suit Exemple de configuration de MDB MessageDriven mappedName jms topic order activationConfig ActivationConfigProperty propertyName destinationType propertyValue javax jms Topic ActivationConfigProperty propertyName subscriptionDurability propertyValue Durable ActivationConfigProperty propertyName subscriptionName propertyValue EmailSender public class EmailSenderBean implements MessageListener sas Dans cet exemple on utilise l annotation ActivationConfigProperty pour sp cifier le type de la destination o
157. WARN message null Chaque m thode d clare une variable de type String navigateTo Celle ci contient la cl de navigation qui va tre retourn e par la m thode et qui sera interpr t e par le contr leur JSF pour afficher la page suivre Cette m thode effectue des traitements et si aucune exception rest lev e la cl de navigation est affect e Par contre en cas d exception la variable navigateTo reste gale nu11 et un message d erreur est rajout au contexte JSF La valeur null est alors retourn e ce qui entra ne le r affichage de la page en cours avec un message d erreur La m thode priv e addMessage permet de rajouter des messages dans le contexte de JSF FacesContext addMessage La balise lt h messages gt se charge alors d afficher les messages contenus dans ce contexte L image ci apr s nous montre le cas o le client veut valider son formu laire alors qu il n a pas saisi son nom champ d fini comme obligatoire La page se r affiche avec le message Invalid last name YAPS PetStore Create Customer Mozilla Firefox DAR Eichier Edition Affichage Historique Marquepages Outis 2 ll antonio goncalves YAPS Pet Store Yet Another Pet Store Account Cart Sign oft Pets Create Your Account Invalid last name Birds Cats Dogs Fish Reptiles Login antonio Firstname Antonio Lastname Email joncalves gmail com Telephone 12
158. WML Wireless Markup Language est son langage de balises ARCHITECTURE Le design pattern composite Lorsqu on parle de structure en arbre on voque souvent le design pattern composite Ce design pattern d termine une repr sentation en arbre d une structure de donn es En g n ral une com position est une collection d objets et tout objet peut tre une composition un n ud ou un objet primitif une feuille gt http c2 com cgi wiki CompositePattern 169 7 Interface web Les Cahiers du Programmeur Java EE 5 Biblioth que Core Biblioth que HTML JSF Le rendu des balises La biblioth que de balises HTML est utilis e pour les rendus Renderer graphiques propres au lan gage HTML Si vous voulez afficher une page pour un t l phone portable une application telnet etc il vous faudra utiliser une librairie diff rente Il en existe plusieurs comme par exemple ADF d Oracle gt http Avww oracle com technology products jdev htdocs partners addins exchange jsf JSF utilise deux librairies de balises HTML et Core d finies dans les pages JSP par les directives suivantes JSP d clarant les balises JSF lt taglib uri http java sun com jsf core prefix f gt lt taglib uri http java sun com jsf html prefix h gt Cette d claration implique que les balises Core seront pr fix es par f lt f view gt et les balises HTML par h lt h commandLink g
159. a l archive petstore ear et initialisera la base de donn es Vous navez plus qu prendre le navigateur de votre choix vous rendre l adresse http Rael Les fichiers d archive Il existe plusieurs types de fichiers d archive pour packager une application Java EE e les jar Java archive pour les classes Java et les EJB e les war web archive sont utilis s pour les applications web servlet JSP JSF images HTML e les ear enterprise archive contiennent les fichiers JAR et WAR i petstore ear E lb H utility jar L enttyjar L persistence xml stateless jar petstore war CS WEB INF L lfaces config xmi L g web xml Figure 7 22 Contenu du fichier petstore ear 209 7 Interface web Les Cahiers du Programmeur Java EE 5 Figure 7 23 Page d accueil du site 210 YAPS Pet Store localhost 8080 petstore et commencez visualiser le catalogue et vous cr er un compte YAPS PetStore Mozilla Firefox Fichier Edition Affichage Historique Marque pages Outils 4 00 antonio goncalves YAPS Pet Store RE EEE Sign on Yet Another Pet Store Birds Cats Dogs Fish Reptiles The YAPS Pet Store Demo is a fictional sample application C2 A JV ET Deroy P POWERED En r sum Pour acc der au syst me les employ s utilisent une interface Swing et les internautes un navigateur Ce chapitre vous a pr sen
160. acune de ces impl mentations se doit de suivre la sp cifica tion mais peut apporter quelques atouts sp cifi ques comme la gestion du cache qui am liore les performances gt http incubator apache org openjpa gt http Awww hibernate org gt http Awww oracle com technology products ias toplink jpa index html gt http Awww bea com kodo 67 4 Objets persistants Les Cahiers du Programmeur Java EE 5 RAPPEL Pojo Pojo est l acronyme de Plain Old Java Object REMARQUE Constructeur par d faut Une classe Java qui ne d clare pas explicitement de constructeur poss de tout de m me un cons tructeur par d faut 68 Entity bean Dans le mod le de persistance JPA un entity bean est une simple classe java Pojo On d clare instancie et utilise cet entity bean tout comme nimporte quelle autre classe Un entity bean poss de des attributs son tat qui peuvent tre manipul s via des accesseurs m thodes get et set Gr ce aux annotations ces attributs peuvent tre rendus persistants en base de donn es Exemple d entity bean Rien ne vaut un premier exemple simple d entity bean pour expliquer le mapping objet relationnel Exemple simple d entity bean Entity public class Address Id private Long id private String street1 private String street2 private String city private String state private String zipcode private String country Accesseurs ge
161. age destin interroger une base de donn es 4 Le design pattern DAO Le design pattern DAO Data Access Object est fr quemment utilis pour simplifier la programmation avec JDBC Il permet de d l guer la persistance d un objet m tier vers un objet DAO Ce dernier peut utiliser une base de donn es un fichier texte une base objet ou m me un serveur LDAP Compos de 3 objets l interface la fabrique ou Factory et l impl mentation le design pattern DAO propose des m thodes pour manipuler les donn es r cup rations et modifications 66 La persistance des donn es Le langage Java instancie des objets en m moire et les manipule au tra vers de m thodes modifiant ainsi leur tat Cet tat n est cependant accessible que lorsque la JVM Java Virtual Machine s ex cute si celle ci s arr te le contenu de la m moire dispara t ainsi que les objets et leur tat Lun des fondements de la programmation consiste 4 r utiliser ces donn es On appelle cela la persistance des donn es La persistance est ainsi le fait d exister dans le temps Un objet qui reste en l tat lorsqu il est sauvegard puis recharg plus tard poss de la pro pri t de persistance Le langage Java d une part et certains fra meworks d autre part nous permettent de rendre persistants les objets de diff rentes mani res La s rialisation Au travers du m canisme de s rialisation Java fournit une m thode s
162. aged bean gt Lorsque l valuation de l expression catalog doSearch se fait la m thode doSearch du managed bean est invoqu e La zone de saisie quant elle est mapp e avec l attribut keyword Ainsi lorsqu on saisit une cha ne de caract res et que l on clique sur le bouton la valeur est stock e dans la variable keyword et la m thode doSearch est invoqu e Extrait du managed bean CatalogController public class CatalogController EJB private CatalogLocal catalogBean private String keyword private List lt Item gt items public String doSearch items catalogBean searchItems keyword return items found La m thode doSearch appelle l EJB Stateless CatalogBean au travers de son interface locale CatalogLocal en lui passant la cha ne de carac t res keyword en param tre Le r sultat de la m thode searchItems qui est une liste d entity bean Item est alors stock dans l attribut items du managed bean Les traitements sont maintenant termin s et la m thode retourne la cl de navigation items found Le fichier faces config xm1 fait coin cider cette cl de navigation avec la page searchresult jsp qui affichera la liste des articles Extrait du faces config xml d clarant la navigation lt navigation rule gt 4 lt from view id gt lt from vi ew 7id gt lt navigation case gt lt from outcome gt items found lt from outcome gt
163. agramme ci apr s nous montre les diff rentes classes et interfaces g n r es et utilis es par le client pour invoquer le service web lt lt interface gt gt Validation validateC ard creditC ardNumber String creditC ardT ype String expiryDate String String ObjectF actory createValidateC ardR esponse ValidateC ardResponse createValidateC ard ValidateC ard createValidateC ardResponse value ValidateC ardResponse JAXBElement lt ValidateC ardResponse gt createValidateC ard value ValidateC ard JAXBElement lt ValidateC ard gt K create ValidateCar Response cardStatus String ValidateCard creditC ardNumber String ValidationService creditC ardT ype String Figure 9 2 TELECHARGER Le code g n r Retrouvez la totalit des sources g n r es sur le site YAPS Pet Store l adresse suivante http Awww antoniogoncalves org poprale Sring Artefacts client du serveur web de validation Appeler un service web Une fois le service web d ploy et les artefacts clients g n r s il est temps de les utiliser pour invoquer le service web depuis l application YAPS Pet Store Cette t che assez complexe en J2EE s est consid ra blement simplifi e en Java EE 5 gr ce linjection et annotation javax xml ws WebServiceRef En effet il suffit d annoter une classe et d utiliser les artefacts g n r s pour appeler un service web 247 9 Echanges B2B Le
164. allback JPA laisse la possibilit aux d ve loppeurs de rajouter des traitements avant ou apr s qu un changement d tat se produise Il existe sept annotations qui correspondent ces dif f rents points d attache e javax persistence PrePersist e javax persistence PostPersist javax persistence PreRemove javax persistence PostRemove e javax persistence PreUpdate javax persistence PostUpdate javax persistence PostLoad 87 4 Objets persistants Les Cahiers du Programmeur Java EE 5 REMARQUE Exceptions Lorsque la valeur d un attribut est invalide les entity beans l vent une Validation Exception Cette exception applicative sera vue en d tail dans le prochain chapitre Traite ments m tier L entity bean Category a un attribut nom et description Avant d effectuer une insertion ou une mise a jour des donn es en base JPA appelle la m thode validateData Cette m thode s assure que les attributs nom et description sont valides UML Les mots dans les cas d utilisation Cette m thode simple consistant a trouver les noms qui reviennent fr quemment dans les cas d utilisation est tellement r pandue que certains outils l utilisent Visual Paradigm par exemple poss de un syst me d analyse textuelle Textual Analysis qui partir du texte r alise des dia grammes de classes approximatifs 88 Avant d ins rer un entity bean en base JPA ex cute les m thodes a
165. alue db home lib gt lt property name db host value localhost gt lt property name db port value 1527 gt 4 Ins re des donn es dans la base 4 La t che principale supprime les r pertoires tem poraires compile toutes les applications et les package GlassFish Administration Rendez vous l adresse suivante pour obtenir de la documentation sur l administration de GlassFish http docs sun com app docs doc 819 3658 4 Variables globales de l application 4 Variables d environnement et utilitaires d admi nistration et de g n ration de GlassFish 4 Propri t s du serveur GlassFish 4 Propri t s de la base de donn es Derby 303 B T ches Ant Les Cahiers du Programmeur Java EE 5 Propri t s de la source de donn es et du pool JDBC Propri t s JMS JAR utilis s pour administrer l application D marre le serveur GlassFish Arr te le serveur GlassFish 304 lt property name db sid value application name DB gt lt property name db user value dbuser gt lt property name db password value dbpwd gt lt property name db datasource value org apache derby jdbc ClientDataSource gt lt property name db driver value org apache derby jdbc ClientDriver gt lt property name db ur1 value jdbc derby db host db port db sid gt lt property name db schema file value db sid
166. ame Gh G htto ocahost 0202 Sun Java System Application Server Admin Console INFO V javax enterprise resource jms javax resourceadapler mo nsrs JTA INFO A Javax enterpree reeource fta JTS INFO jnvax enterprise system core transaction v LB ppiications MDB Contai v y D Enterprise Appicatons ontainver INIO Y Javsx enterpriee eyetem container epp md0 BD wen Appacatone Naming INFO iw javax enterprise system core naming FJA Mocis Per sistere INFO 42 oracie topink essentials javax enterprise resource jio javax enterprise system contaher cmp D Connector Modules Root INFO MA javax enterprise gt Lifecycle Modules se d SAAS INFO 2 Javaxcenterprise system webservices aaj E App Chent Modules es Secunty INFO w jovax cnterprisc system corc sccurty Wed Services gt integrations Sell Management INFO S javexcenterprise system core selfinanagement Custom MDeans Server INFO TE iavax enterprise syatem Y Gp Reeourcee Util INFO AA javax enterprise system ulil gt a Se c Veriner INFO FA iavax enterpnee eyetem toois venter gt gt JMS Resources W javax enterprise system container web org apache catalina org apache coyote org apache jasper 24 JavaMal Sessions are gt gy comes EE arm Dea Pose gt g Configuration Web Container INFO ame Value C1 fiam beskbank
167. and et re u une fonctionnalit du composant l interaction avec ce composant prend fin ne laissant aucune trace de ce qui s est pass Ils mont aucune connaissance du client ou dun semblant de contexte concernant la requ te ils sont donc parfaits ss ya pour une utilisation unique Ils mont pas d tat c est dire qu on ne peut pas manipuler leurs attributs en tant s r de leur valeur L utilisation standard d un EJB sans tat r side dans le fait qu une appli cation cliente le contacte en lui transmettant des param tres LEJB acc de alors une base de donn es effectue plusieurs traitements appelle d autres EJB puis retransmet un r sultat au client Lorsque la communication s ach ve le bean ne conserve aucun souvenir de Pinte raction Avec ce comportement plusieurs clients distincts peuvent acc der simultan ment un m me stateless session bean LIRE JMS Richard Monson Haefel David Chappell Java Message Service O Reilly 2000 Eric Bruno Java Messaging Charles River Media 2005 4 Serveur d applications Un serveur d applications h berge les applications destin es tre utilis es dans un r seau distribu Il est dot de services transactionnels entre com posants d quilibrage de charge ou encore de tol rance aux pannes LIRE EJB 4 Ed Roman Rima Patel Sriganesh Gerald Brose Mastering Enterprise JavaBeans 2005 Wiley Le chapitr
168. angage Toutefois il est important de s attarder sur celles qui seront utilis es tout au long de notre tude de cas La suite de cette partie tend pr senter succinctement les l ments caract ristiques de Java SE 5 auxquels nous allons nous confronter Plates formes Autoboxing Le langage Java s appuie sur des types primitifs pour d crire les types de base byte short int long double float boolean et char Toutefois comme tout nest quobjet en Java il est n cessaire de constamment encapsuler ces types primitifs dans des classes de r f rence Integer pour int Double pour double etc Ce type de transformation appel boxing peut rapidement s av rer p nible D autant que le processus inverse appel unboxing est n ces saire pour retrouver son type primitif initial Avec Java 5 cette conver sion explicite devient obsol te puisque l autoboxing convertit de mani re transparente les types de base en r f rences et r ciproquement Bien s r vous pouvez continuer utiliser uniquement les types primitifs si vous le souhaitez Exemple d autoboxing Boxing explicite entre un Integer et un int Integer objet new Integer 5 int primitif objet intValueQ Autoboxing Integer objet 5 int primitif objet Annotations Une annotation permet de marquer on dit alors annoter certains l ments du langage Java afin de leur ajouter une propri t particuli re Ces annotations
169. antcall target barkbank deploy gt lt antcall target barkbank generate client artifacts gt lt antcall target petex bui 1ld gt lt antcall target petex deploy gt lt antcall target petex generate client artifacts gt lt antcall target yaps build gt lt antcall target yaps deploy gt lt target gt D ploiement de l application YAPS Pet Store et gt lt target name yaps deploy gt insertion des donn es en base lt echo message Deploys the YAPS application gt lt exec executable asadmin gt lt arg line deploy gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line yaps ear gt lt exec gt lt antcall target db insert data gt lt target gt D ploiement de l application BarkBank gt lt target name barkbank deploy gt lt echo message Deploys the BarkBank application gt lt exec executable asadmin gt lt arg line deploy gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line barkbank war gt lt exec gt lt target gt 300 lt target name petex deploy
170. appuyant sur un ensemble de protocoles r pandus comme HTTP Cette communication est bas e sur le principe de demandes et r ponses effectu es via des messages XML Les services web sont d crits par des documents WSDL Web Service Description Language qui pr cisent les m thodes pouvant tre invo qu es leurs signatures et les points d acc s de service URL port Les services web sont accessibles via Soap la requ te et les r ponses sont des messages XML transport s sur HTTP Blueprints Parall lement la plate forme Java EE Sun propose gratuitement des documents pour faciliter les d veloppements Java les Blueprints Ces derniers contiennent des tutoriaux des design patterns des exemples de code des conseils et des FAQs Il existe plusieurs types de Blueprint Sous le succ s des services web Sun d veloppa en 2004 un Blueprint baptis l Adventure Builder Cette application vous permet de personnaliser un s jour pour vos vacances en utilisant principalement des services web Concernant Java EE ou J2EE l poque Sun cr a le Java Pet Store Java Pet Store Java Pet Store est une application JEE que Sun a cr pour son pro gramme de Blueprints C est un site web marchand o l on peut choisir des animaux domestiques les ajouter dans un panier puis payer lectro niquement Ce Blueprint a permis de documenter les meilleures prati AURE Services web 2 Hubert Kadima Les Web Servic
171. ar javax ejb Remote Reprenons l exemple du CustomerBean Ci apr s le code de l interface CustomerRemote Interface distante Remote public interface CustomerRemote Customer createCustomer Customer customer Address homeAddress Comme vous pouvez le constater cette interface ressemble de tr s pr s nimporte quelle interface Java La seule diff rence est la pr sence de Pannotation javax ejb Remote qui informe le conteneur que cette interface peut tre appel e de mani re distante Les param tres des m thodes distantes doivent tre s rialisables pour tre v hicul s travers le r seau Rappelez vous que les entity beans que nous avons d velopp s impl mentent l interface Serializable Code de l annotation javax ejb Remote package javax ejb Target TYPE Retention RUNTIME public interface Remote Class value default EJB Interface distante dans un cluster On utilise un cluster groupe d ordinateurs vu comme une seule machine pour des raisons de performance de r partition de charge ou de tol rance aux pannes Dans ce cas il est n cessaire d utiliser des interfaces distantes pour que les EJB puissent communiquer entre eux dans le cluster EJB RemoteException Contrairement aux EJB 2 1 les m thodes n ont pas besoin de lancer l exception java rmi RemoteException Il est toujours possible de le faire mais ce n est plus obligatoire depuis la version 3 0 des EJ
172. ar DAY_OF_YEAR birth get Calendar DAY_OF_YEAR lt 0 adjust 1 age now get Calendar YEAR birth get Calendar YEAR adjust public void matchPassword String pwd if pwd null equals pwd throw new ValidationException Invalid password if pwd equals password throw new ValidationException Passwords don t match constructeurs accesseurs m thodes hashcode equals et toString Adresse Lentity bean est utilis pour repr senter l adresse de domiciliation du client et l adresse de livraison de la commande Code de l entity bean Address package com yaps petstore entity Entity Table name t_address public class Address implements Serializable Id GeneratedValue strategy GenerationType AUTO private Long id Column nullable false private String street1 private String street2 Column nullable false length 100 private String city private String state Column name zip_code nullable false length 10 private String zipcode Column nullable false length 50 private String country PrePersist PreUpdate private void validateDataQ if street1l null equals street1 throw new ValidationException Invalid street if city null equals city throw new ValidationException Invalid city if zipcode null equals zipcode throw new ValidationException Invalid zip code if country null
173. ar gt lt target gt lt target name yaps build stateless jar gt lt echo message Creates the EJB Stateless jar gt lt jar jarfile yaps stateless jar gt lt fileset dir yaps classes dir gt lt include name com yaps petstore stateless class gt lt fi leset gt lt jar gt lt target gt lt target name yaps build stateful jar gt lt echo message Creates the EJB Stateful jar gt lt jar jarfile yaps stateful jar gt lt fileset dir yaps classes dir gt lt include name com yaps petstore stateful class gt lt fileset gt lt jar gt lt target gt lt target name yaps build mdb jar gt lt echo message Creates the EJB MDB jar gt lt jar jarfile yaps mdb jar gt lt fileset dir yaps classes dir gt lt include name com yaps petstore mdb class gt lt fileset gt lt jar gt lt target gt lt target name yaps build entity jar gt lt echo message Creates the EJB Entity jar gt lt jar jarfile yaps entity jar gt lt fileset dir yaps classes dir gt lt include name com yaps petstore entity class gt lt fileset gt lt fileset dir yaps config dir gt lt include name META INF persistence xml gt lt fileset gt lt jar gt lt target gt lt target name yaps build utility jar gt lt echo message Creates the Utility jar gt lt jar jarfile yaps utility jar gt lt fileset dir yaps classes dir g
174. aris Sparc jdk 1_5_0_10 solaris sparc sh L installation se fait alors sans difficult s particuli res Un premier cran vous invite accepter la licence du logiciel puis le second les modules du JDK que vous souhaitez installer L installation s ach ve avec un cran vous informant de son bon d roulement i J2SE Development Kit 5 0 Update 10 License License Agreement Please read the following license agreement carefully Sun Microsystems Inc Binary Code License Agreement for the JAVA 2 PLATFORM STANDARD EDITION DEVELOPMENT KIT 5 0 SUN MICROSYSTEMS INC SUN IS WILLING TO LICENSE THE SOFTWARE IDENTIFIED BELOW TO YOU ONLY UPON THE CONDITION THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS BINARY CODE LICENSE AGREEMENT AND SUPPLEMENTAL LICENSE TERMS COLLECTIVELY AGREEMENT PLEASE READ THE AGREEMENT CAREFULLY BY DOWNLOADING OR INSTALLING THIS SOFTWARE YOU ACCEPT THE TERMS OF THE AGREEMENT INDICATE ACCEPTANCE BY SELECTING THE ACCEPT BUTTON AT THE BOTTOM OF THE AGREEMENT IF YOU ARE NOT WILLING TO BE BOUND BY ALL THE TERMS SELECT THE DECLINE BUTTON AT THE BOTTOM OF THE AGREEMENT AND THE he Odo not accept the terms in the license agreement iF J2SE Development Kit 5 0 Update 10 Custom Setup Custom Setup Select the program features you want installed Select optional features to install from the list below You can change your choice of features after installation by using the Add Remove Program
175. artir d un cran Swing Un extrait du code ci apr s nous montre les tapes n cessaires l appel de la m thode findCategory de l EJB Stateless CatalogBean cran d affichage de la cat gorie public class CategoryCrudFrame extends JInternalFrame public void findActionPerformed EventObject evt Context initalContext new InitialContextQ CatalogRemote catalogRemote CatalogRemote initalContext lookupC ejb stateless Catalog 2 Category category catalogRemote findCategory identifier model setIdentifier category getId model setName category getName O model setDescription category getDescription L application distante a tout d abord besoin d obtenir le contexte initial JNDI A partir de ce contexte on recherche 1ookup EJB qui g re le catalogue et dont le nom est ejb stateless Catalog On obtient ainsi l interface distante sur laquelle on appelle la m thode m tier du composant La m thode findCategory retourne un entity bean Category avec lequel on alimente les zones de l cran Le r sultat gra phique est pr sent sur l cran ci apr s F Category 4 Read only Category 4 Read only Identifier 4 Name Cats Small carnivorous mammal domesticated since early times Description jas a catcher of rats and mice and as a pet and existing in several distinctive breeds and varieties Figure 6 1 JNDI Dans tout sys
176. ary html ec kage tree hiel package use html jailed Fxcept ion html y html jagqe Franc html dic tray package mary html giera te trec html tray package use html erview Frane html htnl inherit gif ized forn htnl tenlray html ylcon htnl Figure 3 6 La d compression du fichier se fait avec succ s 53 Outils et installation 3 Les Cahiers du Programmeur Java EE 5 get java hone setup init len chand unix les c hoanl yet java hume Fetup init iset _enu win set env unix La d compression s effectue automatiquement dans le r pertoire courant jusqu l apparition du message installation complete figure 3 6 Il faut maintenant configurer GlassFish assurez vous d avoir correcte ment positionn les variables JAVA HOME et ANT_HOME Pour ce faire on utilise le fichier Ant setup xm1 livr avec GlassFish Tapez la commande suivante ant f setup xml in Option adninuser d sapprouv e Utilisez user la place Using port 4848 for Adnin Using port 0606 for ITIP Instance Using port 7676 for JMS inpass succe part IAA for port 8181 A default L 3 TOP_S881 q default 110P_HUTUALAUTH default JMX_ADHIN i veloper as spcecificd on command linc or environncnt ast 1 aml port 48481 ming overwritten with credentials provided ing create donain command tion rele tu admi name admin fur this dumain dumaini stured at LE Antunivx axadi
177. as ici partir de n importe quelle page puisque cha que page contient le menu de navigation si on rencontre la cl de navigation products displayed la page des pro duits est affich e De la page des produits on se dirige vers la page des articles 190 La m thode getParamld protected Long getParamId String param FacesContext context FacesContext getCurrentInstance Map lt String String gt map context getExternalContext getRequestParameterMap String result map get param return Long valueOf result Les pages web La visualisation du catalogue utilise trois pages e affichage des produits d une cat gorie showproducts jsp e affichage des articles d un produit showitems jsp e d tail d un produit showi tems jsp La liste des cat gories chat chien est contenue dans le menu de gauche de chaque page les rendant ainsi accessibles travers tout le site La navigation La navigation entre les pages est assez intuitive puisqu elle suit la d marche des clients Pour acheter un animal on commence par choisir la cat gorie je voudrais acheter un chien puis le produit un caniche et enfin l article lui m me un m le adulte En face de chaque article on affiche une image repr sentant l animal son nom sa description ainsi que son prix Comme le client peut vouloir acheter plu sieurs articles le menu de gauche
178. ation pour essayer le produit gt http Awww jetbrains com idea 49 3 Outils et installation Les Cahiers du Programmeur Java EE 5 UML Outils de mod lisation ArgoUML StarUML et Pos idon sont des outils Open Source que vous pourrez retrouver respecti vement aux adresses suivantes gt http argouml tigris org gt http staruml sourceforge net gt http Awww gentleware com Visual Paradigm poss de une large panoplie d outils de mod lisation dont la Community Edi tion qui est gratuite gt http www visual paradigm com TELECHARGER JDK 1 5 gt http java sun com javase downloads Figure 3 1 Acceptez la licence et cliquez sur Next 50 Les diagrammes que vous verrez dans ce livre ont t dessin s avec l outil Visual Paradigm Cet outil s int gre aussi sous forme de plug in dans Intellij Idea Eclipse NetBeans et bien d autres IDE Je remercie la soci t Visual Paradigm de m avoir offert une licence pour leur dition Smart Development Environment Installation des outils Dans cette section nous allons installer les trois principaux outils utilis s tout au long de l ouvrage JDK 1 5 T l chargez l ex cutable d installation sur le site officiel de Sun Le nom de cet ex cutable diff re selon la plate forme sur laquelle vous souhaitez l installer Par exemple e Windows jdk 1_5_0_10 windows i586 p exe e Linux jdk 1_5_0_10 1inux i586 rpm bin e Sol
179. ative CreditCardException ApplicationException rollback true public class CreditCardException extends RuntimeException public CreditCardException String message super message Dans le chapitre pr c dent Odjets persistants nous avons vu que les entity beans validaient leurs attributs avant d tre persist s Si une valeur est invalide une ValidationException est lanc e avec le param tre rollback true Entity bean Category validant ses attributs Entity public class Category Cet PrePersist PreUpdate private void validateDataQ if name null equalsCname throw new ValidationException Invalid name if description null equals description throw new ValidationException Invalid description 123 Les Cahiers du Programmeur Java EE 5 124 Exception applicative ValidationException ApplicationException rollback true public class ValidationException extends RuntimeException public ValidationException String message super message Exception syst me Une exception syst me est lanc e lorsqu une ressource syst me dysfonc tionne base de donn es indisponible etc Ces exceptions ne sont pas attendues par l application qui la plupart du temps ne sait pas comment les traiter On peut donc laisser ces exceptions se propager pour enfin tre intercept es par le conteneur Le conteneur effectuera automatique ment un rollback sur la transaction
180. au de traces on peut modifier le param tre toplink logging level Notez que tous ces param tres sont propres a TopLink qui est le moteur de persistance de GlassFish Une autre impl mentation de JPA comme Hibernate par exemple utilisera d autres propri t s Traces de cr ation du sch ma de la base de donn es The alias name for the entity class class com yaps petstore entity catalog Product is being defaulted to Product The column name for element private java lang Long com yaps petstore entity catalog Product id is being defaulted to ID The column name for element private java lang String com yaps petstore entity catalog Product name is being defaulted to NAME The column name for element private java lang String com yaps petstore entity catalog Product description is being defaulted to DESCRIPTION Notez que suite au d ploiement la tache Ant yaps deploy en profite pour ins rer des donn es dans la base tache db insert data Ceci permet d avoir un jeu de donn es initial pour utiliser application En ce qui concerne nos trois stateless session beans ils sont enregistr s dans JNDI et deviennent accessibles de mani re distante 154 Enregistrement des interfaces dans JNDI fait au d ploiement java comp env com yaps petstore stateless customer CustomerBean em naming bind RemoteBusinessJndiName ejb stateless Customer remoteBusIntf com yaps petstore stateless customer CustomerRe
181. aux heureux propri taires 3 Un e mail est envoy au client pour l informer du bon d roulement de sa transaction Cet e mail contient le num ro du bon de com mande ainsi qu un r capitulatif de son contenu 4 Pour des raisons l gales les employ s doivent tre avertis des bons de commande contenant des reptiles une alerte s affiche dans l interface graphique de l employ Visualiser et supprimer les commandes R sum Permet un employ de visualiser et de supprimer les commandes pr sentes dans le syst me Acteurs Employ Description Lemploy peut visualiser la liste des commandes pr sentes dans le sys t me Pour chacune de ces commandes il peut en consulter les informa tions et les supprimer Pour des raisons l gales les employ s de YAPS veulent tre avertis en temps r el des achats de reptiles Selon les pays il faut en effet avertir les autorit s Ainsi d s qu une commande contenant des reptiles est pass e les employ s en sont avertis par une alerte qui s affiche dans l interface graphique Maquettes Pet Store Hie Customer Catalog Order Look amp roo CT order 1 Road onty Order 1 Read only identier 1 10 hem Quantity Sub total nanan Spotted U 12 0 Odes date 0505 7200 Spotless 1 120 Customer Female Puppy 5 160 0 d Female Pi 1 FirstName Steve SDONOU Fomai FUEL 13200 LastName Jobo Date of birth 30 11 1964 Address Delivery Address Total 404 0 Street 1
182. ava Data Object JEE Java Enterprise Edition JMS Java Messaging Services JNDI Java Naming Directory Interface JPA Java Persistence API JRE Java Runtime Environment JRMP Java Remote Method Protocol JSE Java Standard Edition JSF JavaServer Faces JSP JavaServer Pages JSR Java Specification Request Tableau C 1 Sigles et acronymes suite Sigle Acronyme Signification JSTL JSP Standard Tag Library JTA Java Transaction API JVM Java Virtual Machine LDAP Lightweight Directory Access Protocol MIME Multipurpose Internet Mail Extensions MOM Message Oriented Middleware ODBC Open DataBase Connectivity OMG Object Management Group PDA Personal Digital Assistant PHP PHP Hypertext Preprocessor POJO Plain Old Java Object RMI Remote Method Invocation RPC Remote Procedure Call SAAJ SOAP with Attachments API for Java SAX Simple API for XML SGML Standard Generalized Markup Language Soap Simple Object Access Protocol SQL Structured Query Language SSL Secure Socket Layer SSO Single Sign On StAX Streaming API for XML TCP Transmission Control Protocol UDDI Universal Description Discovery and Integration UDP User Datagram Protocol UEL Unified Expression Language UML Unified Modeling Language URC Uniform Resource Characteristic URI Unified Resource Identifier URL Uniform Resource Locator URN Uniform Reso
183. ay 246 251 javax jws WebMethod 250 251 javax jws WebParam 250 javax jws WebResult 250 javax jws WebService 250 251 javax persistence Column 72 91 94 99 javax persistence Embeddable 75 99 javax persistence Embedded 75 97 javax persistence Entity 35 68 90 93 97 javax persistence GeneratedValue 71 91 97 javax persistence Id 68 71 92 97 javax persistence JoinColumn 78 91 94 97 javax persistence JoinT able 83 97 javax persistence ManyToOne 80 97 Ant Index javax persistence OneToMany 80 91 97 javax persistence OneToOne 77 94 javax persistence OrberBy 91 javax persistence PersistenceContext 105 111 112 128 131 javax persistence PostLoad 87 94 javax persistence PostPersist 87 94 javax persistence PostRemove 87 javax persistence PostUpdate 87 94 javax persistence PrePersist 87 88 91 97 206 javax persistence PreRemove 87 javax persistence PreUpdate 87 88 91 javax persistence Table 69 92 97 javax persistence Temporal 74 94 97 javax persistence Transient 75 94 javax xml ws WebServiceRef 253 callback 87 125 218 275 48 52 55 admin xml 52 56 63 303 build xml 52 63 291 tache 56 57 58 153 barkbank 257 barkbank build 256 298 barkbank clean 256 294 barkbank compile 256 295 barkbank deploy 257 300 create connection pool 305 create datasource 306 create jms connection factory 59 308 create jms topic 59 308 db insert data 154 300 303 list con
184. c par exemple on utilise le syst me d injection de l annotation Resource Injection de la destination Resource mappedName jms topic order private Topic destinationOrder Le mode Point a Point Le mode point a point repose sur le concept de files d attente Queue Cela signifie que chaque message est envoy par un producteur dans une file d attente et est regu par un seul consommateur Une fois le message consomm il dispara t de la file d attente r 5 Figure 10 2 Producteur Consommateur Mode point point Bien entendu tant que le message mest pas consomm ou qu il n a pas expir il reste stock au sein du provider Le client peut donc le con sommer ult rieurement Il peut arriver aussi que le consommateur du message lait re u par erreur ou qu il ne puisse pas le traiter imm diatement Dans ce cas il peut annuler la r ception du message en effectuant un rollback Le mode publication abonnement Le mode publication abonnement repose sur le concept de sujets Topics Cela signifie que des messages sont envoy s par plusieurs pro ducteurs dans un Topic et qu ils sont re us par plusieurs consomma teurs Les consommateurs des messages s abonnent aux sujets qui les int ressent c est le principe de l abonnement L metteur du message ne conna t pas les destinataires qui se sont abonn s Contrairement au mode point point dans le mode publication abon nement un message en
185. ce lectronique tout en r pondant la question Comment faire Les Cahiers du Programmeur Java EE 5 Java Pet Store Faisant partie du programme des BluePrints de Sun Microsystems l application Java Pet Store est un site de commerce lectronique utilisant les sp cifications Java EE gt http java sun com reference blueprints GlassFish GlassFish est un serveur d applications que Sun a donn a la communaut Open Source Sources Le code source de l application d velopp e dans ce livre est disponible en ligne sur le site http www antoniogoncalves org Vous y trouverez aussi d autres ressources telles qu un forum pour d poser vos remarques ou changer de l information pour assembler ces sp cifications La structure de l application suit les r gles de l art en mati re d architecture d coupage en couches couplage l che et design patterns Afin de vous raccrocher des concepts et pratiques connus de la commu naut Java cet ouvrage s inspire du Java Pet Store de Sun et vous servira de guide dans le d veloppement d un site web proche de cette application De plus ce livre couvre une large partie des sp cifications Java EE 5 utilise la version 5 du JDK les design patterns ainsi que le serveur GlassFish pour ex cuter l application Il est abondamment illustr de diagrammes UML d extraits de code et de captures d crans Enfin les pages de ce livre sont accompa
186. ces config xml gt lt webinf gt lt classes dir yaps classes dir gt lt include name com yaps petstore jsf class gt lt classes gt lt war gt lt target gt lt target name yaps build ear gt lt echo message Creates the PetStore Enterprise Application gt lt delete file yaps ear gt lt jar jarfile yaps ear basedir yaps build dir excludes application name jar gt lt target gt lt target name barkbank build depends barkbank compile barkbank generate server artifacts gt lt echo message Creates the Barkbank Web Application gt lt war destfile barkbank war webxml barkbank web inf dir web xm1 gt lt fileset dir barkbank web dir gt lt include name 3sp gt lt include name gif gt lt fileset gt lt classes dir barkbank classes dir gt lt include name com barkbank class gt lt classes gt lt war gt lt target gt lt target name petex build depends petex compile petex generate server artifacts gt lt echo message Creates the Petex Web Application gt lt war destfile petex war webxml petex web inf dir web xml gt lt fileset dir petex web dir gt lt include name 3sp gt lt include name gif gt lt fileset gt lt classes dir petex classes dir gt lt include name com petex class gt lt classes gt lt war gt lt target gt lt target name generate ser
187. chier stateless jar les entity beans dans entity jar et les exceptions et autres classes utilitaires dans utility jar Remarquez la disposition de ces fichiers l int rieur de PEAR stateless jar est plac la racine alors que entity jar et utility jar sont dans le sous r pertoire lib Ce r pertoire est particulier puisqu il permet de partager les classes tout le fichier ear En effet comme nous le verrons par la suite les EJB Stateful et asynchrones auront eux aussi besoin des entity beans et des exceptions Pour ne pas dupliquer ces classes dans les diff rents fichiers jar on les rend accessible en les pla ant dans le r per toire lib Derni re particularit le fichier persistence xm1 se trouve dans le r per toire META INF du fichier entity jar Ce fichier doit tre d ploy dans ce r pertoire pour tre pris en compte Rappelez vous que ce fichier permet d informer le conteneur de l unit de persistance qu il doit utiliser D ployer Le d ploiement n est pas n cessaire pour la partie graphique qui est con sid r e comme une simple application Java SE Par contre il est indis pensable pour la partie serveur puisque les EJB doivent s ex cuter l int rieur d un conteneur Avant toute chose le serveur GlassFish et la base de donn es Derby doi vent tre d marr s Pour cela utilisez les t ches Ant d administration ant f admin xml start domain ant f admin xml start db Pou
188. ciations entre objets en relation entre tables Jointures Dans le monde relationnel il existe deux mani res d avoir une relation entre deux tables en utilisant les cl s trang res ou les tables de join tures interm diaires Par exemple pour stocker le fait qu un client poss de une adresse on pte p q P peut soit avoir une cl trang re dans la table du client soit une table interm diaire qui stockera cette information Client Adresse Identifiant Nom Pr nom Identifiant Rue Ville Pays Pierre Durand 10 St Antoine Paris France Figure 4 1 Paul Dupond 11 Traversi re Bordeaux France HR pe x Jacques Dupont 12 Aigre Paris Francs Utilisation de cl s trang res Client Adresse Identifiant 1 Pierre Durand 2 Paul Dupond 3 Jacgues Dupont Identifiant Rue Ville Pays 10 St Antoine Paris France 11 Traversi re Bordeaux France 12 Aligre Paris France Table interm diare 1 10 Figure 4 2 Utilisation d une table interm diaire Comme nous le verrons dans les chapitres suivants JPA utilise les deux modes de stockage Par contre JPA masque compl tement cette impl mentation puisque les classes elles utilisent le m me type d association dans les deux cas Relation unidirectionnelle 1 1 Une relation unidirectionnelle 1 1 entre classes est un lien de cardinalit 1 qui ne peut tre acc d que dans un sens
189. cles lt lt Extend gt gt O PetEx Bark Bank Les acteurs du syst me Les acteurs humains qui utilisent le syst me sont les suivants e Employ les employ s de la soci t YAPS s occupent de mettre jour le catalogue des articles ainsi que la liste des clients Ils peuvent aussi consulter les commandes pass es en ligne par les clients e Internaute il s agit d une personne anonyme qui visite le site pour consulter le catalogue d animaux domestiques Si linternaute veut acheter un animal il doit d abord cr er un compte Il devient alors un client de la soci t YAPS e Client un client peut visualiser le catalogue modifier ses coordon n es et acheter des articles en ligne UML Le syst me a tudier Dans un diagramme de cas d utilisation le rec tangle autour duquel gravite les acteurs symbolise le syst me tudi Les acteurs sont repr sent s par une ic ne appel e stick man alors que les cas d utilisation sont repr sent s par une forme ovale UML La relation lt lt Extend gt gt Notez la pr sence de la relation lt lt Extend gt gt Cela signifie que le cas d utilisation incorpore de mani re facultative un autre cas d utilisation Dans notre exemple on cr e un bon de commande si l achat d articles a t effectu Figure 1 1 Diagramme de cas d utilisation 1 Pr sentation de l tude de cas Les Cahiers du Programmeur Java EE 5 4 Client l
190. couvrir les EJB grace aux annotations javax ejb Stateless acc der au service de nommage pour y stocker les interfaces distantes etc Chacune de ces tapes affi chera des traces dans GlassFish TopLink va donc cr er les diff rentes tables et colonnes a partir des entity beans et tracera ces actions dans son fichier de logs 4 Java Web Start Nous aurions pu d ployer le client Swing avec Java Web Start Cette technologie d velopp e avec la plate forme Java 2 et incluse dans le JRE depuis la version 1 4 permet le d ploiement d applications JSE travers le r seau On peut ainsi installer une application gr ce un simple clic dans un naviga teur Java Web Start assure alors la mise jour automatique des nouvelles versions de l applica tion et utilise un cache local pour acc l rer sa r uti lisation ult rieure gt http java sun com products javawebstart ANT Deploy undeploy Une fois l application d ploy e l aide de la t che yaps deploy on peut la supprimer du serveur GlassFish en utilisant la t che yaps undep loy RAPPEL D ploiement sur d autres serveurs Retrouvez sur mon site les d marches pour d ployer l application sur d autres serveurs d applications http Awww antoniogoncalves org 153 6 Ex cution de l application Les Cahiers du Programmeur Java EE 5 Cr ation automatique des tables Le sch ma de la base de donn es peut tre automatiquement cr
191. crits en annexe 256 jsf i i 1 1 1 1 1 1 i n lt lt control gt gt lt lt control gt gt i lt lt control gt gt AccourtController CatalogController ShoppingCartController i T T i petex i barkbank i lt lt com ponent gt gt lt lt com ponent gt gt Delivery al O Validation al HTTP HTTP Figure 9 11 Services web dans l architecture YAPS Pet store Compiler Pour compiler les classes qui se trouvent dans les r pertoires src et g n rer les artefacts c t serveur on utilise les t ches Ant barkbank compile et petex compi le Ces t ches se chargent de compiler les classes et de les placer dans les r pertoires classes de chaque projet Pour sup primer tous les r pertoires de travail build et classes on peut utiliser les t ches barkbank clean et petex clean Packager Les services de v rification de la BarkBank et de transport PetEx sont chacun packag s dans une application web Les archives contiennent les classes des services web mais aussi tous les artefacts serveurs les classes et les fichiers WSDL et XSD Pour ce faire on ex cute les taches barkbank build et petex build Les archives barkbank war et petex war sont plac s dans le r pertoire build r barkbank war petex war Figure 9 12 Er Ga ValidationService Figure 9 13 b Ga DeliveryService Contenu de l archive L eme Contenu de l archive ag j L ea wes barkbank war LG web xml petex war L Ga web xml Po
192. ctItem itemLabel Visa gt lt f selectItem itemLabel Visa Gold gt lt f selectItem itemLabel Master Card gt lt h selectOneMenu gt On ajoute des libell s dans une combobox lt h inputText value 4 account customer dateOfBirth gt lt f convertDateTime pattern dd MM yyyy gt lt h inputText gt Convertit la date d anniversaire au format dd MM yyyy Exemple de page JSP utilisant les balises JSF Rien ne vaut un premier exemple de page web compl te pour com prendre l imbrication entre HTML JSP et librairies JSF Reprenons l exemple de l affichage de la liste des produits Extrait de JSP affichant les produits lt taglib uri http java sun com jsf core prefix F gt lt taglib uri http java sun com jsf html prefix h gt lt f view lt h2 gt Products for category lt h outputText value catalog category name gt lt h2 gt lt h messages style color red gt lt h form gt lt h dataTable value catalog products var product gt lt h column gt lt h commandLink action 4 catalog doFindItems gt Q lt h outputText value product name gt O lt f param name productId value product id gt lt h commandLink gt APPROFONDIR Les balises JSF Ce livre ne r pertorie que certaines balises JSF Vous pouvez en retrouver la totalit aux adresses suivantes gt http horstmann com corejsf jsf tags html gt htt
193. de elle sp cifie ce mode transactionnel pour une seule m thode ne tenant pas compte de l annotation m re APPROFONDIR Modes de transactions Les diff rents modes de transactions sont d taill s sur le site de Sun http java sun com javaee 5 docs tutorial doc Transaction3 html 4 Plac e sur l EJB cette annotation indique au conteneur que toutes les m thodes utilisent le mode transactionnel REQUIRED Cette m thode est en mode REQUIRED 4 Cette m thode red finit sa police transaction nelle Elle ne tient pas compte du mode REQUIRED mais utilise NEVER PERSISTANCE Transactions dans YAPS Pet Store L application YAPS Pet Store n a pas de sp cificit s transactionnelles Les stateless session beans utili sent donc la valeur par d faut c est dire le mode REQUIRED 121 5 Traitements m tier Les Cahiers du Programmeur Java EE 5 122 Gestion des exceptions Java propose un m canisme de gestion d exceptions consistant effec tuer les instructions dans un bloc d essai le bloc try qui surveille les instructions Lors de l apparition d une erreur celle ci est intercept e dans un bloc de traitement d erreurs le bloc catch sous forme d un objet appel Exception Ce bloc peut alors traiter l erreur ou la relancer vers un bloc de plus haut niveau Ce m canisme de gestion d exceptions du langage Java est utilis par les stateless beans Par contre
194. de Java C PHP Net etc et s ex cutant sur un syst me d exploitation autre que le v tre Il suffit qu il y ait un MOM disponible MQSeries par exemple pour que cette application puisse envoyer et recevoir des mes sages Avec un syst me de bridge pont on peut alors relier les files d attente de ces deux providers MQSeries lt gt GlassFish et laisser les deux applications s changer des messages de mani re transparente gt http www activemq org site jms to jms bridge html gt http edocs bea com wls docs81 ConsoleHelp messaging_bridge html Le cycle de vie d un MDB Le cycle de vie d un message driven bean est identique celui d un sta teless bean Il n a que deux tats il existe ou il n existe pas Lorsqu il existe il est l coute d une destination JMS pr t traiter un message Instanciation du composant P ostC onstruct P reDestroy tat inexistant signifie que le MDB n a pas encore t instanci et n existe pas en m moire Le passage l tat pr t se fait lorsque le conte neur intercepte l arriv e d un message et invoque la m thode onMessage du MDB Les annotations de callback Gr ce aux annotations de callback le conteneur d EJB laisse la possibi lit aux d veloppeurs d effectuer des traitements lors du passage d un tat un autre Il existe deux annotations utilisables par les message driven beans e javax annotation PostConstruct e java
195. de PAPI JMS deux types d objets sont g r s diff rem ment des autres e Les fabriques de connexions ConnectionFactory permettent d obtenir une connexion aupr s d un provider e Les destinations sont les objets qui v hiculent les messages JMS comporte deux types de destination les Queue et les Topic Pour obtenir une ConnectionFactory une Queue ou un Topic il faut les rechercher par leur nom dans l annuaire JNDI ou utiliser l injection Cela suppose donc qu il faut pr alablement inscrire ces objets dans JNDI C est ce que nous avons fait dans le chapitre 3 Outils et installa tion lorsque nous avons configur GlassFish La fabrique de connexions Dans JMS la fabrique de connexions ConnectionFactory permet d obtenir une connexion au provider Sun Java System Message Queue dans le cas de GlassFish Une fois la connexion obtenue on peut envoyer ou recevoir des messages Comme nous le verrons plus bas Pobjet ConnectionFactory permet d obtenir les objets Connection Session puis les objets pour produire MessageProducer et consommer MessageConsumer des messages Dans les chapitres pr c dents nous avons utilis l annotation EJB pour injecter les r f rences de nos stateless session beans Cette annota tion est propre aux EJB Pour la fabrique de connexions nous utiliserons lannotation plus g n rique javax annotation Resource REMARQUE La fabrique et la destination JMS Lors de la configura
196. de paiement et valide ses achats C est ce moment que le bon de commande est cr gr ce au stateless OrderBean et que le panier est vid Cette m thode permet d afficher le prix total du panier Retourne le contenu du Caddie 223 8 Gestion du panier lectronique Les Cahiers du Programmeur Java EE 5 Yaps C3 build H O classes r 6G resources s C3 common LI images H confirmorder jsp H J createaccount jsp index jsp jsf main jsp orderconfirmed jsp petstore css searchresult jsp FF i showaccount jsp H showcart jsp H showitem jsp H showitems jsp showproducts jsp k signoff jsp fr EE signon jsp L updateaccount jsp Co sre St EG WEB INF L 38 Faces config xml L GE web xml Figure 8 5 l ments de l application web A partir des pages d affichage des articles un clic sur Add to cart permet d ajouter un arti cle au panier et d aller a la page showcart jsp qui en affiche le contenu 224 gt Les pages web L application web est enrichie de trois pages qui permettent e de consulter et de modifier le contenu du panier showcart jsp e de saisir l adresse de livraison et le moyen de paiement confirmorder jsp e dobtenir un r capitulatif des achats effectu s et d informer le client du num ro de bon de commande orderconfirmed jsp Pour utiliser son panier lectronique linternaute doit au pr
197. de retour qui est de type String Cette annotation s applique un param tre Red finit le nom du param tre Nom du wsd part qui repr sente le param tre Namespace XML du param tre Indique que le param tre doit tre mis dans l en t te header de Soap et non dans le corps body Indique si le param tre est en entr e IN sortie OUT ou les deux INOUT Cette annotation s applique une m thode D finit le nom de la valeur de retour Nom du wsd1 part qui repr sente la valeur de retour Namespace XML de la valeur de retour Indique que la valeur de retour doit tre mise dans l en t te header de Soap et non dans le corps body 243 9 changes B2B Les Cahiers du Programmeur Java EE 5 Service web red finissant les param tres de la m thode webService public class Validation WebMethod WebResult name cardStatus 1 public String validateCreditCard WebParam name creditCardNumber mode WebParam Mode IN String ccNumber WebParam name creditCardType String ccType WebParam name expiryDate String ccExpiryDate CTED REMARQUE Les fichiers XSD Pour mieux comprendre Putilit de ces annotations regardez attentive Comme nous le verrons par la suite les fichiers ment les deux versions de sch ma XML Ces sch mas repr sentent les XSD sont g n r s automatiquement puis d ploy s param tres de la
198. de retrouver un entity bean partir d un param tre ici la cl Le type de retour est l interface m tier EJB Remote et Local Les entity beans 2 1 peuvent tre invoqu s de mani re distante ou locale Selon le cas l interface de fabrique h rite soit de EJBHome soit de EJBLocalHome et l interface m tier de EJBObject ou de EJBLocalObject Pour les appels locaux les m thodes ne lancent pas de RemoteException L interface m tier h rite de javax ejb EJBObject Accesseurs des deux attributs de l entity bean cl etvaleur 316 L exemple ci apr s utilise un CMP qui persiste des cl s et des valeurs dans une table constitu e de deux colonnes Les entity beans 2 x sont constitu s de deux interfaces et d une classe Linterface de fabrique la home interface d finit les m thodes qu un client peut invoquer pour cr er trouver ou supprimer un EJB Etant donn que les EJB entity sont persistants un client peut cr er une ins tance d un composant c est dire faire un insert dans la table mais aussi en rechercher une existante un ordre select Notez que l invoca tion de ces m thodes peut chouer soit pour des raisons li es au r seau RemoteException soit pour des probl mes d acc s la base de donn es CreateException FinderException Home interface de l entity bean public interface HelloHome extends EJBHome Hello create String cle throws RemoteException CreateExcepti
199. deliveryAddress qui serait son nom par d faut On rend la relation Comme nous l avons vu pour les annotations l mentaires JPA utilise des valeurs et des param tres par d faut programmation par exception pour effectuer son mapping Ainsi si un attribut n est pas annot JPA utilisera les valeurs par d fauts pour le rendre persistant Il en est de m me pour les relations Il est possible de ne pas utiliser l annotation OneToOne si les param trages par d faut nous satisfont Nom de la classe de l association Dans notre exemple du bon de commande targetEntity aurait pu tre gale la classe Address Les op rations qui doivent tre propag es la classe associ e d crit par la suite dans ce chapi tre Chargement de la relation d crit dans la suite de ce chapitre L association est facultative Cet attribut n est utilis que dans un lien bidirec tionnel Cette annotation s applique une classe une m thode ou un attribut Nom de la colonne contenant la cl trang re Nom de la colonne r f renc e si ce n est pas la cl primaire La valeur doit elle tre unique La valeur nul est elle autoris e 78 gt v obligatoire en refusant la valeur nu11 dans cette colonne Code de l annotation javax persistence OneToOne package javax persistence Target METHOD FIELD Retention RUNTIME public interface OneToOne
200. der Le service du transporteur a besoin de conna tre gt DeliveryPlace from new DeliveryPlace l adresse de chargement et de livraison des arti from setContact Constants COMPANY_NAME cles from setStreet Constants COMPANY_STREET from setCity Constants COMPANY_CITY from setState Constants COMPANY_STATE from setZipcode Constants COMPANY_ZIPCODE from setCountry Constants COMPANY_COUNTRY DeliveryPlace to new DeliveryPlace to setContact order getCustomer getLastname to setStreet order getDeliveryAddress getStreet1 to setCity order getDeliveryAddress getCityQ to setState order getDeliveryAddress getState to setZipcode order getDeliveryAddress getZipcode to setCountry order getDeliveryAddress getCountry On invoque le service web en lui passant les gt Delivery delivery deliveryService getDeliveryPort deux adresses ainsi que le num ro de bon de delivery deliverItems from to order getId toString commande 254 Paquetages des diff rents services web Les services web tant h berg s par les partenaires BarkBank et PetEx ils ne se trouvent pas dans l application YAPS Pet Store On utilise donc des projets diff rents pour accueillir ces sources Pour distinguer les classes que l on d veloppe src de celles qui sont g n r es generated on se sert de r pertoires diff rents Ainsi pour BarkBank la classe du service web se tro
201. e CREDIT_CARD_E XPIRY_DATBarchar 5 ADDRESS_FK bigint CUSTOMER_FK bigint D bigint Hullable false DESCRIPTION varchar 255 Nullable false Y NAME varchar 30 Nullable false Od CATEGORY_FK bigint Nullable false Figure 4 8 Sch ma de la base de donn es Od PRODUCT FK bigint D igi Nullable false ORDER_FK bigit Nullable false ORDER_LINE_FK bigint Nullable false T_ORDER_LINE D bigit Nullable false QUANTITY integer Nullable false ITEM_FK bigint Nullable false T_ITEM D bigint Nullable false UNIT_COST double Nullable false IMAGE_PATH varchar 255 Nullable true NAME varchar 30 Nullable false Nullable false Notez la pr sence de la table de jointure t_order_order_line qui permet de stocker les cl s trang res du bon de commande et de ses lignes En r sum Dans ce chapitre nous avons d velopp les objets persistants de l appli cation YAPS Pet Store Pour cela nous avons utilis JPA qui permet de simplifier le m canisme de mapping objet relationnel Cette sp cifica tion pr sente l avantage d avoir r concili les d tracteurs des entity beans 2 x avec Java EE sans d cevoir les utilisateurs de frameworks Open Source dont elle s est inspir e Dans le chapitre suivant nous d couvri rons comment manipuler ces objets partir d une couche de traitements de stateless session beans
202. e lt value gt account customer lt value gt l attribut customer du managed bean ayant lt managed property gt comme alias account L adresse de livraison est initialis e avec gt lt managed property gt l adresse de domiciliation lt property name gt deliveryAddress lt property name gt lt value gt account homeAddress lt value gt lt managed property gt lt managed bean gt ae La page r capitulative TELECHARGER Le code de l application Ne L adresse et le mode de paiement saisis le client est redirig vers une culs ait page r capitulant ses achats Cette page l informe du num ro de bon de gt http Awww antoniogoncalves org commande ainsi que de la r ception imminente d un e mail voir cha pitre 10 Traitements asynchrones YAPS PetStore Items Mozilla Firefox Cichier dition Affichage Historique Marque pages Qutis YAPS Pet Store F Account Cart Yet Another Pet Store Pets Your Order is Complete 103 Birds Your order id is 103 Cats Amazon Parrot Dogs Female Adult A Chihuahua 4 a Female Adult 5 x100 0 500 0 F Rattlesnake Male Adult 1x20 0 20 0 Bulldog 2x Spotless Male Puppy 4x 120 0 480 0 22 0 440 Total 1044 0 You will receive shortly an email confirming your order Thank you for shopping with the YAPS Pet Store The YAPS Pet Store Demo is a Figure 8 9 fictional sample application My C1 Doriy P La page orderconfi
203. e 5 pr sente les stateless session beans Nous les utiliserons pour d velopper les compo sants m tiers 33 2 Architecture de l application Les Cahiers du Programmeur Java EE 5 EJB Avec ou sans tat Un EJB Stateless est utile pour calculer cos x con vertir des euros en dollars supprimer tous les bons de commande pass s il y a 5 ans ou obtenir le cours d une action Un EJB Stateful sert stocker des articles achet s en ligne dans un panier lectronique ou com mander plusieurs billets de train Le chapitre 8 pr sente les stateful session beans qui seront utilis s pour d velopper le panier lec tronique de l application YAPS Pet Store L API JMS et les message driven beans sont d crits au chapitre 10 Les traitements asynchrones de l application utilisent ces deux technologies 34 Exemple d EJB Stateless Stateless public class MonBean Le code m tier public void maMethodeQ return EJB Stateful Par opposition au composant sans tat les stateful session beans associent les requ tes un client sp cifique unissant client et EJB dans une rela tion un un Ce type de composant fournit ainsi un ensemble de traite ments via des m thodes mais il a aussi la possibilit de conserver des donn es entre les diff rents appels de m thodes d un m me client Une instance particuli re est donc d di e chaque client qui sollicite ses ser vices et ce
204. e EntityManager void persist Object object lt T gt T merge T t void remove Object object lt T gt T find Class lt T gt aClass Object object void flushO void clear Query createQuery String query Les m thodes persist merge remove find flush et clear permettent de manipuler un entity bean createQuery est utilis e pour faire des requ tes sur des objets D taillons comment utiliser cette API Persister un entity bean Persister un entity bean signifie que les valeurs des attributs sont stock s en base de donn es On persiste des entit s qui n existent pas en base sinon on les met jour Pour ce faire il faut cr er une nouvelle instance de l entit l aide de l op rateur new affecter les valeurs gr ce aux m thodes set lier un entity bean un autre lorsqu il y a des associa tions et enfin appeler la m thode EntityManager persistO Exemple simple de persistance d un objet Customer customer new Customer 1 customer setId 1234 customer setFirstname Paul 2 customer setLastname Dupond em persist customer Vous l aurez compris l objet Customer tant un entity bean il d finit sa strat gie de mapping gr ce aux annotations que nous avons vues dans le pr c dent chapitre et saura persister ses attributs dans la table ad quate Revenons nos stateless beans Dans notre architecture distribu e ce sont les interfaces graphiques qui eff
205. e METHOD l annotation peut tre utilis e sur des m thodes l ex cution de l application e PACKAGE l annotation peut tre utilis e sur des paquetages 70 Cl primaire Comme nous l avons vu pr c demment un entity bean doit avoir au minimum les annotations Entity et Id javax persistence Id annote un attribut comme tant un identifiant unique Code de l annotation javax persistence ld package javax persistence Target METHOD FIELD Retention RUNTIME public interface Id La valeur de cet identifiant peut tre soit g n r e manuellement par l application soit g n r e automatiquement gr ce l annotation javax persistence GeneratedValue Trois valeurs sont alors possibles e La g n ration de la cl unique se fait de mani re automatique AUTO par la base de donn es valeur par d faut e On utilise une s quence SQL SEQUENCE pour obtenir cette valeur e Les identifiants sont stock s dans une table TABLE Code de l annotation javax persistence GeneratedValue package javax persistence TargetC METHOD FIELD Retention RUNTIME public interface GeneratedValue GenerationType strategy default AUTO String generator default Ci apr s le code de la classe Address avec une g n ration automatique de l identifiant Entity bean Address avec g n ration automatique d identifiant Entity Table name t_address public class Address Id Gen
206. e ServiceLocatorException dans le cas contraire Extrait du code de la m thode r cup rant les interfaces distantes public Object getRemoteInterface String jndiName throws ServiceLocatorException Object remoteInterface try remoteInterface initalContext lookup jndiName 2 catch Exception e throw new ServiceLocatorException e 6 return remoteInterface O Lautre avantage du Service Locator est d optimiser la r cup ration des objets en utilisant un m canisme de cache Lorsqu il trouve un objet dans JNDI le Service Locator le stocke dans un cache une HashMap par exemple puis le r utilise directement lors des appels suivants Ceci nest possible que si le Service Locator impl mente le design pattern Singleton Le singleton Un singleton est une classe pour laquelle une et une seule instance existe dans toute l application Toutes les r f rences d objets de ce type sont en r alit des r f rences un m me objet Par cons quent un sin gleton n est stock qu une seule fois en m moire L utilisation d un singleton r side dans la pr vention de la cr ation d un objet autre que celui que vous fournissez Pour ce faire il suffit dans un premier temps de d clarer tous les constructeurs comme tant priv et d avoir une m thode publique et statique permettant de retourner l ins tance unique du singleton Le code suivant vous montre le Service Locator impl ment en sin gleton et utilisant
207. e bon de commande Cette table cr e la jointure entre le bon de com mande et ses lignes de commande La cl pri maire de cette table est constitu e des deux cl s trang res Contraintes d int grit r f rentielle sur la table de jointure 83 4 Objets persistants Les Cahiers du Programmeur Java EE 5 PERSISTANCE Nom des contraintes d int grit Le nom des contraintes d int grit est g n r automatiquement par JPA Parfois ce nom peut tre assez exotique comme pour les contraintes de la table interm diaire entre bons de com mandes qui se nomment TRDRORDERLINERDRFK et TRDRRDRLINERDRLNFK Nom de la table de jointure Catalogue et sch ma de la table Colonne de la cl trang re faisant r f rence a la cl primaire de la table qui maintient la rela tion Colonne de la cl trang re faisant r f rence la cl primaire de la seconde table Ce tableau permet de d finir les contraintes d unicit sur une ou plusieurs colonnes L entity bean Category utilise un chargement diff r pour charger la relation vers ses produits 84 gt ALTER TABLE T_ORDER_ORDER_LINE ADD CONSTRAINT TRDRRDRLINERDRLNFK FOREIGN KEY ORDER_LINE_FK REFERENCES T_ORDER_LINE ID Lannotation JoinTable est utilis e lorsqu on veut red finir les valeurs par d faut de la table de jointure Code de l annotation javax persistence JoinTable package javax persist
208. e de gestionnaire de transactions gt http java sun com products jta 120 Transactions On parle de transaction lorsqu un certain nombre de t ches doivent tre effectu es ensemble Par exemple pour cr er un bon de commande plu sieurs entity beans bon de commande ligne de commande adresse de livraison doivent tre cr s et donc ins r s en base de donn es Ces insertions doivent toutes tre r alis es si on ne veut pas avoir de pro bl mes de coh rence de donn es En cas de probl mes d acc s aux don n es on demande la transaction de retrouver l tat initial des donn es en annulant toutes les mises jour ACIDit On attend d une transaction les propri t s d ACIDit c est dire A tomicit une transaction doit tre enti rement effectu e ou pas du tout Par exemple lors de la finalisation d une commande il est imp ratif que la mise jour de l adresse de livraison et la validation du paie ment soient toutes les deux effectu es avec succ s Si une action choue alors l autre ne doit pas tre ex cut e Coh rence la coh rence entre tables d une m me base doit tre res pect e m me en cas d incident Par exemple les contraintes d int grit entre cl s primaires et cl s trang res doivent tre respect es Isolation si deux transactions T1 et T2 ont lieu simultan ment T1 ne doit pas voir les modifications de T2 tant que T2 n a pas t commit e et inver
209. e du client partir de sa date de naissance 94 Id GeneratedValue strategy GenerationType AUTO private Long id ColumnCunique true nullable false length 8 private String login Column nullable false length private String password Column nullable false length 30 private String firstname Column nullable false length private String lastname private String telephone private String email Column name date_of_birth Temporal Temporal Type DATE private Date dateOfBirth Transient private Integer age OneToOne fetch FetchType EAGER cascade CascadeType ALL JoinColumn name address_fk nullable true private Address homeAddress O 8 30 PrePersist PreUpdate private void validateData 1 if firstname null equals firstname throw new ValidationException Invalid first name if lastname null equals lastname throw new ValidationException Invalid last name if login null equalsClogin throw new ValidationException Invalid login if password null equals password throw new ValidationException Invalid password PostLoad PostPersist PostUpdate public void calculateAge if dateOfBirth null age null return Calendar birth new GregorianCalendar birth setTime date0fBirth Calendar now new GregorianCalendar now setTime new Date int adjust 0 if C now get Calend
210. e les donn es du lt h inputText value account customer login formulaire sont directement affect es a l entity bean customer lt h outputText value Firstname gt account customer login lt h inputText value account customer firstname gt lt h outputText value Lastname gt lt h inputText value account customer lastname gt lt h outputText value Email gt lt h inputText value account customer email gt lt h outputText value Telephone gt lt h inputText value account customer tel ephone gt La date de naissance est convertie au format jj gt lt h outputText value Date of birth dd MM yyyy gt mm aaaa lt h lt h inputText gt lt h panelGrid gt Adresse du client gt lt h3 gt Address lt h3 gt Les informations de l adresse sont affect es gt lt h l entity bean Address lt h lt h lt h lt h lt h lt h lt h lt h lt h lt h lt h panelGrid columns 2 gt outputText value Street1 gt inputText value account homeAddress outputText value Street2 gt inputText value account homeAddress outputText value City gt inputText value account homeAddress outputText value State gt inputText value account homeAddress outputText value Zipcode gt inputText value account homeAddress lt h outputText value Country gt inputText value account homeAddress
211. e seconde fois son mot de passe Le syst me lui demande alors de saisir ses coordonn es et informations personnelles identiques celles du cas d utilisation G rer les clients Exceptions Le login doit tre unique dans le syst me Si ce mest pas le cas l internaute doit en tre averti et doit en choisir un autre Si les deux mots de passe ne sont pas identiques une exception doit tre lev e Post conditions L internaute est connu du syst me il devient client de la soci t YAPS Maquettes Pour se cr er un compte linternaute clique sur le menu Sign on puis saisit un login unique suivi de deux fois son mot de passe Apr s v rifica tion de la validit des mots de passe et de leur concordance le syst me lui demande de compl ter ses informations YAPS PetStore Signin Mozilla Firefox Fichicr Edition Akichoge Aler Marquepages Outils tie antonio goncalves SSA YAPS Pet Store Yet Another Pet Store Birds Cats Dogs Fish Yes No 1 would like to sign up for an account Are you a returning customer Reptiles Login Login james terre Password Password Passward Repeat Create new account The YAPS Pet Store Demo is a fictional sample application Java ao Derby e POWERED UML Post conditions des cas d utilisation Les post conditions repr sentent l tat les r sul tats du cas d utilisation la fin de son ex cution Si le
212. e to String reference logger info Delivery Order Received logger info Deliver from from 1ogger info Deliver to to 1ogger info Reference n reference du service web de livraison Ce service ne retourne pas de r sultat On peut donc utiliser l annotation OneWay Nous ne nous int ressons pas ici a la mani re dont le syst me de PetEx est averti Nous nous contentons juste d afficher les informations par le biais d un logger 251 9 changes B2B Les Cahiers du Programmeur Java EE 5 UML St r otypes BCE Trois autres st r otypes ont t int gr s UML et sont souvent utilis s pour le pattern MVC lt lt boundary gt gt la vue repr sente les objets qui r alisent les changes entre le syst me et les acteurs comme les pages web ou les interfaces graphiques lt lt control gt gt le contr leur objet impl men tant des m canismes de collaboration comme les managed beans lt lt entity gt gt le mod le objet repr sentant les informations du syst me comme les entity beans re boundary control entity 252 Appel des services web Ces deux services web sont invoqu s diff rents endroits dans l applica tion YAPS Pet Store La cr ation d un bon de commande fait intervenir plusieurs composants Le client saisit son adresse de livraison et ses coordonn es bancaires partir de la page confirmorder jsp puis il clique sur Submit
213. e un extrait de servlet affichant la liste des produits pour une cat gorie donn e Extrait de servlet m lant traitement et pr sentation public class ShowProductsServlet extends HttpServlet public void service HttpServletRequest request HttpServletResponse response throws ServletException response setContentType text html PrintWriter out response getWriterQ Context initalContext new InitialContext CatalogLocal catalogLocal CatalogLocal initalContext lookupC ejb stateless Catalog Long categoryId Long valueOf request getAttribute categorylId Category category catalogLocal findCategory categoryId List lt Product gt products category getProductsQ out printInC lt HTML gt out printIn C lt HEAD gt out printInC lt TITLE gt Display Products lt TITLE gt out printIin lt HEAD gt out printIn lt BODY gt out printInC lt TABLE gt for Product product products out printInC lt TR gt out printin lt TD gt out printin lt A href gt out printIn product getName out printIn lt A gt out printin lt BR gt out printin product getDescription out printin lt TD gt out printin lt TR gt out printIn lt TABLE gt out printIn lt BODY gt out printIin lt HTML gt out close Comme le montre cet exemple le code n est pas tr s l gant et peut rapidement devenir illisible O
214. ean o gt lt lt Message Driven Bean gt gt OrderPrinterBean publish Order order Order void createOrder customer Customer onMessage message Message void printOrder order Order void L envoi du message L envoi du message JMS se fait apr s la cr ation du bon de commande C est donc EJB Stateless OrderBean qui utilise l API JMS pour envoyer le message contenant le bon de commande LEJB OrderBean envoie un message public class OrderBean implements OrderRemote OrderLocal Resource mappedName jms petstoreConnectionFactory private ConnectionFactory connectionFactory Resource mappedName jms topic order private Topic destinationOrder PostConstruct public void openConnection try connection connectionFactory createConnection catch JMSException e throw new EJBException e PreDestroy public void closeConnection if connection null try connection close catch JMSException e throw new EJBException e public Order createOrder Customer customer Address deliveryAddress CreditCard creditCard List lt CartItem gt cartItems Order order new Order customer em merge deliveryAddress creditCard List lt OrderLine gt orderLines new ArrayList lt OrderLine gt for CartItem cartItem cartItems orderLines add new OrderLine cartItem getQuantityQ cartItem getItemQ order setOrderLines orderLines
215. ears 261 JMS 262 Les messages 263 Len t te du message 263 XVI Les propri t s 264 Le corps du message 264 Les objets administr s 265 La fabrique de connexions 265 Destinations 266 Le mode Point Point 267 Le mode publication abonnement 267 Envoyer les messages 268 Recevoir un message 269 La s lection de messages 271 Message driven bean 272 Exemple de message driven bean 272 Le cycle de vie d un MDB 274 Les annotations de callback 275 JavaMail 275 La classe Session 276 La classe Message 276 La classe InternetAddress 277 La classe Transport 277 Les traitements asynchrones de YAPS Pet Store 278 L envoi du message 279 Les message driven beans 280 Envoi d e mails 280 Impression du bon de commande 282 Listener JMS de l application Swing 283 Paquetages des MDB 286 Architecture 286 Ex cuter application 287 En r sum 287 A SPECIFICATIONS JAVA EE 5 sccccccssssesssssssnscscceseeseess 289 B T CHES ANT ss itssssvcciccceceaseassvtscuncuecdassivasteesscessnassusaes 291 Build xml 291 Admin xml 303 C SIGLES ET ACRONYMES csscsssssssssesssesneeeeenseeeeneeeeeees 311 D EJB 2 A AN A 315 Un exemple d entity bean 315 Un exemple de stateless bean 320 En r sum 323 chapitre Pr sentation de l tude de cas Ce chapitre pr sente de mani re globale l tude de cas que nous allons d velopper tout au long de cet ou
216. ec diff rents environnements logiciels quelle que soit leur plate forme d ex cution comme DCOM ou Corba IIOP En effet Soap permet la transmission de messages entre objets distants en invoquant des m thodes sur des objets physiquement situ s sur une autre machine Le transfert se fait le plus souvent l aide du protocole HTTP Le protocole Soap se d compose en deux parties une enveloppe contenant des informations sur le message lui m me afin de permettre son acheminement et son traitement e un mod le de donn es d finissant le format du message c est dire les informations transmettre Apr s avoir pr sent le protocole Soap d crivons plus pr cis ment sa manipulation En premier lieu il est important de noter qu en pratique Soap ne se manipule pas directement En effet en Java EE 5 l API uti lis e pour changer des messages est JAX WS Java API for XML based Web Services Cela nous permet donc de nous concentrer sur le d veloppe ment et l invocation de services web sans nous soucier du protocole Soap UDDI UDDI Universal Description Discovery and Integration est une sp cifica tion d finissant la mani re de publier et de retrouver des services web C est un annuaire qui offre des m canismes d enregistrement et de recherche de services web d velopp s et publi s par des entreprises UDDI fournit des informations sur l auteur de services web adresse contact sur la classificat
217. ec executable verifier gt lt arg line d verifier dir gt lt arg line barkbank war gt lt exec gt lt target gt V rifie l application PetEx gt lt target name petex verify gt lt mkdir dir verifier dir gt lt exec executable verifier gt lt arg line d verifier dir gt lt arg line petex war gt lt exec gt lt target gt Affiche les composants d ploy s sur le serveur gt lt target name show gt GlassFish lt exec executable asadmin gt lt arg line show component status gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line application name gt lt exec gt lt target gt Ex cute l application cliente gt lt target name run client depends yaps compile yaps build client jar gt lt echo message Runs the client application gt lt java classname com yaps petstore client ui PetstoreFrame fork yes dir gt lt classpath gt lt pathelement location yaps client jar gt lt path refid classpath gt lt classpath gt lt java gt lt target gt 302 lt target name db insert data gt lt sql src yaps config dir data sql driver db driver url db url userid db user password db pas
218. ectronique vous pouvez saisir un mauvais num ro de carte ban caire par exemple et v rifier que le statut s affiche l cran Saisissez maintenant des donn es correctes Cela a pour effet de cr er un bon de commande et d avertir le transporteur PetEx via son service web Pour v rifier que le service a bel et bien t invoqu consultez les logs du serveur GlassFish Vous pouvez ainsi voir l appel au service Delivery YAPS PetStore Confirm Order Mozilla Firefox Ce Cichier Edition Affichage Listorique Marque pages Outils 2 he antoniv goncalves Pets Confirm Order Credit Card is invalid Visa card number has Lo be even Birds Cats Dogs Personal information Fish Reptiles Firstname steve Lastname Jobs Email Delivery Address Streeti 154 Star Boulevard Street2 sd Zipcode 5455 Credit Card Credit card number 123 Type visa Expiry date MM YY 10 10 Extrait des logs du serveur GlassFish com petex transport Delivery Order Received com petex transport Deliver from DeliveryPlace contact Yaps Inc street 125 Poodle Square city San Francisco state LA zipcode 16354 country USA com petex transport Deliver to DeliveryPlace contact Jobs street 154 Star Boulevard city San Francisco state WC Zipcode 5455 country USA com petex transport Reference n 101 En r sum Les clients
219. ectuent les new et les affectations de valeurs Le r le du stateless bean est donc de r cup rer des objets d j initialis s et de les persister Cr ation d un client dans un stateless bean public Customer createCustomer Customer customer O Address homeAddress customer setHomeAddress homeAddress O em persist customer O return customer Dans le code ci dessus la m thode permettant de cr er un client poss de deux entity beans en param tres un client et une adresse Ces deux entity beans ont t instanci s par une application cliente Swing par exemple qui a affect les valeurs Paide des setters L appel PEJB est effectu en passant ces entity beans en param tres Ensuite le stateless bean a en charge de relier les beans entre eux et de les persister l aide de l entity manager la variable em ce moment l l objet Customer devient manag attach et donc ligible pour tre ins r en base PERSISTANCE Insertion en cascade Si vous vous reportez au code de l entity bean Customer vous verrez qu il utilise une relation en cascade avec l adresse CascadeType ALL englobe le mode CascadeType PERSIST Ceci signifie que lorsqu on ins re un client son adresse est aussi automatiquement ins r e Si ce n avait pas t le cas nous aurions d persister l adresse puis le client comme ceci em persist address customer setHomeAddress address em persist customer
220. elation unidirectionnelle 0 1 est impl ment e de la m me mani re qu une relation 1 1 La seule diff rence r side dans le fait quelle est option nelle Prenons l exemple d un client et de son adresse Dans les cas d utilisa tion il est d crit qu un client n est pas oblig de fournir son adresse au syst me Par contre si le client souhaite la saisir il ne peut en avoir qu une Pour transformer une relation 1 1 en 0 1 il suffit d autoriser la valeur nu11 dans la colonne Pour cela il est n cessaire de positionner l attribut nullable de l annotation JoinColumn true Relation unidirectionnelle 0 1 entre client et adresse Entity Table name t_customer public class Customer Id GeneratedValue private Long id Peut on avoir la colonne dans un ordre insert ou update Cet attribut peut contenir la d finition de la colonne au format DDL Utilis lors d un mapping multitable La colonne address_fk n accepte pas la valeur nu 1 le lien est donc obligatoire A partir des annotations JPA g n re une con trainte d int grit r f rentielle entre la colonne address_fk de t_order et la cl primaire de la table t_address 79 4 Objets persistants Les Cahiers du Programmeur Java EE 5 Pour rendre la relation optionnelle 0 1 on autorise la valeur nu11 valeur par d faut que l on aurait pu omettre La colonne address_fk accepte la valeur null le lien est d
221. eld name gt lt column name gt key lt column name gt lt jdbc type gt VARCHAR lt jdbc type gt lt sql type gt varchar 10 lt sql type gt lt cmp field gt l attribut valeur est stock dans la colonne value de type varchar 50 lt cmp field gt lt field name gt valeur lt field name gt lt column name gt value lt column name gt lt jdbc type gt VARCHAR lt jdbc type gt lt sql type gt varchar 50 lt sql type gt lt cmp field gt lt entity gt lt enterprise beans gt lt jbosscmp jdbc gt Il faut ensuite compiler et packager tous ces fichiers dans un jar pour pouvoir d ployer l EJB Il reste maintenant d velopper une classe cliente qui pourra interagir avec ce composant Il ny a pas d injection en EJB 2x il faut donc obligatoirement utiliser JNDI pour retrouver l interface de l entity bean partir du contexte initial Dans cet exemple on ins re des donn es en base l aide de la m thode create La m thode findByPrimaryKey nous permet de retrouver le composant et den modifier les valeurs Pour supprimer les don n es de la base on appelle la m thode remove de l entity bean Classe utilisant l entity bean public class Main public static void main String args InitialContext ic null try Properties props new PropertiesO 4 Propri t s pour acc der l annuaire JNDI de props setProperty java naming factory initial JBoss org
222. elle existe sinon en d marre une nouvelle valeur par d faut REQUIRES_NEW d marre toujours une nouvelle transaction suspend celle en cours si elle existe MANDATORY n cessite une transaction Si l appelant n a pas de transac tion une exception est lev e NOT_SUPPORTED ne cr e pas de transaction ni ne propage une transac tion existante SUPPORTS ne d marre aucune transaction utilise celle qui est en cours NEVER refuse toute transaction Si l appelant est dans une transac tion une exception est lev e Exemple de stateless bean utilisant diff rents modes de transaction Stateless TransactionAttribute value TransactionAttributeType REQUIRED public class CustomerBean implements CustomerRemote PersistenceContext unitName petstorePU private EntityManager em public Customer createCustomer Customer customer Address homeAddress customer setHomeAddress homeAddress em persist customer return customer TransactionAttribute value TransactionAttributeType NEVER public Customer findCustomer final Long customerId Customer customer em find Customer class customerld return customer Comme on peut le voir dans le code pr c dent l annotation TransactionAttribute peut tre utilis e deux emplacements e Sur la classe de l EJB l annotation d finit alors le mode transac tionnel appliquer sur toutes les m thodes de l EJB e Sur une m tho
223. elles partir du langage Java Elle se charge de trois tapes indispensables l acc s aux donn es e la cr ation d une connexion la base l envoi d instructions SQL e l exploitation des r sultats provenant de la base Pour acc der la base de donn es JDBC s appuie sur des drivers pilotes sp cifiques un fournisseur de SGBDR ou sur des pilotes g n riques AURE Swing Pour de plus amples informations reportez vous aux r f rences suivantes Q Emmanuel Puybaret Swing Eyrolles 2006 Kathy Walrath The JFC Swing Tutorial Addison Wesley 2004 Figure 2 2 Application cliente d velopp e en Swing Dans le chapitre 6 nous utiliserons JNDI pour acc der aux composants distants a partir de l interface Swing APPROFONDIR JNDI Java Naming and Directory Interface est rarement utilis tout seul Il est g n ralement employ avec les EJB Il n y a donc que peu de livres s attardant uniquement sur cette API Rosanna Lee The Jndi Api Tutorial and Reference Building Directory Enabled Java Applications Addison Wesley 2000 gt http java sun com products jndi PERSISTANCE Les pilotes JDBC Les pilotes JDBC sont class s en quatre cat gorie e Les pilotes de type 1 pont JDBC ODBC per mettent de convertir les appels JDBC en appel ODBC Open Database Connectivity e Les pilotes de type 2 sont crits en code natif et d pendent de la plate forme e Les pil
224. ello sayHello System out printInChello todayQ 2 catch Exception e e printStackTrace En r sum La sp cification 3 des EJB a t labor e en vue de simplifier la concep tion d EJB pour le d veloppeur Les avantages sont les suivants e une architecture bas e sur les Pojos et non plus sur les composants e une API pour le mapping objet relationnel JPA moins de classes et d interfaces impl menter plus besoin d h riter d une super interface ou classe e utilisation des annotations la place des descripteurs de d ploiement XML devenus optionnels e avec le syst me d injection les JNDI lookups ne sont plus n cessaires une gestion du cycle de vie simplifi e 4 nomme ejb Hel1o On recherche dans JNDI l interface m tier qui se 4 On appelle les deux m thodes m tiers 323 D EJB 2 A ACC Application Client Container 141 179 acronymes 27 311 annotation 26 27 35 70 javax annotation PostConstruct 125 218 javax annotation PreDestroy 125 218 275 279 javax annotation Resource 268 270 javax ejb ActivationConfigProperty 273 javax ejb ApplicationException 124 javax ejb EJB 223 265 javax ejb Local 106 javax ejb MessageDriven 35 javax ejb PostActivate 218 javax ejb PrePassivate 218 javax ejb Remote 106 javax ejb Stateful 34 220 javax ejb Stateless 34 106 153 javax ejb TransactionAttribute 121 128 javax jws Onew
225. ement par ce dernier De m me que si un EJB l ve une exception celle ci est tout d abord inter cept e par le conteneur qui d cidera d effectuer telle ou telle action Servlet 2 5 et JSP 2 1 Les servlets sont des programmes Java fonctionnant c t serveur au m me titre que les CGI et les langages de script tels que ASP ou PHP Les servlets permettent donc de recevoir des requ tes HTTP de les traiter et de fournir une r ponse dynamique au client Elles s ex cutent dans un conteneur utilis pour tablir le lien entre la servlet et le serveur web Les servlets tant des programmes Java elles peuvent utiliser toutes les API Java afin de communiquer avec des applications externes se connecter des bases de donn es acc der aux entr es sorties fichiers par exemple Java Server Page ou JSP est une technologie bas e sur Java qui permet aux d veloppeurs de g n rer dynamiquement du code HTML XML ou tout autre type de page web Une page JSP rep rable par l extension jsp aura un contenu pouvant tre diff rent selon certains param tres des informations stock es dans une base de donn es les pr f rences de l utilisateur tandis qu une page web statique dont l extension est htm ou htm1 affichera continuellement la m me information Exemple de page JSP affichant la date du jour lt page import java util Date gt lt html gt lt head gt lt title gt JSP Affichant la date lt title
226. en jsr detail id 224 JAXB Java Architecture for XML Binding 2 0 222 http jcp org en jsr detail id 222 SAAJ SOAP with Attachments API for Java 1 0 67 http jcp org en jsr detail id 67 StAX Streaming API for XML 1 0 173 http jcp org en jsr detail id 173 Web Services 1 2 109 http jcp org en jsr detail id 109 Web Services Metadata 2 0 181 http jcp org en jsr detail id 181 Tableau A 3 Sp cifications web Sp cification Version JSR URL JSF JavaServer Faces 1 2 252 http jcp org en jsr detail id 252 JSP JavaServer Pages 2 1 245 http www jcp org en jsr detail id 245 JSTL JavaServer Pages Standard Tag Library 1 2 52 http jcp org en jsr detail id 52 Servlet 2 5 154 http jcp org en jsr detail id 154 Les Cahiers du Programmeur Java EE 5 Tableau A 4 Sp cifications Enterprise Common Annotations 1 0 250 http jcp org en jsr detail id 250 EJB Enterprise JavaBeans 3 0 220 http jcp org en jsr detail id 220 JAF JavaBeans Activation Framework 1 1 925 http jcp org en jsr detail id 925 JavaMail 1 4 919 http jcp org en jsr detail id 919 JCA J2EE Connector Architecture 1 5 112 http jcp org en jsr detail id 112 JMS Java Message Service 1 1 914 http jcp org en jsr detail id 914 JPA Java Persistence API 1 0 220 http jcp org en jsr detail id 220 JTA Java Transaction API 1 1 907 http jcp org en jsr detail id 907 Tableau A 5 Sp cificat
227. en leur m tier ils ont bien souvent tendance crire tr s voire trop peu persuad s que les analystes comprendront Ainsi la phrase anodine Une fois les achats effectu s on obtient un bon de commande peut susciter plusieurs inter rogations et notamment Qu est ce qu un bon de commande Y a t il des contraintes l gales pour certains produits Que fait on du bon de commande Il est alors fr quent de r diger les cas d utilisa tion de mani re bidirectionnelle sur la base d interviews et d entretiens de recueil du besoin Ainsi un analyste posera des questions par crit ou l oral a un utilisateur Ce dernier y r pondra permettant ainsi l analyste de dresser les diff rents cas d utilisation G rer les clients R sum Permet un employ de cr er modifier supprimer rechercher visualiser un client Acteurs Employ Description YAPS veut pouvoir cr er ses clients dans le syst me partir des donn es existantes Elle souhaite galement pouvoir les modifier les supprimer et les rechercher Les l ments caract risant un client sont les suivants e identifiant unique du client e login et mot de passe utilis s par le client pour se connecter application pr nom et nom de famille num ro de t l phone o l on peut joindre le client et son adresse mail e adresse postale deux zones permettent de saisir l adresse du client La premi
228. ence Target METHOD FIELD Retention RUNTIME public interface JoinTable String name default String catalogQ default String schema default JoinColumn joinColumns default JoinColumn inverseJoinColumnsQ default UniqueConstraint uniqueConstraints default Chargement d une association Toutes les annotations de relations que nous venons de voir OneToOne OneToMany ManyToOne d finissent un attribut agissant sur le chargement des relations Liattribut fetch permet de sp cifier si vous souhaitez que les objets associ s se chargent directement EAGER ou de mani re diff r e LAZY Dans le cas d un mode de chargement EAGER les objets li s sont automati quement charg s Prenons l exemple de la cat gorie qui est li e une liste de produits et un produit li sa cat gorie lien bidirectionnel Lorsqu on charge une cat gorie on ne veut pas que la liste des produits se charge automatiquement On souhaite pouvoir acc der cette liste seulement lorsque l on appelle l accesseur category getProducts c est dire de mani re diff r e LAZY l inverse lorsqu on charge un produit on veut que sa cat gorie soit automatiquement charg e EAGER Une cat gorie poss de une liste de produits Entity public class Category OneToMany mappedBy category fetch FetchType LAZY private List lt Product gt products Gees Entity public class P
229. ent sont affi ch es on peut les mettre jour Une fois les donn es du compte mises jour on les r affiche Le client saisit son login et mot de passe S il est connu du syst me il se connecte et la page prin cipale est affich e Si lors de la connexion le client n est pas reconnu par le syst me on lui affiche un formu laire pour qu il se cr e un compte 198 La navigation entre les pages du compte client est d finie dans le fichier faces config xml Extrait du faces config xml concernant la navigation pour le compte client lt navigation rule gt lt from view id gt lt from view 1d gt lt navigation case gt lt from outcome gt signon lt from outcome gt lt to view id gt signon jsp lt to view id gt lt navigation case gt lt navigation case gt lt from outcome gt signoff lt from outcome gt lt to view id gt signoff jsp lt to view id gt lt navigation case gt lt navigation case gt lt from outcome gt showaccount lt from outcome gt lt to view id gt showaccount jsp lt to vi ew id gt lt navigation case gt lt navigation rule gt lt navigation rule gt lt from vi ew id gt showaccount jsp lt from vi ew id gt lt navigation case gt lt from outcome gt updateaccount lt from outcome gt lt to view id gt updateaccount jsp lt to view id gt lt navigation case gt lt navigation rule gt lt navigation rule gt lt from view id gt updateaccount jsp lt fro
230. entity bean lance une exception de type ValidationException qui est attrap e puis affich e par le client Swing Pot Store TC Hie Customer Catalog Order Look amp teel 6 Category Find w Create Category Find or Create Identifier Name Description Warning 4 invalid name Find ox Latin EE Figure 6 7 Affichage des exceptions La gestion des bons de commande Les bons de commande ne peuvent pas tre cr s ou modifi s par l application Swing Les employ s ne peuvent qu en obtenir la liste en consulter le d tail et ventuellement en supprimer un figure 6 9 148 1 Lists aul the categories oo A E Product 7 Update ID Name Description Product 7 Update Birds Any of the class Aves ot warm blooded egg laying teatner Cats Small camivorous mammal domesticated since cary tim identer 7 A domesticated cammvorous mammal related to the foxes a Fish Name Dalmation Reptiles Any of various cold blooded usually cag laying vertebrates Description Great dog for a fire station Categury ae Description Category Greatcompanion for up to 75 years Birds Saltwater fish from Australla Fish Friendly dog from England Dogs Great companion dog Dogs C nem 28 update Item 28 Update
231. ents de pages c est dire les en t tes menus ou bas de page La plupart des balises autorisent l ajout de param tres en incluant la balise param Pour ce qui est des listes de tout genre combobox listbox on peut rajouter des libell s avec la balise selectItem Lors de l affichage de donn es il est bien souvent n cessaire de les for mater Par exemple on peut citer la conversion de dates au format jj mm aaaa d un entier avec deux chiffres apr s la virgule etc JSF poss de deux balises standards pour vous faciliter la t che convertDateTime et convertNumber JSF vous permet aussi de cr er vos propres convertisseurs Balise JSF Description lt f view Une page JSP voulant utiliser des balises JSF doit Page JSP utilisant des balises JSF les placer dans cette balise Elle se trouve g n lt f view gt ralement en d but et en fin de page lt f subview Sous page JSP utilisant des balises JSF lt f subview gt Cette balise permet de cr er des fragments de page qui pourront ensuite tre englob s Cou ramment utilis pour les en t tes menus ou bas de page lt h commandLink action catalog doFindProducts gt lt h outputText value Birds gt lt f param name categoryId value 5 gt lt h commandLink gt Dans cet exemple on rajoute le param tre categoryId de valeur 5 la balise commandLink lt h selectOneMenu value 4 cart creditCard type gt lt f sele
232. equel de ces attributs est la cl primaire La classe de l entity bean est abstraite Les accesseurs sont abstraits et lancent une RemoteException Chaque m thode create de l interface de fabrique doit avoir une m thode ejbCreate dans la classe du bean Notez que cette m thode retourne la valeur nu11 Une m thode ejbCreate doit avoir obligatoi rement une m thode ejbPostCreate qui permet d ex cuter du code apr s avoir ins r des donn es en base Ces m thodes de callback doivent tre impl ment es m me si on ne les utilise pas 317 D EJB 2 Fichier ejb jar xml Les Cahiers du Programmeur Java EE 5 lt ejb jar gt lt enterprise beans gt lt entity gt Chaque entity bean 2 x doit tre d fini dans le lt display name gt Hel 1oEB lt display name gt fichier ejb jar xml lt ejb name gt HelloBean lt ejb name gt lt home gt Hel1oHome lt home gt lt remote gt Hello lt remote gt lt ejb class gt Hel loBean lt ejb class gt Les CMP d l guent la persistance au conteneur gt lt persistence type gt Container lt persistence type gt lt prim key class gt java lang String lt prim key class gt lt reentrant gt False lt reentrant gt lt cmp version gt 2 x lt cmp version gt lt abstract schema name gt Hel lo lt abstract schema name gt Tous les attributs persistants doivent tre r per tori s dans cette section gt lt cmp fie
233. erPoo Minimum and initial number of connections maintained in the poo amp DerbyPoo Maximum Pool Size 32 Connections E B storervol Maximum number of connections that can be created to satisfy client requests gt gt JUS Resources Pool Resize Quantity 2 E Javaliai Sessions a imn timane om xan m App Cent Modules kond Defeats g Web Services General Settings v M imegrations i JDI Deployments Name petstorePool gt BD sbi componente Datasource Classname org ye 5 d JBI Libraries Vendor specific classname that implements the DataSource and or XADataSource APs Custom MBcans Resocurce Type java sql XADatn Source Y typ Resources Must e e ciae e ntertace veme Description Figure 3 10 Affichage du pool de connexions dans la z console d administration 57 3 Outils et installation Les Cahiers du Programmeur Java EE 5 4 Une source de donn es Cr ation de la base de donn es Pour cr er la base de donn es nous utiliserons la flexibilit de Derby En effet il suffit de ping er c est dire lancer une commande ping sur le pool de connexions pour cr er la base petstoreDB Cette commande ping peut tre faite soit via la console d administration cliquez sur le bouton Ping de l cran pr c dent soit par la commande suivante PETSTORE_HOME ant f admin xml ping connection pool Vous verrez alors apparaitre le nouveau r pertoire GLASSFISH_HOME javadb petstoreDB o Derby stockera
234. er_fk order_line_fk joinColumns JoinColumn name inverseJoinColumns JoinColumn name private List lt OrderLine gt orderLines Cai Le code pr c dent indique JPA de cr er une table pour les bons de commande et une autre pour faire la jointure avec les lignes de com mandes Voici la DDL que l on obtient DDL de relation unidirectionnelle avec table de jointure CREATE TABLE T_ORDER 4 ID BIGINT NOT NULL PRIMARY KEY ID CREATE TABLE T_ORDER_LINE 4 ID BIGINT NOT NULL PRIMARY KEY ID CREATE TABLE T_ORDER_ORDER_LINE 4 ORDER_FK BIGINT NOT NULL ORDER_LINE_FK BIGINT NOT NULL PRIMARY KEY ORDER_FK ORDER_LINE_FK ALTER TABLE T_ORDER_ORDER_LINE 4 ADD CONSTRAINT TRDRORDERLINERDRFK FOREIGN KEY ORDER_FK REFERENCES T_ORDER ID PERSISTANCE Relation n m et h ritage L tude de cas ne comporte pas d h ritages ou de relations n m Pour savoir comment mapper ces deux notions avec JPA vous pouvez consulter deux articles que j ai crit pour le site DevX http www devx com Java Article 33650 gt http www devx com Java Article 33906 Les donn es de l entity bean Order sont ren dues persistantes dans la table t_order La table de jointure est renomm e t_order_order_line ainsi que les colon nes des cl s trang res Table t_order contenant les donn es du bon de commande La table des lignes de commande ne poss de pas de cl trang re vers l
235. era de modifier cette valeur dans la colonne zipcode DDL de la table ADDRESS CREATE TABLE ADDRESS 4 Le nom de la table est identique celui de la classe ID BIGINT NOT NULL 4 Les attributs de la classe sont stock s dans des CITY VARCHAR 255 STATE VARCHAR 255 STREET2 VARCHAR 255 ZIPCODE VARCHAR 255 STREET1 VARCHAR 255 COUNTRY VARCHAR 255 colonnes qui portent le m me nom que les attri buts de l entity bean PRIMARY KEY ID 4 L attribut id est la cl primaire de la table 4 DDL REMARQUE G n ration des DDL Le langage de d finition de donn es Data Definition Language ou DDL permet de mani puler les structures de donn es et non les donn es elles m mes Dans notre exemple l ordre Create Table cr e la structure d une table dans la base Les DDL peuvent soit tre crites par un DBA administrateur de base de donn es soit tre g n r es automatiquement a partir des anno tations JPA Comme nous le verrons dans le chapitre 6 Ex cution de l application cet ouvrage utilise la g n ration automatique Annotations l mentaires du mapping L exemple simple de l entity bean Address peut tre compl t pour modifier certaines conventions de nommage tables colonnes ou de typage colonne non nulle de longueur d finie etc Pour cela il suffit d utiliser les attributs des annotations JPA Table Lannotation javax persistence Table permet de d finir l
236. eratedValue strategy GenerationType AUTO private Long id private String streetl eed Cette annotation s applique une m thode ou un attribut L annotation Id n a pas de m thode Cette annotation s applique une m thode ou un attribut La g n ration de la cl unique peut tre faite soit de mani re automatique AUTO soit en utilisant une s quence SQL SEQUENCE ou une table contenant les identifiants TABLE 71 4 Objets persistants Les Cahiers du Programmeur Java EE 5 ANNOTATIONS Attribut ou m thode La plupart des annotations peuvent s appliquer sur les attributs ou sur les m thodes Par exemple l annotation Id peut tre accol e l attribut id ou la m thode getId Dans cet ouvrage par choix mais aussi pour faciliter la lecture les anno tations sont appliqu es aux attributs et non aux m thodes Cette annotation s applique une m thode ou a un attribut Nom de la colonne La valeur doit elle tre unique La valeur nu11 est elle autoris e Autorise t on la colonne dans un ordre insert ouupdate Cet attribut peut contenir la d finition de la colonne au format DDL Utilis lors d un mapping multitable Longueur maximale pour une colonne de type Varchar Pour les colonnes de type num rique on peut rajouter la pr cision L entity bean est stock dans la table t_address L attribut
237. erci tous ceux qui mont paul durant cette pop e ma femme Denise et mes proches Table des mati res 1 PRESENTATION DE L TUDE DE CAS mrreerrenenenne 1 Expression des besoins 2 Diagramme de cas d utilisation 3 Les acteurs du syst me 3 Les cas d utilisation 4 G rer les clients 5 Maquettes 6 G rer le catalogue 7 Maquettes 8 Visualiser les articles du catalogue 8 Diagramme d activit s 9 Maquettes 9 Rechercher un article 11 Maquettes 12 Se cr er un compte 12 Maquettes 13 Se connecter et se d connecter 14 Maquettes 15 Consulter et modifier son compte 16 Maquettes 17 Acheter des articles 17 Maquettes 18 Cr er un bon de commande 22 Visualiser et supprimer les commandes 22 Maquettes 23 En r sum 23 2 ARCHITECTURE DE L APPLICATION susrnsrrerenrsrrenunne 25 Pr sentation des langages utilis s 26 Java SE 5 26 Autoboxing 26 Annotations 27 G n riques 28 Les types num r s 28 Swing 28 JNDI 1 5 29 JDBC 3 0 29 XML et XSD 30 HTML et XHTML 30 La plate forme Java EE 5 31 JPA 1 0 32 JMS 1 1 32 EJB 3 0 33 EJB Stateless 33 EJB Stateful 34 Message driven bean 34 Entity bean 35 Le conteneur d EJB 35 Servlet 2 5 et JSP 2 1 36 Langage d expression 37 JSTL 1 2 37 JSF 1 2 38 Le conteneur de servlet 38 JavaMail 1 4 38 JAXB 2 0 38 Services web 39 Blueprints 39 Java Pet Store 39 Les design patt
238. erns 41 UML 2 41 Architecture de l application 42 L architecture en trois couches 42 Architecture applicative 42 Couche de pr sentation 43 Couche de navigation 43 Couche de traitement m tier 43 Couche de mapping objet relationnel 44 Couche de persistance 44 Couche d interop rabilit 44 Architecture technique 44 En r sum 45 3 OUTILS ET INSTALLATION 00secsssssesessseeeeeeeeeeeeeeeeeeneees 47 Outils utilis s pour le d veloppement de application 48 JDK 48 Ant 48 GlassFish 48 Derby 49 XIII Les Cahiers du Programmeur Java EE 5 Environnement de d veloppement 49 Outil de mod lisation UML 49 Installation des outils 50 JDK 1 5 50 Ant1 7 52 GlassFish V2 52 Configuration du serveur GlassFish 55 Cr ation d un domaine 55 Configuration de la base de donn es 56 Cr ation d un pool de connexions 57 Cr ation de la base de donn es 58 Cr ation d une source de donn es 58 Cr ation des ressources JMS 59 Cr ation de loggers 60 R capitulatif des l ments de configuration 62 Environnement de d veloppement 62 Les r pertoires 62 En r sum 63 4 OBJETS PERSISTANTS ceccccsseeeeseeeeeseeeesseeeessneeeneeeenseees 65 La persistance des donn es 66 La s rialisation 66 JDBC 66 Mapping objet relationnel 67 Java Persistence API 67 Entity bean 68 Exemple d entity bean 68 Annotations l mentaires du mapping 69 Table
239. es Un annuaire UDDI est constitu de pages blanches nom de l entreprise adresse contacts jaunes secteurs d affaires relatifs au web service et vertes informations techniques des services web propos s APPROFONDIR UDDI gt http Awww uddi org http uddi sap com gt http uddi ibm com ubr registry html gt http uddi microsoft com APARTE WS I WS I ou Web Services Interoperability est un consortium d industriels promouvant l interop ra bilit des services web au travers d une impl men tation nomm e WS I Basic Profile Il dite aussi des guides de bonnes pratiques des outils permet tant de tester la conformit de services avec ses recommandations ainsi que des forums de discus sion d di s aux d veloppeurs gt http www ws i org 4 W3C Le World Wide Web Consortium W3C est un con sortium promouvant la compatibilit des technolo gies web telles que HTML XHTML XML RDF CSS Soap WSDL UDDI etc 237 9 changes B2B Les Cahiers du Programmeur Java EE 5 APPROFONDIR WSDL gt http www w3 org TR wsdl gt http www w3schools com wsdl default asp De Sanjiva Weerawarana Francisco Curbera Frank Leymann Tony Storey et Donald F Ferguson Web Services Platform Architecture Prentice Hall 2005 4 XML et XSD Les services web sont intimement li s XML et XSD XML Schema Definition Si vous n tes pas familier avec ce formalis
240. es Techniques d marches et outils Dunod 2003 O Steve Graham Doug Davis Simeon Simeonov Glen Daniels Building Web Services with Java Making Sense of XML Soap WSDL and UDDI Sams 2004 Le chapitre 9 pr sente les services web ainsi que les technologies qui y sont rattach es Les services web sont utilis s par l application YAPS Pet Store pour communiquer avec les partenaires externes 4 Soap Simple Object Access Protocol est un proto cole standard destin aux services web Lanc par IBM et Microsoft il permet d utiliser des applica tions invoqu es a distance par Internet ARCHITECTURE Pet Store Les Blueprints de Sun se trouvent l adresse suivante gt http java sun com reference blueprints En ce qui concerne le Pet Store vous pouvez con sulter les adresses suivantes gt http blueprints dev java net petstore http java sun com developer releases petstore 39 2 Architecture de l application Les Cahiers du Programmeur Java EE 5 Figure 2 4 Page d accueil du Java Pet Store de Sun REMARQUE Les autres Pet Store Le Pet Store de Sun a t source d inspiration pour d autres technologies ou framework Ci dessous une liste non exhaustive de ces Pet Store e PetShop utilisation du framework NET de Microsoft e xPetStore utilisation des tags xDoclet e Flash PetStore version de Macromedia utili sant la technologie Flash e Spring PetSt
241. es qui reviennent fr quemment dans les cas d utilisation Les objets rendre persistants repr sentent souvent des choses comme un article ou un bon de commande Ils encapsulent leurs donn es on parle d attributs et leur comportement les m thodes Charge l analyste qui sommeille en nous de trouver les objets persis tants Ainsi il n y aura pas d objet catalogue la soci t YAPS na qu un seul catalogue mais plut t des cat gories Category des produits Product et des articles Item On retrouvera aussi des clients Customer et des adresses Address Lorsque les achats sont effectu s on obtient un bon de commande Order constitu de lignes de com mande OrderLine et payable par carte bancaire CreditCard RETOUR D EXPERIENCE Anglais ou francais L informatique et plus pr cis ment le langage Java est domin e par la langue anglaise tel point que certaines sp cifications nous imposent des termes anglo saxons par exemple les Java beans doivent avoir des accesseurs qui commencent par les mots get et set ou une m thode toString Ces r gles nous imposant l anglais il nous faut ensuite m langer le fran ais pour obtenir un franglais que je trouve plus diffi cile lire ex getNom setPrenom alors que getName o setAddress sont plus clairs et compris de tous La plupart des d veloppeurs sont mainte nant habitu s utiliser des termes anglais pour les classes m thodes et attributs Il est sa
242. es attributs de l entity bean et renvoie une exception en cas d incoh rence catalog fa Category G fa Item Ta Product ay customer G f Customer fay order L a CreditCard Figure 4 7 Paquetages et entity beans 99 4 Objets persistants Les Cahiers du Programmeur Java EE 5 100 T_ADDRESS Nullable false Nullable false Nullable true Nullable true Nullable false Nullable false Nullable false bigint varchar 100 varchar 255 STREET2 varchar 255 ZIP_CODE varchar 10 STREETI varchar 255 COUNTRY varchar 50 D bigint Nullable false LASTNAME varchar 30 Nullable false TELEPHONE varchar 255 Nullable true PASSWORD varchar 8 Nullable false EMAIL varchar 255 Nullable true LOGIN varchar 8 Nullable false DATE_OF_BIRTH date Nullable true FIRSTNAME varchar 30 Nullable false bigint Nullable false bigint Nullable false varchar 30 Nullable false ys DESCRIPTIONvarchar 255 Nullable false Sch ma de la base de donn es Tous les entity beans de l application YAPS Pet Store que nous venons de voir sont rendus persistants dans des tables Leurs attributs et leurs relations nous donnent le sch ma de base de donn es suivant ORDER_DATE date Nullable true CREDIT_CARD_TYPE varchar 255 Nullable true CREDIT_CARD_NUMBER varchar 30 Nullable true Nullable true Nullable false Nullable fals
243. es donn es du bon de commande Vous pourrez consulter les logs du serveur GlassFish pour en voir le descriptif Extrait du MDB OrderPrinterBean gt MessageDriven mappedName jms topic order public class OrderPrinterBean implements MessageListener gt private Logger logger Logger getLogger com yaps petstore mdb gt public void onMessage Message message try if message instanceof ObjectMessage ObjectMessage msg ObjectMessage message Order order Order msg getObjectQ gt printOrder order catch JMSException e throw new EJBException e gt private void printOrder Order order logger info Order order getId on the dateFormat format order getOrderDate 1ogger info order getCustomer O getFirstname order getCustomer getLastname bought for OrderLine line order getOrderLines logger info t line getItem getName line getQuantityQ line getSubTotal Q logger info Total order getTotal RETOUR D EXP RIENCE L impression en Java L impression en Java natif est un exercice complexe et fastidieux II suffit pour s en rendre compte de consulter les classes et interfaces des sous paquetages javax print Pour palier ce probl me une multitude d outils Open Source ou non vient aider le d veloppeur dans cette lourde t che Le probl me de ces outils est qu ils ont tous leur mani re de faire Il e
244. es ses donn es dans la table t_order Le bon de commande poss de un identifiant uni que et une date de cr ation Lien unidirectionnel avec le client Lien unidirectionnel avec l adresse de livraison Les donn es de la carte de cr dit sont englob es dans la m me table que le bon de commande Le lien unidirectionnel avec les lignes de com mandes est effectu l aide de la table de join ture t_order_order_Tine On red finit les colonnes de cl s trang res gr ce aux annota tions JoinColumn Lors de l insertion en base la date de cr ation du bon de commande est initialis e avec la date courante Cette m thode m tier calcule le montant total du bon de commande Pour cela elle it re la liste des lignes de commandes et cumule les sous totaux en appelant la m thode getSubTotal 97 4 Objets persistants Les Cahiers du Programmeur Java EE 5 Entity bean OrderLine rendant persistant ses donn es dans la table t_order_line Une ligne a un identifiant unique et la quantit d articles achet s par le client L article r f renc par la ligne de commande est charg de mani re automatique Avant d ins rer ou de mettre jour les donn es en base cette m thode est appel e Elle permet de valider les attributs de l entity bean et renvoie une exception en cas d incoh rence M thode m tier calculant le sous total d une ligne de commande c
245. es valeurs par d faut li es la table Elle n est pas obligatoire mais permet par exemple de sp cifier le nom de la table dans laquelle les donn es seront stock es Si cette annotation est omise le nom de la table sera le m me que celui de la classe ANNOTATIONS Les descripteurs XML Pour ceux qui sont habitu s utiliser des descrip teurs XML en lieu et place des annotations JPA vous laisse le choix Cependant cet ouvrage ne couvrira pas les descripteurs XML et se concen trera sur les annotations 69 4 Objets persistants Les Cahiers du Programmeur Java EE 5 Cette annotation s applique une classe Nom de la table identifie le catalogue et le sch ma de la base de donn es relationnelle Ce tableau permet de d finir les contraintes d unicit sur une ou plusieurs colonnes D finir une annotation Code de l annotation javax persistence Table package javax persistence Target TYPE Retention RUNTIME public interface Table String name Q default String catalogQ default String schema default UniqueConstraint uniqueConstraints default Ainsi si nous voulions changer le nom de la table en t_address nous devrions crire le code suivant Entity bean Address persistant ses donn es dans la table t_address Entity Table name t_address public class Address Id private Long id private String street1 ee Les annotatio
246. est dire le prix de l arti cle multipli par la quantit achet e 98 Ligne de commande Un bon de commande est constitu de une ou plusieurs lignes de com mande Chacune d elles nous informe de la quantit d articles achet s Ainsi une ligne de commande fait r f rence un article par un lien unidirectionnel Code de l entity bean OrderLine package com yaps petstore entity order Entity Table name t_order_line public class OrderLine implements Serializable Id GeneratedValue strategy GenerationType AUTO private Long id Column nullable false private Integer quantity OneToOne fetch FetchType EAGER JoinColumn name item_fk nullable false private Item item PrePersist PreUpdate private void validateData if quantity null quantity lt 0 throw new ValidationException Invalid quantity public Float getSubTotal return item getUnitCost quantity constructeurs accesseurs m thodes hashcode equals et toString Carte de cr dit Lentity bean CreditCard utilise l annotation Embeddable pour pou voir tre englob par le bon de commande Code de l entity bean CreditCard package com yaps petstore entity order Embeddable public class CreditCard implements Serializable Column name credit_card_number length 30 private String creditCardNumber Column name credit_card_type private String cred
247. est bonne mais le mois est inf rieur au mois en cours On renvoie le statut Le mois de la carte bancaire est expir La carte est valide 250 La validation des cartes de cr dit Pour v rifier que les coordonn es bancaires sont exactes YAPS a pass un partenariat avec la banque BarkBank Celle ci poss de un service web de validation de cartes bancaires Ce service prend en param tres le num ro de la carte son type et sa date d expiration au format MM AA mois ann e L algorithme de v rification s assure que la date d expiration est sup rieure la date du jour et que le num ro des cartes Visa est pair Validation validateCreditC ard cNumber String ccT ype String ccExpiryDate String String Code du service web Validation WebService public class Validation WebMethod operationName ValidateCard WebResult name cardStatus public String validateCreditCard WebParam name creditCardNumber String ccNumber WebParam name creditCardType String ccType WebParam name expiryDate String ccExpiryDate Calendar calendar Calendar getInstance int year getExpiryYear ccExpiryDate int month getExpiryMonth ccExpiryDate int lastNumber getLastNumber ccNumber if year lt calendar get Calendar YEAR return The year of the credit card is passed if year calendar get Calendar YEAR amp amp month lt calendar get Calendar MO
248. et d changes B2B Gr ce aux services web les applications peuvent tre vues comme un ensemble de services m tier structur s et dialoguant selon un standard plut t qu un ensemble d objets et de m thodes Exemple de service web La plate forme Java EE 5 cache tous les m canismes de bas niveau et rend l criture d un service web extr mement simple En effet il suffit d une seule annotation JAX WS pour transformer une classe Java en service web Exemple simple de service web WebService public class Validation public String validateCreditCard String ccNumber String ccType String ccExpiryDate Cs return OK Annotations JAX WS Les annotations JAX WS sont sp cifiques aux services web Elles per mettent d agir sur la structure du document WSDL en modifiant cer tains param tres du service ou des m thodes qui le composent Dans cette section nous allons d crire plus finement le comportement de ces annotations Le service Lannotation principale pour d finir un service web est javax jws WebService Elle utilise plusieurs attributs et peut par exemple sp cifier la localisation d un service web Code de l annotation javax jws WebService package javax jws Target TYPE Retention RUNTIME public interface WebService String name default String targetNamespace default String serviceName default String wsdlLocation default String portName default
249. eur etc NNTP est le sigle de Network News Transport Protocol Ce protocole est uti lis par les forums de discussion news Ces RFC Request for Comments se trouvent l adresse suivante gt http Awww ietf org rfc html LAPI JavaMail permet de s abstraire de tout syst me de mail et d uti liser la plupart des protocoles de communication de mani re transpa rente Ce n est pas un serveur d e mails mais un outil pour interagir avec APPROFONDIR JavaMail gt http java sun com products javamail http java sun com developer onlineTraining JavaMail contents html gt http Awww javaworld com jw 10 2001 jw 1026 javamail html 275 10 Traitements asynchrones Les Cahiers du Programmeur Java EE 5 JavaMail Un serveur SMTP Pour pouvoir envoyer un e mail il vous faut con na tre les param tres de connexion d un serveur de messagerie Ce livre utilise le serveur SMTP du fournisseur d acc s Free mais vous pouvez utiliser le serveur de votre choix il suffit de changer les param tres JAVAMAIL Le type MIME Le type MIME Multipurpose Internet Mail Extensions est un standard permettant d tendre les possibilit s du courrier lectronique comme la possibilit d ins rer des documents images sons texte etc dans un courrier JAVAMAIL Les destinataires Lorsqu on envoie un e mail l adresse du destina taire peut tre typ e RecipientType TO destinataire direct
250. eur identifiant JMSDeliveryMode Il existe deux modes d envoi persistant le message est d livr une et une seule fois au destinataire c est dire que m me en cas de panne du provider le message sera d livr et non persistant le message peut ne pas tre d livr en cas de panne puisqu il n est pas persist JMSDestination File d attente destinataire du message JMSExpiration Date d expiration du message JMSPriority Priorit du message Cet attribut num rique indique la priorit de fa on croissante partir de 0 les messages de niveau 9 ont plus de priorit que les messages de niveau 0 JMSRedelivered Bool en qui signifie que le message a t red livr au destinataire JMSReplyTo File d attente de r ponse du message JMSTimestamp L heure d envoi du message est affect e automatiquement par le provider Les propri t s Cette section du message est optionnelle et agit comme une extension des champs d en t te Les propri t s d un message JMS sont des couples nom valeur o la valeur est un type de base du langage Java entiers cha nes de caract res bool ens etc L interface javax jms Message d finit des accesseurs pour manipuler ces valeurs Ces donn es sont g n ralement positionn es par le client avant l envoi d un message et comme nous le verrons par la suite peuvent tre utilis es pour filtrer les messages Le corps du message Le
251. exemple il est d tach de sa persistance De retour sur le serveur il doit tre rattach l entity manager pour resynchroniser ses donn es avec la base Pour ce faire il suffit d utiliser la m thode EntityManager merge qui prend en param tre l entity bean rattacher Exemple simple de rattachement d un objet em merge customer Mettre jour un entity bean La mise jour d un entity bean est la fois tr s simple mettre en uvre mais parfois difficile comprendre car elle n implique pas directement entity manager Rien ne vaut un exemple Le code ci apr s recherche un entity bean et met jour ses attributs en utilisant les m thodes set Exemple de mise jour d un objet apr s recherche Customer customer em find Customer class 1234 1 customer setFirstname Antonio 2 customer setLastname Goncalves La mise jour est faite Tout simplement Il n y a pas de mot cl parti culier pour mettre jour les donn es d un entity bean apr s avoir effectu le find le bean est toujours manag par l entity manager En appelant les m thodes set qui mettent jour les attributs du bean entity manager sait qu il doit synchroniser ces changements avec la base de donn es car le contexte de persistance est toujours actif Pour illustrer ce comportement imaginez qu apr s le find on r initialise le contexte de persistance EntityManager clear Lentity bean n tant plus
252. garder les traces des v nements survenus dans une application Des fichiers de log au format pr d fini conservent des messages informant sur la date et l heure de l v nement sa nature sa gravit une description et d autres informations utilisateur classe etc L API java util logging fournie par d faut depuis le JDK 1 4 permet de journaliser des v nements dans un fichier texte ou XML et utilise diff rents niveaux de s v rit Dans l architecture du YAPS Pet Store toutes les actions passent par la couche de stateless beans la fa ade C est donc l endroit id al pour rajouter des traces dans le code En utilisant l API de logging on peut ainsi d limiter l entr e entering et la sortie exiting d une m thode ou bien rajouter des traces au milieu du code Ci apr s un exemple de traces dans l EJB OrderBean public class OrderBean implements OrderRemote OrderLocal private Logger logger Logger getLogger com yaps petstore stateless private final String cname this getClassO getName Gas public List lt Order gt findOrders final String mname findOrders logger entering cname mname 2 Query query List lt Order gt orders logger finest Recherche les bons de commande query em createQuery SELECT o FROM Order o orders query getResultListO Togger exiting cname mname orders sizeQ O return orders Un logger portant le nom de com yaps petstore statele
253. ge AWT Abstract Windowing Toolkit B2A Business to Administration B2B Business to Business B2C Business to Consumer BLOB Binary Large OBject BMP Bean Managed Persistent C2C Consumer to Consumer CGI Common Gateway Interface CMP Container Managed Persistent CMR Container Managed Relation CMT Container Managed Transaction CRUD Create Read Update Delete DAO Data Access Object DDL Data Definition Language Les Cahiers du Programmeur Java EE 5 Tableau C 1 Sigles et acronymes suite Sigle Acronyme Signification DOM Document Object Model DTD Document Type Definition DTO Data Transfert Object EAR Enterprise ARchive EJB Enterprise Java Bean EJBQL Enterprise Java Bean Query Language EL Expression Langage GoF Gang of Four HTML HyperText Markup Language HTTP HyperText Transfer Protocol HTTPS HyperText Transfer Protocol Secure sockets i18n Internationalization IDE Integrated Development Environment loC Inversion of Control IP Internet Protocol JAAS Java Authentication and Authorization Service JACC Java Authorization Contract for Containers JAF JavaBeans Activation Framework JAR Java ARchive JAX RPC Java API for XML based RPC JAX WS Java API for XML based Web Services JAXB Java Architecture for XML Binding JCA Java Connector Architecture JDBC Java DataBase Connectivity JDK Java Development Kit JDO J
254. ge de l imposer comme r gle de d veloppement dans une quipe pour viter le franglais ou le m lange des deux langues dans le code source Ce livre utilisera donc uniquement des termes anglais pour les classes attributs et m thodes Par contre les commentaires seront en fran ais Le catalogue La soci t YAPS poss de un catalogue d animaux domestiques Ce cata logue est structur en cat gories en produits puis en articles Ce sont ces articles que les clients peuvent acheter Ci apr s le diagramme de classes repr sentant ce d coupage catalog com yaps petstore entit y lt lt entity gt gt lt lt entity gt gt lt lt entity gt gt Category Product Item id Long id Long id Long name String j name String f name String description String description String unitCost Float imagePath String On doit lire le diagramme de la mani re suivante Une cat gorie Category peut avoir z ro ou plusieurs produits Product et un produit peut avoir z ro ou plusieurs articles Item On notera l utilisation de liens de composition bidirectionnels entre ces classes La composition le losange noir l extr mit de la classe nous indique qu il y a une relation Figure 4 4 Diagramme de classes du catalogue UML Diagramme de classes Un diagramme de classes est une collection d l ments de mod lisation statiques classes inter faces paquetages etc qui mont
255. get n lt exec e lt arg lt arg lt arg lt arg lt arg lt exec gt lt target gt lt target n lt exec e lt arg lt arg lt arg lt arg lt exec gt lt target gt lt target n lt java c lt clas lt java gt lt target gt lt target n lt exec e lt arg lt arg lt arg lt arg lt arg lt arg lt arg lt arg lt arg lt arg lt exec gt lt target gt ame delete domain gt essage Deleting application name domain for glassfish home gt xecutable asadmin failonerror true dir glassfish home gt line delete domain gt line echo echo gt line _ application name gt ame start db gt xecutable asadmin failonerror true dir glassfish home gt value start database gt line echo fecho gt value dbhost db host gt value dbport db port gt value dbhome db home gt ame stop db gt xecutable asadmin failonerror true dir glassfish home gt value stop database gt line echo fecho gt value dbhost db host gt value dbport db port gt ame veri fy db gt lassname org apache derby tools sysinfo fork yes dir gt spath refid classpath gt ame create connection pool gt xecutable asadmin gt line create jdbc connection pool gt line echo echo gt line user server user name gt line passwordf
256. gn es de notes de remarques et de r f rences pour vous per mettre d approfondir vos connaissances Le d veloppement de cette appli cation est fait de mani re incr mentale afin d appr hender au fur et a mesure chacune des sp cifications qui s adresse cet ouvrage Le but de ce livre mest pas de d tailler la syntaxe du langage Java ou encore l ensemble des m thodes des classes constituant l API EJB Si tel tait le cas vous ne pourriez l emporter avec vous moins de poss der une brouette en raison de son volume et donc de son poids Cet ouvrage s adresse avant tout des lecteurs ayant un niveau avanc en Java UML et quelques connaissances en d veloppement web Il est galement d di aux architectes souhaitant comprendre comment imbriquer les diff rentes API de Java EE 5 pour r aliser une application Internet intranet Les d butants et les tudiants y trouveront aussi leur compte en utilisant les multiples r f rences que contient ce livre Ces derni res leur permet tront d approfondir un sujet en particulier si besoin Structure du livre Le chapitre 1 pr sente tude de cas d une application de commerce lectronique inspir e du Blueprint Java Pet Store de Sun La soci t fictive YAPS veut informatiser son activit de vente d animaux domesti SOE ques Pour ce faire elle a besoin d un site pour les internautes d un client riche pour ses employ s et de dialoguer
257. gt lt title gt Page HTML affichant Hello World lt title gt lt head gt lt body gt lt center gt Hello World lt center gt lt body gt lt html gt La plate forme Java EE 5 Java EE ou JEE ou encore Java Enterprise Edition est un ensemble de sp cifications destin es aux applications d entreprise JEE peut tre vu comme une extension du langage Java afin de faciliter la cr ation d applications r parties robustes performantes et haute disponibilit Comme beaucoup je pense que Java EE est aujourd hui la meilleure plate forme de d veloppement pour les entreprises Elle combine les avantages du langage Java avec l exp rience acquise dans le d veloppe ment au cours des dix derni res ann es Elle b n ficie en outre du dyna misme des communaut s Open Source ainsi que du JCP de Sun RAPPEL Java EE 5 dans cet ouvrage La nouvelle plate forme Java EE 5 comporte plus de vingt sp cifications voir annexe A Il est impossible en un seul ouvrage de couvrir toute les particularit s de ces sp cifications Le d veloppe ment de notre tude de cas nous permettra d uti liser les plus importantes et surtout de voir comment elles s utilisent ou interagissent les unes par rapport aux autres Pour approfondir vos con naissances n h sitez pas consulter les nom breuses r f rences contenues dans ce livre Contene
258. gt Invalid login password 170 Une page comporte tr s souvent des boutons des liens des images ou des images qui se comportent comme des liens Dans ce der nier exemple on s aper oit qu il est possible d imbriquer des balises entre elles command Link contient une balise graphi cImage Balise JSF Rendu graphique lt h commandButton value Sign In action account doSignIn type submit gt lt h commandLink action 4 account doSignin gt O lt h outputText value Sign In gt lt h commandLink gt lt h graphicImage url images bird1 jpg gt lt h commandLink action catalog doShowItem gt lt h graphicImage url images bird1 jpg gt O lt h commandLink gt Il existe bien d autres composants graphiques disponibles dans JSF comme les checkbox les radioboutton les listbox etc Cet ouvrage ne se focalise que sur ceux qui seront utilis s dans l application tels que la combobox ou le tableau Arr tons nous un instant sur la balise dataTable Elle permet d it rer une liste dans l exemple une liste de produits de la formater sous forme de tableau en utilisant la balise column et de manipuler un index pour en obtenir des informations ici la variable product d signe un pro duit unitaire Pour afficher les attributs name et description du produit il suffit d utiliser la balise outputText lt f selectItem itemLabel
259. gt lt h form gt It re la liste des produits gt lt h dataTable value catalog products var product gt lt h column gt 192 lt h commandLink action catalog doFindItems gt 4 Affiche le nom du produit sous forme de lien lt h outputText value product name gt Lorsqu on clique sur ce lien la m thode lt f param name productId value product id gt doFindItems du managed bean est appel e lt h commandLink gt en lui passant l identifiant du produit comme param tre m thode getParamId lt br gt lt h outputText value product description gt lt h column gt lt h dataTable gt h form gis titties Eo ae gt REMARQUE Simplification du code Pour en simplifier la lecture la totalit du code des La page d affichage des articles pages n est pas d taill e Retrouvez le code source 7 complet de l application l adresse Un fois la liste des produits affich e on peut cliquer sur un produit pour gt http www antoniogoncalves org en conna tre les articles YAPS PetStore Items Mozilla Firefox Fichier Edition Affichage Historique Marque pages Outils 2 q 00 antonio goncalves YAPS Pet Store Yet Another Pet Store Pets Items for product Amazon Parrot Birds Female Adult 120 0 Cats Male Adult 120 0 Dogs Fish Reptiles Figure 7 11 The YAPS Pet Store Demo is a La page showitems jsp fict
260. gt lt navigation case gt lt from outcome gt item added lt from outcome gt lt to view id gt showcart jsp lt to view id gt lt navigation case gt lt navigation rule gt lt navigation rule gt lt from view id gt showitem jsp lt from view id gt lt navigation case gt lt from outcome gt item added lt from outcome gt lt to view id gt showcart jsp lt to vi ew id gt lt navigation case gt lt navigation rule gt lt navigation rule gt lt from view id gt showcart jsp lt from vi ew id gt lt navigation case gt lt from outcome gt cart checked out lt from outcome gt lt to view id gt confirmorder jsp lt to vi ew id gt lt navigation case gt lt navigation rule gt lt navigation rule gt lt from view id gt confirmorder jsp lt from vi ew id gt lt navigation case gt lt from outcome gt order confirmed lt from outcome gt lt to view id gt orderconfirmed jsp lt to view id gt lt navigation case gt lt navigation rule gt showitem jsp YAPS Pet Storo f WD APS Pet Store YAPS Pet Store CENT showcart jsp confirmorder jsp Figure 8 6 Navigation entre pages concernant le panier lectronique 4 Lorsqu il consulte le contenu de son Caddie et qu il veut le valider le client clique sur Check Out Il est alors redirig vers la page confirmorder qui lui demande de saisir son adresse de livraison et son mode de paiement 4 Apr s
261. h dataTable gt Total lt h outputText value cart total gt 4 lt h commandLink action cart checkout gt 4 lt h outputText value Check Out gt lt h commandLink gt lt h form gt lt c otherwise gt lt c choose gt lt f view gt La page de saisie des donn es de livraison et de paiement Lorsque le client valide le contenu du Caddie il est redirig vers la page confimorder jsp Celle ci est un formulaire compos de trois parties e le nom pr nom et adresse e mail du client sont affich s titre infor matif en lecture seule une zone permettant de saisir l adresse de livraison Par d faut le sys t me affiche l adresse de domiciliation du client une zone pour le mode de paiement c est dire num ro de carte bancaire type et date d expiration Extrait de la page confirmorder jsp lt taglib uri http java sun com jsf core prefix f gt lt taglib uri http java sun com jsf html prefix h lt f view gt lt h form gt Affiche le nom du produit Affiche un lien vers l article Notez que l identi fiant est pass en param tre au managed bean voir l appel la m thode getParamId pour obtenir la valeur de ce param tre Affiche la ligne 4 120 480 par exem ple Lien pour supprimer l article du Caddie Affiche le prix total du panier Lien permettant de valider le panier 227 8 Gestion du panier
262. hPassword password donc diff rent de nu11 on appelle la m thode m tier matchPassword de l entity bean return customer 4 On retourne l entity bean s il a t trouv Sinon cette m thode renvoie la valeur nu 11 public Customer createCustomer Customer customer 4 On cr e un client partir des entity beans Address homeAddress Customer et Address if customer null 4 On s assure que l entity bean Customer existe throw new ValidationException Customer object is null En revanche un client peut ne pas fournir d adresse customer setHomeAddress homeAddress 4 On relie les entity beans entre eux em persist customer 4 L entity manager persiste le client dans la base de donn es return customer public Customer findCustomer Long customerld 4 partir de son identifiant cette m thode retourne un entity bean Customer if CcustomerId null throw new ValidationException Invalid id Customer customer customer em find Customer class customerld return customer public void deleteCustomer Customer customer 4 Cette m thode supprime le client pass en para m tre if customer null throw new ValidationException Customer object is null em remove em merge customer 4 L entity bean doit tre rattach merge avant de pouvoir tre supprim public Customer updateCustomer Customer customer 4 Cette m thode met jour les donn es du client
263. he sous forme de page web Pour reprendre l exemple de l affichage des produits imaginez que l appel PEJB se fasse dans une servlet et que celle ci transmette la liste des produits une JSP Voici ce quoi ressemblerait cette JSP Exemple de JSP recevant des donn es d une servlet lt page import com yaps petstore entity catalog Product gt lt page import java util List gt lt TABLE gt lt jsp useBean id products class List lt Product gt scope request gt lt for Product product products 2 gt lt TR gt lt TD gt lt A href gt lt product getName gt lt A gt lt BR gt lt product getDescriptionO gt lt TD gt lt TR gt lt 0 lt TABLE gt La servlet invoque un EJB re oit la liste des produits et passe cette liste la JSP qui peut alors y acc der gr ce la directive jsp useBean On continue utiliser du code Java dans les scriptlets pour parcourir la liste des produits On affiche alors le nom du produit et sa description dans un tableau HTML Comme on peut le constater en comparant les trois extraits de code pr c dent le design pattern MVC apporte une nette am lioration dans la lisibilit et la maintenance du code tout en s parant les responsabilit s La JSP nest plus encombr e de code JNDI pour appeler PEJB par exemple Il reste tout de m me encore un peu de code Java dans la page la boucle for dans notre exemp
264. hrows RemoteException Date today throws RemoteException Contrairement aux EJB 3 la classe d impl mentation des EJB 2 nimpl mente pas l interface m tier Notez aussi que les deux m thodes m tiers sayHel1o et today ne lancent pas de RemoteException alors qu elles sont d clar es comme telles dans l interface m tier Les m thodes permettant de g rer le cycle de vie du composant doivent tre impl ment es m me si elles ne sont pas utilis es Classe d impl mentation du stateless bean public class HelloBean implements SessionBean public HelloBean public String sayHelloQ return Hello Petstore public Date today return new DateQ O public void ejbCreate throws CreateException O public void setSessionContext SessionContext sessionContext throws EJBException public void ejbRemove throws EJBException public void ejbActivate throws EJBException public void ejbPassivate throws EJBException Tout comme Java EE on peut d marquer les transactions dans les EJB stateless en tenant compte d une politique transactionnelle qui peut tre g r e soit manuellement soit par le conteneur Les annotations existant pas TransactionAttribute en EJB 3 la politique transac tionnelle est sp cifi e dans le descripteur de d ploiement XML fichier ejb jar xml Ce fichier informe aussi le conteneur du nom des interfaces de la classe m tier et aussi du t
265. icence Pour ma part j utilise Intellij Idea de JetBrains Je remercie la soci t JetBrains de n avoir offert une licence pour la version 6 de leur excellent produit Outil de mod lisation UML Si vous voulez dessiner des diagrammes UML il existe plusieurs outils disponibles en Open Source ArgoUML StarUML Pos idon etc ou sous forme de plug in pour Eclipse NetBeans ou Idea SERVEUR D APPLICATIONS Compatibilit Java EE 5 l heure o cet ouvrage est r dig GlassFish est le seul serveur d applications Open Source sup porter la totalit des sp cifications Java EE 5 Dans un avenir proche il existera d autres impl mentations comme JBoss Le code que nous allons d velopper est portable 99 sur tout serveur d applications Retrouvez toutes les informations n cessaires pour migrer vers tel ou tel autre ser veur d applications l URL suivante http Awww antoniogoncalves org TELECHARGER GlassFish gt https glassfish dev java net TELECHARGER Derby gt http db apache org derby Ours Eclipse NetBeans Intellij Idea Initialement lanc par IBM Eclipse est un IDE Open Source extensible et polyvalent Utilis par beaucoup de d veloppeurs Java vous pourrez le t l charger l adresse suivante gt http Awww eclipse org NetBeans est le pendant chez Sun gt http Awww netbeans org Intellij Idea est payant mais vous pouvez utiliser une licence d valu
266. iche en temps r el uniquement les informations des bons de com mande contenant des reptiles et ceci gr ce au message selector de JMS Un nouveau sous menu Watch orders affiche un composant JTable qui se rafra chit automatiquement l arriv e d un message Pour ne pas bloquer l affichage cette fen tre s ex cute dans un thread part q 8 P Comme nous l avons d j expliqu pour des raisons p dagogiques l application graphique n utilise pas le conteneur client ACC Pour r cup rer la r f rence vers la fabrique de connexion JMS et le Topic elle doit donc utiliser JNDI pour les localiser Pour masquer ces appels PAPI JNDI nous pouvons enrichir le Service Locator que nous avons vu au chapitre 6 Ex cution de l application 283 10 Traitements asynchrones Les Cahiers du Programmeur Java EE 5 Design pattern ServiceLocator Syst me de cache du service locator Retourne une fabrique de connexions JMS Retourne une destination JMS M thode priv e permettant de retrouver un objet dans le cache ou dans JNDI On d clare la fabrique de connexions et le Topic Utilisation du service locator pour obtenir la fabrique de connexions JMS et le Topic On se connecte au provider de messages On cr e une session 284 gt Extrait du ServiceLocator avec les nouvelles m thodes public class ServiceLocator private Context initalContext private Map l
267. id est l identifiant de cet entity bean Sa valeur est g n r e automatiquement par la base de donn es l attribut street1 ne peut tre nu11 L attribut city ne peut tre nul et sa lon gueur maximale est de 100 caract res 72 Colonne L annotation javax persistence Column d finit les propri t s d une colonne On peut ainsi changer son nom qui par d faut porte le m me nom que l attribut pr ciser son type sa taille et si la colonne autorise ou non la valeur nu11 Code de l annotation javax persistence Column package javax persistence Target METHOD FIELD Retention RUNTIME public interface Column String name default boolean unique default false boolean nullable default true boolean insertable default true boolean updatable default true String columnDefinition default String table default int lengthO default 255 int precision default 0 int scale default 0 Ainsi pour red finir les valeurs par d faut de l entity bean Address on peut utiliser l annotation Column de diff rentes mani res Entity bean Address avec red finition des colonnes Entity Table name t_address public class Address Id GeneratedValue strategy GenerationType AUTO private Long id Column nullable false private String streetl private String street2 Column nullable false length 100 private String city private S
268. ie de la donn e est mise dispo sition de la m thode et non l originale 106 Cet exemple de code repr sente le composant CustomerBean qui g re la cr ation d un nouveau client Tout d abord notez la pr sence de l inter face CustomerRemote Celle ci est annot e par javax ejb Remote qui signifie que toutes les m thodes qu elle d clare dans notre exemple createCustomer peuvent tre appel es de mani re distante La classe CustomerBean impl mente cette interface et est donc contrainte d ajouter du code m tier la m thode createCustomer Il est int ressant de constater l utilisation de l annotation javax ejb Stateless Sans cette annotation la classe CustomerBean serait consid r e comme toute autre classe Java Gr ce elle le conteneur d EJB sait qu il manipule un stateless bean Attardons nous maintenant sur l impl mentation de la m thode createCustomer Son r le est de cr er un nouveau client dans la base de donn es Pour cela cette m thode prend en param tres les deux entity beans Customer et Address et utilise un EntityManager O pour les per sister le r le de l EntityManager sera d taill dans les prochains para graphes Une fois lop ration effectu e avec succ s lentity bean Customer est retourn en r sultat de la m thode Comment d velopper un stateless bean Dans le chapitre pr c dent intitul Objets persistants nous avons cons tat que le d veloppemen
269. ient clique sur le lien Check out Cette action l am ne sur une page lui demandant de saisir l adresse de livraison et les coordonn es de sa carte bancaire figure 1 18 Le client valide la page en cliquant sur Submit Il est alors redirig vers une page qui lui confirme la cr ation de sa commande et lui en donne le num ro ainsi que son r capitulatif figure 1 19 Fichier Edition Affichage Aller Marque pages Outils YAPS Pet Store account Cart Sian off Yet Another Pet Store Birds Cats Dogs Fish Reptiles YAPS PetStore Items YAPS Pet Store Yet Another Pet Store Birds Cats Dogs Fish Reptiles The YAPS Pet Store Demo is 2 Personal information Firstname James 1 Lastname Rorisson Email jrmymail com Delivery Address Streeti Ritherdan Road Suwel2 riy New York State Zipcode 4568 Country USA Credit Gard Credit card number 1234 56 8 9101 Type Visa Y Expiry date YY MM 100 00 Mozilla Firefox ER Account Cart Siam off Your Order is Complete 103 Bulldog Spotless Female Puppy Goldfish Male Puppy Iquana CE Female Adult 150 0 _____ x1500 3000 220 5 x220 110 U 120 1 212 0 120 Total 422 0 You will receive shortly an email confirming your order Thank you for shopping with the YAPS Pet Store AN 1 fictional sample application GA Wx CSI POWERED Figure
270. ient qui sollicite ses services et ce tout au long du dialogue entre les deux protagonistes G n ralement les m thodes propos es par un stateful bean permettent de consulter et de mettre jour cet tat Dans notre cas le client veut pouvoir acheter plusieurs animaux domesti ques Il parcourt le catalogue ach te un caniche puis quelques minutes plus tard d cide de le remplacer par un dalmatien et ach te en plus un poisson rouge Tout cela peut prendre plusieurs minutes et tout moment le client peut vouloir consulter le contenu de son panier lectronique Ce contenu l tat de l EJB doit donc tre accessible tout au long de cette conversation Les statefuls maintiennent un tat conversationnel mais ils ne sont pas persistants contrairement aux entity beans c est dire que l tat ne survivrait pas un arr t du serveur par exemple On peut voir un stateful bean comme une extension de l application cliente Les donn es conserv es par le bean sont stock es dans des varia bles d instances et conserv es en m moire tout comme une application riche Dans notre cas la gestion du panier est propre un client Si au lieu d utiliser un client l ger nous utilisions une application Swing la gestion du panier se ferait sur le poste client Exemple de stateful bean Pour d velopper un stateful bean les seuls objets n cessaires se r sument une classe contenant le code m tier et au minimum une inte
271. il Message est une classe abstraite qui encapsule le contenu du courrier lectronique Un message est compos d un en t te qui contient l adresse de l auteur et du destinataire le sujet etc et d un corps qui contient les donn es envoyer JavaMail fournit en standard une classe fille nomm e javax mail internet MimeMessage pour les messages poss dant un type MIME La classe Message poss de de nombreuses m thodes pour initialiser les donn es du message Nous utiliserons les principales qui permettent de positionner l adresse de l metteur du destinataire le sujet et le corps du message ainsi que la date d envoi Cr ation d un message Message msg new MimeMessage session msg setFrom new InternetAddress adresse emetteur com msg setRecipients Message RecipientType TO new InternetAddress adresse destinataire com msg setSubject Confirmation de commande msg setText La commande n 1002 a t cr msg setSentDate new DateO La classe InternetAddress La classe javax mail internet InternetAddress est n cessaire pour chaque metteur et destinataire d e mail Elle h rite de la classe javax mail Address et repr sente une adresse e mail au format contact serveurmail com Pour cr er une adresse e mail il suffit de passer une cha ne de caract res au constructeur Utilisation des adresses Message msg new MimeMessage session msg setFrom new InternetAddress ad
272. ile server passwordfile gt line host server host gt line port server admin port gt line datasourceclassname db datasource gt line _ restype javax sql XADataSource gt line property portNumber db port serverName server host User db user Password db password databaseName db sid connectionAttributes create true gt line _ jdbc pool name gt 4 4 4 Supprime le domaine GlassFish D marre la base de donn es Derby Arr te la base de donn es Derby V rifie la base de donn es Derby Cr e le pool de connexions 305 B T ches Ant Les Cahiers du Programmeur Java EE 5 Cr e la source de donn es gt lt target name create datasource gt lt exec executable asadmin gt lt arg line create jdbc resource gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line connectionpoolid jdbc pool name gt lt arg line enabled true gt lt arg line jdbc datasource name gt lt exec gt lt target gt Ping le pool de connexions gt lt target name ping connection pool gt lt exec executable asadmin gt lt arg line ping connection pool gt lt arg line echo echo gt
273. iliser ces annotations pour lib rer des ressources par exemple une connexion une base ou une file d attente avant que la passivation mait lieu et les r initialiser lors de l activation de EJB Stateful bean utilisant des annotations de callback Stateful name ShoppingCartSB public class ShoppingCartBean implements ShoppingCartLocal private List lt Cartltem gt cartItems GRA PostConstruct public void initialize O cartItems new ArrayList lt CartItem gt PreDestroy public void clear cartItems null La gestion du Caddie de YAPS Pet Store La gestion du panier est d taill e dans le cas d utilisation Acheter des articles du premier chapitre Un client visualise le catalogue et lorsqu il est int ress par un article il l ajoute dans son panier lectronique Le Caddie est utilis uniquement par l application web il n existe pas d quivalent dans l application Swing Le stateful bean Le panier est repr sent par un stateful session bean Il poss de un attribut de type List qui stocke les articles s lectionn s par le client ainsi que leur quantit Le composant ShoppingCart poss de plusieurs m thodes permettant d agir sur le contenu de cette liste e addItem rajoute un article dans le Caddie e removeItem supprime un article du Caddie getTotal retourne le montant total du Caddie empty vide le Caddie e getCartItems retourne le conten
274. illeures performances Cette anecdote contribua augmenter la popularit de ce Blueprint qui rentra tr s vite dans le langage commun Tout le monde commen a l utiliser pour illustrer une nouvelle technologie une nouvelle id e ou impl mentation L tude de cas de cet ouvrage s inspire de ce site de commerce lectro nique Les design patterns Dans son livre 4 Pattern Language dit en 1977 l architecte en b timent Christopher Alexander introduit le terme de pattern patron chaque patron d crit un probl me qui se produit de mani re r currente dans notre environnement Si ce livre est d di une autre profession que celle de l architecture informatique il faudra attendre le livre du Gang of Four GoF en 1994 pour adapter ces id es au monde de l orient objet Il ne faut pas confondre ces patrons avec des briques logicielles un pattern d pend de son environnement des r gles un pattern ne s applique pas m caniquement ou des m thodes ne guide pas la prise de d cision Mais plut t les voir comme une solution de conception un probl me r current Viendront alors bien plus tard deux livres s inspirant du GoF mais d di la plate forme J2EE EJB Design Pattern et Core J2EE Patterns Ces trois ouvrages ont cr un vocabulaire commun entre les d ve loppeurs concepteurs et architectes Ce livre utilisera plusieurs design patterns pour concevoir l application P gn p P PP YAPS Pet St
275. imple transparente et standard pour r aliser la persistance Le format utilis tant ind pendant du syst me d exploitation un objet s rialis sur un syst me peut tre r utilis par un autre syst me Les objets peuvent tre s rialis s sur le disque dur ou sur le r seau Internet compris Pour rendre un objet s rialisable il doit impl menter l interface java io Serializable et poss der des attributs s rialisables Java saura alors comment rendre persistant l objet Ce m canisme bien que tr s simple et directement utilisable par le lan gage Java est rarement employ pour des applications d une certaine envergure Il n offre ni langage de requ te ni d infrastructure profession nelle permettant la r sistance aux fortes charges JDBC JDBC Java Data Base Connectivity est la couche logicielle standard offerte aux d veloppeurs pour acc der des bases de donn es relation nelles Elle se charge de trois tapes indispensables l acc s des donn es e la cr ation d une connexion la base l envoi d instructions SQL e l exploitation des r sultats provenant de la base Cette API fait partie int grante de la plate forme Java depuis la version 1 1 du JDK Elle est repr sent e par le paquetage java sql Bien qu encore largement utilis e elle a tendance dispara tre au profit d outils de mapping objet relationnel En effet d velopper une couche d acc s aux donn es avec JDBC
276. invalides statut diff rent de OK alors on lance une exception avec un message qui sera affich l cran 253 9 changes B2B Appel du service web Delivery partir du stateless session bean Stateless public class OrderBean implements OrderRemote OrderLocal R f rence au service web gt WebServiceRef private DeliveryService deliveryService Les Cahiers du Programmeur Java EE 5 Pour cr er un bon de commande il est n ces gt public Order createOrder Customer customer saire de disposer du contenu du panier lectroni Address deliveryAddress CreditCard creditCard que cartItems mais aussi de l adresse de List lt CartItem gt cartItems livraison de la carte bancaire et des r f rences du client Cr ation d un objet bon de commande gt Order order new Order customer em merge deliveryAddress creditCard A partir du panier lectronique on cr e des gt List lt OrderLine gt orderLines new ArrayList lt OrderLine gt lignes de commande for CartItem cartItem cartItems orderLines add new OrderLine cartItem getQuantityO cartItem getItem order setOrderLines orderLines L objet bon de commande est rendu persistant gt em persist order Appel d une m thode priv e pour invoquer le gt notifyTransporter order service web return order M thode priv e appelant le service web gt private void notifyTransporter Order or
277. ion La partie web de l application YAPS Pet Store sera contenue dans le fichier petstore war la racine de ce fichier on trouve nos pages JSP la feuille de style petstore css et les images des animaux sous r per toire images Les classes compil es des managed bean JSF doivent obli gatoirement se trouver dans le sous r pertoire WEB INF classes Ce r pertoire est automatiquement ajout par le conteneur au CLASSPATH lors du d ploiement de l application Pour que le conteneur web puisse interpr ter le fichier petstore war et d ployer le contr leur JSF FacesServiet il lui faut un descripteur C est le r le du fichier web xm1 qui doit obligatoirement tre pr sent dans le r pertoire WEB INF On trouvera galement cet endroit le fichier de configuration faces config xm1 La t che yaps build packagera l application enti re dans le fichier petstore ear Celui ci comporte e l application web contenue dans le fichier petstore war avec ses fichiers de description web xm1 et faces config xm1 le fichier des EJB Stateless stateless jar e les entity beans entity jar et les classes utilitaires utility jar accessibles depuis le sous r pertoire 1ib D ployer l application et acc der au site Pour d ployer l application GlassFish doit tre lanc ant f admin xm1 start domain ainsi que la base de donn es Derby ant f admin xml start db Utilisez ensuite la t che yaps deploy qui d ploier
278. ion JMS est ouverte apr s l instan ciation de l EJB par le conteneur L annotation PostConstruct intercepte cet v nement et ouvre la connexion JMS la destruction de l EJB le conteneur appelle cette m thode qui referme la connexion JMS 126 Stateless bean utilisant des annotations de callback Stateless mappedName ejb stateless Order public class OrderBean implements OrderRemote OrderLocal private ConnectionFactory connectionFactory private Connection connection Gres PostConstruct public void openConnection connection connectionFactory createConnection PreDestroy public void closeConnection if connection null connection close Les stateless beans de YAPS Pet Store Maintenant que nous avons vu le fonctionnement des EJB sans tat voyons comment les utiliser dans notre application YAPS Pet Store Contrairement aux entity beans qui repr sentent les objets m tier iden tifiables par les mots des cas d utilisation les stateless beans repr sen tent les actions Ils se rapportent aux verbes des cas d utilisation Par exemple cr er un client mettre jour un client rechercher un article supprimer un bon de commande etc Un EJB ne repr sente pas une seule de ces actions mais plusieurs regroup es au sein d une m me classe L attribution de ces actions aux bonnes classes est l un des probl mes de la conception orient e objet Pour chaque
279. ion lt gt sert afficher du texte ou un r sultat Ce code est quivalent un appel out printQ Valeur de variable lt i gt e L action permet de fournir des instructions l interpr teur JSP lt jsp useBean id address class com yaps petstore entity Address gt Vous l aurez compris ce genre de page m lant code Java et balises HTML est a peine plus lisible que la servlet que nous avons vue pr c demment La page peut vite devenir compliqu e lire maintenir et rapidement compter plusieurs centaines de lignes de code Pour r soudre ce probl me il est n cessaire de s parer les responsabilit s entre composants les servlets ex cutent les traitements appellent les EJB g rent les exceptions et renvoient le r sultat la JSP qui l affiche Cette fa on de d corr ler traitement servlet et pr sentation JSP est inspir e du design pattern MVC Model View Controller Le design pattern MVC Le design pattern Mod le Vue Contr leur permet d organiser une application en trois composants principaux e Un mod le qui correspond aux donn es de l application dans notre cas les entity beans e Une vue qui correspond la pr sentation visuelle de l application la JSP e Un contr leur qui d finit l tat de la vue en fonction des donn es g r es par le mod le la servlet APPROFONDIR MVC gt http c2 com cgi wiki ModelViewController 163 7 Interface web
280. ion soci t informatique h pital et sur les moyens techniques permettant de les invoquer Chaque entreprise peut avoir son propre annuaire UDDI pour publier ses services mais elle peut aussi uti liser des annuaires publics comme ceux de Microsoft IMB ou SAP UDDI n est pas fondamentale aux services web comme l est XML Soap ou WSDL Nous n aborderons donc pas la publication de services dans cet ouvrage WSDL WSDL Web Service Description Language est le format XML sp cifi par le W3C permettant de d finir un service web qui utilise le protocole Soap On expose ainsi au format XML la signature d un service web accessible sur Internet Cette signature inclut les op rations expos es le type de ses param tres d entr es sorties et l adresse r seau laquelle on pourra linvoquer UDDI permet de retrouver un service web et WSDL de d crire ses m thodes En fait WSDL est scind en deux parties qu on appelle abstraite et con cr te La signature du service ses m thodes et ses param tres sont d crits de mani re abstraite Cette partie est ensuite li e 4 un protocole de communication et 4 un format de messages concrets Ainsi la partie abstraite est totalement d coupl e de la mani re concr te permettant d appeler le service APPROFONDIR Soap gt http Awww w3 org TR soap 2 Jean Marie Chauvet Services Web avec Soap WSDL UDDI ebXML Eyrolles 2002 4 Pages blanches jaunes et vert
281. ion en cascade Par exemple lorsqu on supprime une cat gorie du syst me on veut que ses produits soient galement supprim s La cat gorie supprime ses produits en cascade Entity public class Category OneToMany cascade CascadeType REMOVE private List lt Product gt products Gre Le cycle de vie d un entity bean Comme nous l avons d j dit avec l arriv e de JPA un entity bean est maintenant une simple classe Java Un simple appel au mot cl new permet d instancier un entity bean et de le manipuler comme toute autre classe La seule diff rence noter est l utilisation des annotations que nous venons de voir et qui permet JPA de prendre en compte cette classe et de la rendre persistante On dit alors que la classe est manag e par JPA Le traitement inverse lorsque la classe cesse d tre manag e par JPA est appel d tach Pour illustrer ces principes prenons une classe persistante Category par exemple Lorsque cette classe veut acc der la base de donn es elle a besoin d tre manag e Par contre lorsqu elle doit traverser plusieurs couches de l application pour tre affich e sur la partie cliente elle se d tache et ne peut plus alors manipuler les donn es Le diagramme d tat suivant d crit les diff rents tats que peut prendre un entity bean Il doit tre lu comme suit Lorsqu on instancie un entity bean cet objet existe en m moire uniquement Ce n
282. ional sample application Gg Be 2 JAVA _ Derby Feni affiche les articles POWERED d un produit 193 7 Interface web Les Cahiers du Programmeur Java EE 5 Titre de la page It re la liste des articles Affiche le nom de l article sous forme de lien Cliquer sur le lien invoque la m thode doFindItem qui retournera l article identifi par item id Affiche le prix unitaire de l article dans une colonne WE Packager des images Chaque animal domestique est repr sent par une image Comme nous le verrons par la suite celles ci sont packag es avec l application JSP CSS et accessibles sous le r pertoire images Extrait de la page showitems jsp lt h2 gt Items for product lt h outputText value catalog product name gt lt h2 gt lt h messages layout table styleClass error gt lt h form gt lt h dataTable value catalog items var item gt lt h column gt lt h commandLink action catalog doFindItem gt lt h outputText value item name gt lt f param name itemId value item id gt lt h commandLink gt lt h column gt lt h column gt lt h outputText value item unitCost gt lt h column gt lt h dataTable gt lt h form gt La page de d tail de l article Cette page permet d afficher le d tail de l article s lectionn c est dire son nom son prix et une image YAPS PetStore Item
283. ions Management et Securit JACC Java Authorization Contract for Containers 1 1 115 http jcp org en jsr detail id 115 Java EE Application Deployment 1 2 88 http jcp org en jsr detail id 88 Java EE Management 1 1 77 http jcp org en jsr detail id 77 290 T ches Ant T L CHARGER Ant 1 7 gt http ant apache org Variables globales de l application Variables Pet Store propres de l application YAPS gt Ce livre utilise des t ches Ant pour compiler packager d ployer les applications fichier build xml ainsi que pour administrer le serveur GlassFish fichier admin xm1 Vous retrouverez ces fichiers sur le site www antoniogoncalves org Pour pouvoir ex cuter ces t ches vous devez avoir install Ant au pr alable et rajout le r pertoire ANT_HOME bin dans votre variable PATH Build xml Dans ce fichier vous trouverez toutes les taches utilis es pour les appli cations YAPS Pet Store BarkBank et PetEx Pour les ex cuter il suffit de taper la ligne de commande suivante ant lt le nom de la t che gt Vous trouverez dans le fichier ci dessous la liste des t ches que vous pouvez ex cuter lt xml version 1 0 gt lt project name Petstore default core gt lt property name application name value petstore gt lt property name home dir value gt lt property name barkbank home value home dir barkbank gt lt prope
284. ir que lorsque les balises de la page sont interpr t es et ex cut es un arbre d objets Java les classes d riv es de javax faces component UIComponent est cr c t serveur La racine de cet arbre est un objet javax faces component UIViewRoot Cet arbre est ensuite transform phase de rendu dans un flux propre a la technologie du client HTML WML XML etc Lorsque le client soumet la vue courante le flux correspondant est d cod pour reconstituer l arbre de composants associ s 175 7 Interface web Les Cahiers du Programmeur Java EE 5 JSF La gestion v nementielle Le mod le MVC que nous d crivons ici est l g re ment simplifi En effet JSF utilise un mode de pro grammation v nementiel similaire Swing Il y a donc toute une panoplie d actions handler qui r pond des v nements ActionListener lorsqu on clique sur un bouton ou un lien ou ValueChangeListener lorsque le contenu d une zone de saisie change Nous n aborderons pas ces concepts avanc s dans ce livre gt http www oracle com technology oramag oracle 04 mar o24dev_jsf html It ration avec JSF UEL lt c forEach var product items products gt lt h inputText value product name gt lt c forEach gt La balise JSTL foreach peut utiliser UEL pour valuer la liste des pro duits Traitements et navigation L architecture de JSF est bas e sur le design pattern MVC Comme nous l avons vu
285. irectory Interface 29 139 ejb stateless Catalog 131 139 140 155 ejb stateless Customer 110 128 144 155 ejb stateless Order 126 155 jdbc petstoreDS 59 62 111 112 154 jms petstoreConnectionFactory 60 62 265 279 284 jms topic order 60 62 265 278 279 282 284 jndi properties 140 PortableRemoteObject 140 JPA Java Persistence API 32 67 290 cascade 86 113 chargement d une association 84 contexte de persistance 111 entity manager 105 110 FetchType EAGER 85 91 92 94 97 98 FetchType LAZY 84 91 g n rer la base de donn es 73 langage de requ te 116 mettre jour un entity bean 115 NativeQuery 117 ordonner une association multiple 85 persister un entity bean 113 programmation par exception 78 rattacher un entity bean 114 rechercher un entity bean par son identifiant 114 relation bidirectionnelle 1 n 80 relation unidirectionnelle 0 1 79 relation unidirectionnelle 1 1 77 relation unidirectionnelle 1 n 83 supprimer un entity bean 116 JPQL Java Persistence Query Language 116 117 118 119 createQuery 117 getResultList 118 130 131 getSingleResult 117 jokers 119 Query 117 setParameter 117 131 JSE 26 29 32 JSF Java Server Faces 38 43 168 289 balises Core 172 balises HTML 170 contexte 189 Converter 172 cycle de vie d une page 175 faces config xml 177 180 209 FacesContext 206 FacesServlet 177 185 209 gestion v nementielle 176 navigation 176 180 cl de navigation
286. is e pour passer des param tres la requ te avant d tre ex cut e et de retourner un entity bean Query query em createQuery SELECT c FROM Customer c WHERE c login param query setParameter param login 2 Customer customer Customer query getSingleResult Regardons de plus pr s cette cha ne de caract res Celle ci est constitu e de trois mots cl s SELECT FROM et WHERE Ils permettent de s lectionner un objetc de type Customer dont l attribut login c login ou c getLogin est gal un param tre Ce param tre que l on nomme arbitrairement param est affect dans la ligne suivante La requ te ainsi constitu e est ex cut e via la m thode getSingleResult qui retourne un Object lui m me cast en Customer Nous obtenons ainsi un entity bean Customer dont le login est gal un param tre pass cette m thode PERSISTANCE NativeQuery JPQL a une syntaxe tr s riche qui vous permet de manipuler les objets sous toute forme et cela de mani re standard toutes les bases de donn es En revanche si vous voulez utiliser une fonction nalit propri taire une base de donn es c est dire non portable vous pouvez utiliser les Native Query Elles permettent de prendre avantage de ces particularit s tout en continuant manipuler des entity beans Nous ne verrons pas de requ tes natives dans ce livre Vous pouvez consulter le lien suivant pour plus d inf
287. it d j le mot cl transient qui pr cise que l attribut ne doit pas tre inclus dans un processus de s rialisation et d s rialisation 74 Annotations avanc es Date et heure En Java nous pouvons utiliser les classes java util Date ou java util Calendar pour repr senter une date ou une heure Lors du mapping objet relationnel on peut sp cifier le type gr ce l annotation javax persistence Temporal Elle peut prendre trois valeurs possibles DATE TIME ou TIMESTAMP qui est la valeur par d faut Code de l annotation javax persistence Temporal package javax persistence Target METHOD FIELD Retention RUNTIME public interface Temporal TemporalType value Ci apr s un extrait de code de la classe client avec un attribut date de naissance de type Temporal TemporalType DATE Entity bean Customer avec date de naissance de type Temporal Entity Table name t_customer public class Customer Id GeneratedValue strategy GenerationType AUTO private Long id Column name date_of_birth Temporal Temporal Type DATE private Date dateOfBirth C Remarquez que dans cet exemple l attribut dateOfBirth date de nais sance est annot deux fois Column permet de renommer la colonne en date_of_birth et Temporal de pr ciser le format DATE Comme nous le verrons par la suite il est courant d annoter un attribut l aide de plu sieurs annotations Don
288. it de reproduire int gralement ou partiellement le pr sent ouvrage sur quelque support que ce soit sans autorisation de l diteur ou du Centre Fran ais d Exploitation du Droit de Copie 20 rue des Grands Augustins 75006 Paris Groupe Eyrolles 2007 ISBN 978 2 212 12038 7 PHOTOCOPILLAGE TUE LE LIVRE D p t l gal mai 2007 N d diteur 7651 Imprim en France A Eloise gt http www cnam fr Pr face Peut tre nos activit s aux uns et aux autres nous laisseront elles un jour le temps de regarder avec assez de recul l aventure incroyable de cette technologie qu est Java En seulement dix ans Java s est impos l o on ne devinait que la domination d un seul mod le conomique Aujourd hui la majorit des grands projets tout comme la plupart des grands acteurs de l informatique s appuient sur cette technologie Pour tre plus pr cis il faudrait dire s accroche sa dynamique Qui l aurait pari Depuis le milieu des ann es 1990 et l mergence du navigateur Internet sur nos bureaux virtuels Java est pass de ce petit bonhomme jongleur ani mant inutilement les pages web cet impressionnant ensemble d API per mettant la refonte compl te de nos syst mes informatiques d entreprise Dans ce tourbillon technologique nous sommes tous invit s trouver notre chemin D abord les entreprises dont le m tier est de s adapter aux nouvelles contraintes et au
289. itCardType Column name credit_card_expiry_date length 5 private String creditCardExpDate PrePersist PreUpdate private void validateDataQ if CcreditCardNumber null equals creditCardNumber throw new ValidationException Invalid number if CcreditCardType null equals creditCardType throw new ValidationException Invalid type if creditCardExpDate null equals creditCardExpDate throw new ValidationException Invalid expiry date constructeurs accesseurs m thodes hashcode equals et toString Paquetages des entity beans Les classes de l application YAPS Pet Store sont d velopp es dans le paquetage com yaps petstore La r gle de nommage est la suivante les paquetages des applications commerciales commencent par com suivis du nom de l entreprise yaps et du nom du projet petstore Les objets persistants que nous venons de voir se trouvent tous dans le paquetage com yaps petstore entity Les donn es de la carte de cr dit sont englob es par l entity bean CreditCard Les donn es sont donc stock es dans la table t_order La carte de cr dit n est pas un entity bean elle n a donc pas d identifiant unique Elle est consti tu e d un num ro d un type Visa Master Card etc et d une date d expiration au format mois ann e MM AA Avant d ins rer ou de mettre jour les donn es en base cette m thode est appel e Elle permet de valider l
290. itions optionnel ce sont les conditions n cessaires pour d clencher le cas d utilisation e Description cette rubrique contient un texte explicitant le cas duti lisation e Post conditions optionnel ce sont les conditions remplies apr s l ex cution du cas d utilisation tat du syst me apr s r alisation du cas d utilisation e Exceptions optionnel un cas d utilisation d crit le comportement du syst me lorsqu il n y a pas d exception Si une exception est lev e elle doit tre d crite dans cette rubrique Lorsque le cas d utilisation est li un acteur humain G rer les clients Visualiser le catalogue cela signifie que cet acteur a besoin d interagir avec le syst me Il faut donc lui associer une interface graphique L internaute et le client utilisent leur navigateur web pour acc der au syst me informatique client l ger alors que les employ s uti lisent une application graphique d ploy e sur leurs postes client riche Dans le cas o l acteur serait un syst me BarkBank ou PetEx il n y a pas d interfaces graphiques Les syst mes communiquent entre eux en changeant des donn es dans un format pivot RETOUR D EXP RIENCE Qui r dige les cas d utilisation Les cas d utilisation relatent les besoins des utilisateurs Il est donc normal que ce soit eux qui les r digent Malheureusement ce n est pas toujours le cas En effet m me si les utilisateurs connaissent bi
291. iver gt lt property name db url value jdbc derby db host db port db sid gt lt path id classpath gt 4 Classes et JAR utilis s pour compiler et ex cuter lt pathelement 1ocation glassfish 1ib l application appserv deployment client jar gt lt pathelement location glassfish 1lib appserv rt jar gt lt pathelement location glassfish 1ib webservices rt jar gt lt pathelement location glassfish 1ib appserv admin jar gt lt pathelement location glassfish 1ib javaee jar gt lt pathelement location glassfish lib toplink essentials agent jar gt lt pathelement location glassfish lib toplink essentials jar gt lt pathelement location glassfish lib instal1 applications jmsra imqjmsra jar gt lt pathelement location derby lib derbyclient jar gt lt path gt lt path id yaps classpath gt 4 Classes de l application YAPS Pet Store lt pathelement location yaps classes dir gt lt path gt 293 Les Cahiers du Programmeur Java EE 5 Classes de l application BarkBank Classes de l application PetEx Suppression des r pertoires de travail des appli cations YAPS Pet Store Barkbank et PetEx Suppression des r pertoires de travail de l appli cation YAPS Pet Store Suppression des r pertoires de travail de l appli cation Barkbank Suppression des r pertoires de travail de l appli cation PetEx
292. ix unitaire unitCost et une image repr sentant Panimal vendre Les relations dans un diagramme de classes UML Dans un diagramme de classes il existe quatre types de relations H ritage m canisme par lequel des l ments plus sp cifiques incorpo rent la structure et le comportement d l ments plus g n raux En UML on repr sente un h ritage par une ligne avec un triangle son extr mit Association relation s mantique entre deux ou plusieurs classes C est une connexion bidirectionnelle par d faut entre leurs instances Repr sent e par une ligne Agr gation une forme sp ciale d association qui sp cifie une relation tout partie entre l agr gat le tout et une partie Repr sent e par une ligne avec un losange vide une extr mit Composition une forme d agr gation qui exprime une forte propri t entre le tout et les parties ainsi qu une subordination entre l existence des parties et du tout Les parties vivent et meurent avec le tout elles partagent sa dur e de vie La composition est repr sent e par une ligne avec un losange plein noir une extr mit Cat gorie La soci t YAPS vend cinq cat gories d animaux domestiques chats chiens reptiles poissons oiseaux Chaque cat gorie contient une liste de produits tri e par nom laquelle on acc de de mani re diff r e L utilisation des annotations de callback permet l entity bean de v ri fier la validi
293. izable Id GeneratedValue strategy GenerationType AUTO private Long id Column nullable false length 30 private String name Column nullable false private String description ManyToOne fetch FetchType EAGER JoinColumn name category_fk nullable false private Category category 1 OneToMany mappedBy product cascade CascadeType REMOVE fetch FetchType LAZY OrderBy name ASC private List lt Item gt items Une cat gorie poss de une liste de produits accessible de mani re diff r e La suppression d une cat gorie entra ne la suppression en cas cade de tous ses produits La liste est tri e par nom de produits Avant d ins rer ou de mettre jour les donn es en base cette m thode est appel e par JPA Elle permet de valider les attributs de l entity bean et renvoie une exception en cas d incoh rence REMARQUE Impl menter Serializable Notez que l entity bean Category impl mente l interface Serializable Comme nous l avons vu dans notre architecture les entity beans vont tre utilis s par les applications clientes Swing et JSP Ils vont donc tre transport s tra vers le r seau Java utilise l interface Serializable ou Externalizable pour pouvoir transporter des objets travers le r seau On appelle cela la s rialisation des donn es La plupart de nos entity beans seront utilis s par des applications distantes ils impl mentero
294. java lang RuntimeException En revanche elle ne doit pas h riter de java rmi RemoteException qui est r serv e aux exceptions syst me Sa seule particularit est qu elle doit tre annot e par GApplicationException Lorsqu une exception d application est lanc e par une m thode d EJB le conteneur l intercepte et peut alors d cider de rollbacker la transac tion ou non Ce choix est laiss au d veloppeur En effet l annotation ApplicationException poss de un attribut rollback qui positionn true informe le conteneur de l annulation de la transaction Code de l annotation javax ejb ApplicationException package javax ejb Target value TYPE Retention value RUNTIME 4 Cette annotation s applique a une classe public interface ApplicationException 5 Traitements m tier boolean rollback default false 4 Sp cifie si le conteneur doit ou non rollbacker la transaction en cours Par d faut la valeur est false L application YAPS Pet Store utilise certaines de ces exceptions applica tives par exemple pour la validation des cartes de cr dit Lorsque le client d sire acheter des animaux domestiques il doit saisir son num ro de carte Ce dernier est analys par la banque BarkBank Si la carte est refus e l application lance une CreditCardException et il faut alors rollbacker les mises jour qui auraient pu tre faites dans la base de donn es Exception applic
295. k 119 120 123 267 S s rialisation 66 74 91 serveur d application 33 208 service web 39 236 240 artefacts 245 247 299 classe 245 Delivery 242 tester 257 ValidateCreditCard 246 ValidateCreditCardResponse 246 validation 241 wsgen 293 wsimport 293 servlet 36 160 168 289 j_security_check 199 scope d un objet 165 ServletRequest 164 ServletResponse 164 session http 184 196 214 SGML Standard Generalized Markup Language 30 SOA Service Oriented Architecture 240 Soap Simple Object Access Protocol 39 236 258 289 source de donn es 58 SQL Standard Query Language 44 66 116 SSO Single Sign On 199 stateful bean 34 214 217 232 activation 218 Cartltem 221 231 254 279 classe 216 cycle de vie 217 interfaces 216 passivation 218 ShoppingCartBean 215 220 231 ShoppingCartLocal 215 219 stateless bean 33 44 104 126 217 CatalogBean 126 131 139 188 CatalogLocal 131 185 188 CatalogRemote 139 143 152 classe 109 CustomerBean 105 109 111 126 128 195 CustomerLocal 127 196 CustomerRemote 105 128 143 152 cycle de vie 125 interface distante 107 interface locale 108 144 OrderBean 126 252 254 255 269 279 286 OrderLocal 126 223 OrderRemote 126 143 152 stateless bean 2 x 107 320 EJBObject 320 SessionBean 321 st r otype 96 133 lt lt boundary gt gt 252 lt lt component gt gt 133 lt lt control gt gt 252 lt lt device gt gt 45 lt lt entity gt gt 96 133 252 l
296. l annotation javax persistence PersistenceContext appos e sur lentity manager Gr ce Jattribut unitName petstorePU l entity manager sait faire le lien avec une unit de persis tance qui se nomme petstorePU Cette unit de persistance est d finie dans le fichier persistence xml Comme nous le verrons plus loin ce fichier doit tre d ploy dans le m me jar que les entity beans Unit de persistance d crit dans le fichier persistence xml lt xml version 1 0 encoding UTF 8 gt lt persistence gt lt persistence unit name petstorePU gt lt jta data source gt jdbc petstoreDS lt jta data source gt lt properties gt lt property name toplink target database value Derby gt lt properties gt lt persistence unit gt lt persistence gt Lattribut name de la balise lt persistence unit gt est la r f rence utilis e dans le stateless bean Elle permet l EJB de conna tre le type de la base de donn es c est dire Derby et la mani re de s y connecter via l utilisation de la source de donn es jdbc petstoreDS que nous avons cr e dans GlassFish Manipuler les entity beans Linterface javax persistence EntityManager fournit une API pour manipuler les entity beans Voici un extrait ci apr s pr sentant les prin cipales m thodes que nous utiliserons dans la suite de ce chapitre Extrait de l API de l entity manager package javax persistence public interfac
297. l que l on veut faire cette recherche partir d une cha ne de caract res saisie par l internaute La recherche ne doit pas tenir compte des minuscules ou majuscules et doit porter sur le nom de l article ou le nom du produit Voici cette requ te Requ te pour rechercher les articles Query query em createQuery SELECT i FROM Item i WHERE UPPER i name LIKE keyword OR UPPER i product name LIKE keyword ORDER BY i product category name i product name query setParameter keyword keyword toUpperCase List lt Item gt items query getResultListQ O On s lectionne les articles dont le nom ou le nom du produit ressemble LIKE la cha ne de caract res pass e en param tre On utilise la fonction UPPER pour mettre le r sultat en majuscules et le com parer la cha ne de caract res de recherche elle aussi pass e en majus cules keyword toUpperCaseQ Le r sultat est tri sur le nom de la cat gorie puis le nom du produit D marcation de transactions Comme nous venons de le voir le stateless bean manipule les entity beans via l entity manager CRUD et effectue des requ tes en base de donn es via JPQL Toutes ces actions engendrent des insertions des mises jour et des suppressions de donn es qui doivent tre coh rentes C est donc le r le de l EJB d assurer une d marcation des transactions D marquer explicitement une transaction consiste indique
298. l article 185 7 Interface web Les Cahiers du Programmeur Java EE 5 RETOUR D EXPERIENCE D velopper une application web D velopper une application web n est pas chose facile Comme nous l avons vu en introduction les sp cifications ont d se succ der pour aboutir JSF les servlets ont laiss place aux JSP qui ont d s enri chir de biblioth ques de balises JSTL avant la venue de JSF M me si JSF f d re ces sp cifications il est tout de m me n cessaire de con na tre plusieurs API et langages HTML Java De plus la glue le lien entre toutes ces technologies se fait par fichier XML et par l uti lisation de langages d expressions EL UEL La navigation entre pages est aussi un l ment sensible d une application web et peut s av rer complexe pour une application de grande envergure Sans parler de tous les probl mes auxquels doit faire face le d veloppeur L objectif de ce livre est de se concentrer uniquement sur Java EE 5 ce qui est d j un vaste programme J ai donc sciemment laiss de c t tout framework Open Ssource qui serait venu rajouter un niveau de complexit suppl mentaire la lecture de ce livre Ceci dit je me dois de vous parler de JBoss Seam JBoss Seam est un framework de d veloppement d applications web qui unifie et int gre JSF et les EJB3 entre autres Il a t pens pour liminer la complexit inh rente aux applications web et pour enri chir certaines lacunes li
299. la classe associ e d crit dans la suite de ce chapitre Chargement de la relation d crit par la suite dans ce chapitre Utilis lorsqu on veut cr er un lien avec une cl trang re plut t qu une table de jointure D finit l entity bean avec lequel il faut cr er une relation Cet attribut est obligatoire lorsqu on n utilise pas les types g n riques Op rations devant tre propag es la classe associ e d crit dans la suite de ce chapitre Chargement de la relation d crit par la suite dans ce chapitre L association est elle facultative 82 Association multiple sans g n rique L entity bean Category utilise les g n riques pour la liste des produits Gr ce aux g n riques qui typent cette liste JPA sait que la persistance doit se faire entre Category et Product Si vous n utilisez pas les g n ri ques JPA ne saura pas sur quel autre entity bean pointer Il faut alors sp cifier la classe de l entity bean dans la relation l aide de l attribut targetEntity de l annotation OneToMany Entity Table name t_category public class Category GE OneToMany mappedBy category targetEntity Product class private List products 5 Ci apr s le code des deux annotations utilis es pour la cardinalit 1 n Code de l annotation javax persistence OneToMany package javax persistence Target METHOD FIELD Retention RUNTIME public interface OneToMan
300. la directive include des JSP Ci apr s le patron d une page qui nous montre comment inclure ces diff rents l ments La partie sp cifique est contenue dans le corps de chaque page YAPS PetStore Mozilla Firefox Fichier Edition Affichage Historique Marque pages utils IAJ lus antonio goncalves lt gt YAPS Pet Store Yet Another Pet Store Birds Cats Dogs Fish Reptiles 7 The YAPS Pet Store Demo is a AGS fictional sample application A Figure 7 7 JA t5 LA En t te menu et pied de page Extrait d une page JSP lt f view gt lt div id header gt lt include file common header jspf lt div gt lt div id sidebar gt lt include file common navigation jspf lt div gt lt div id body gt Corps de la page lt div gt lt div id footer gt lt include file common footer jspf lt div gt lt f view gt 187 7 Interface web Les Cahiers du Programmeur Java EE 5 REMARQUE Simplification du code Pour que les lignes de code qui suivent soient plus faciles lire certaines simplifications ont t faites La gestion des exceptions l affichage des messages d erreurs ou tout simplement les traces API de logging ne seront pas d velopp s Figure 7 8 Diagramme du CatalogController et de ses d pendances La r f rence de l EJB est inject e dans l attribut catalogBean Ces attributs sont manipul s par les
301. la p riode o le stateless bean est dans l tat pr t la con nexion reste ouverte et utilisable EJB Les stateless stock s dans un pool Bien que les sp cifications n obligent pas les conte neurs avoir un pool de stateless beans la plupart des serveurs d applications en utilise un pour aug menter les performances Cela vite de cr er et de d truire un EJB chaque appel puisque le conteneur n a qu piocher dans son pool pour r utiliser le pre mier stateless disponible Au d marrage le conte neur cr e un certain nombre de stateless beans et les stocke dans un pool Si un moment donn aucun n est disponible le conteneur en instancie de nou veaux pour effectuer des traitements Au contraire lorsque le conteneur a besoin de lib rer de la m moire il supprime certains EJB du pool GlassFish utilise ce m canisme de pool La taille de ce pool est param trable tout comme la taille mini male ou encore maximale de ce pool Cette configu ration est faite via la console d administration menu Configuration gt EJB Container gt EJB Settings REMARQUE Utilisation de JMS Ne vous inqui tez pas si vous ne comprenez pas totalement le code d appel JMS Les traitements asynchrones seront tudi s de mani re approfondie au chapitre 10 Traitements asynchrones 125 5 Traitements m tier Les Cahiers du Programmeur Java EE 5 Le stateless bean utilise une connexion JMS La connex
302. ld gt lt field name gt cle lt field name gt lt cmp field gt lt cmp field gt lt field name gt valeur lt field name gt lt cmp field gt La m thode findByPrimaryKey s appuie gt lt primkey field gt cle lt primkey field gt sur cette information lt entity gt lt enterprise beans gt lt ejb jar gt Le fichier jbosscmp jdbc xm1 effectue le mapping entre le composant et la base de donn es Tout d abord ce fichier d clare la source de donn es petstoreDS que l on va utiliser ainsi qu un mapping propre la base de donn es MySQL On d finit la table o les donn es vont tre stock es dans notre cas HELLO_PETSTORE puis le mapping entre les attributs du composant et les colonnes de la table Fichier jbosscmp jdbc xml lt jbosscmp jdbc gt lt defaults gt Source de donn es et type de base de donn es gt lt datasource gt java petstoreDS lt datasource gt utilis s pour la persistance lt datasource mapping gt mySQL lt datasource mapping gt lt defaults gt lt enterprise beans gt lt entity gt entity bean d fini sous le nom HelloBean gt lt ejb name gt HelloBean lt ejb name gt dans le fichier ejb jar xml est persist dans lt table name gt HELLO_PETSTORE lt table name gt la table He110o_Petstore 318 D EJB 2 L attribut cl est stock dans la colonne key de type varchar 10 lt cmp field gt lt field name gt cle lt fi
303. le qui complique la lecture du code la fin de la boucle for qui se trouve en bas de la page n est pas facilement rep rable Les biblioth ques standards de balises ou JSTL peuvent encore am liorer la compr hension de la page Scope d un objet Les objets cr s dans les JSP les servlets ou les managed beans JSF que nous verrons par la suite ont une certaine port e ou champ d applica tion c est dire une certaine dur e de vie Les diff rents scopes sont les suivants e Page dur e de vie tr s courte Les objets ne sont accessibles que dans la page ou ils sont d finis e Request dur e de vie courte Les objets sont accessibles pendant la dur e de la requ te c est dire entre le moment o elle est inter cept e par le conteneur et le moment ou la r ponse est envoy e e Session dur e de vie longue Les objets sont accessibles pendant toute la dur e de la session par exemple entre le moment o un utili sateur se connecte a un site puis se d connecte e Application dur e de vie tr s longue Les objets sont accessibles pendant toute la dur e de vie de l application 4 4 On parcourt la liste des produits On affiche le nom et la description du produit dans un tableau HTML ARCHITECTURE Separation of concerns SoC La s paration des responsabilit s permet de s parer diff rents aspects d un probl me afin de pouvoir se concentrer plus efficacement sur chacun gt
304. le ne poss de pas de param tres de retour elle est annot e OneWway Service web red finissant le nom de la m thode WebService public class Delivery WebMethod operationName Deliver 1 Oneway public void deliverItems DeliveryPlace from DeliveryPlace to String reference C9 Les param tres de la m thode Les param tres de la m thode ainsi que la valeur de retour peuvent aussi tre chang s Lannotation javax jws WebParam permet de contr ler la g n ration du WSDL qui concerne les param tres de la m thode Code de l annotation javax jws WebParam package javax jws Target PARAMETER Retention RUNTIME public interface WebParam String name default String partName default gt String targetNamespace default boolean header default false Mode mode default IN Lannotation javax jws WebResult est presque identique mais elle annote la valeur de retour de la m thode Code de l annotation javax jws WebResult package javax jws TargetC METHOD Retention RUNTIME public interface WebResult String name default String partName default String targetNamespace default boolean header default false Le code suivant utilise ces deux annotations pour changer le nom des param tres expiryDate au lieu de ccExpiryDate ou leur mode WebParam Mode IN Lannotation WebResult name cardStatus permet de nommer la valeur
305. les entity bean CRUD e Des message driven beans qui assurent les traitements asynchrones e Les API JNDI pour acc der au service de nommage et JavaMail pour envoyer des mails aux clients Les appels vers les syst mes externes BarkBank et PetEx sont orches tr s par la couche m tier mais d l gu s a la couche d int rop rabilit Couche de mapping objet relationnel La couche de mapping objet relationnel transforme la repr sentation physique des donn es en une repr sentation objet et inversement Ce m canisme est assur par JPA qui utilise le protocole JDBC pour ex cuter les appels SQL Cette couche mest utilis e que parce que notre base de donn es est relationnelle En effet si la persistance tait faite de mani re native en objet ce mapping n aurait pas lieu d tre Couche de persistance Cette couche contient les donn es sauvegard es physiquement sur disque c est a dire la base de donn es En Java le protocole d acc s aux donn es est JDBC Couche d interop rabilit Pour dialoguer avec ses partenaires BarkBank et PetEx l application uti lise une couche d interop rabilit Bas e sur les technologies JAX WS elle acc de des services web distants via le protocole HTTP Architecture technique Les couches que nous venons de d crire sont avant tout logiques et ser vent d crire la conception de l application Nous allons maintenant projeter cette architecture sur
306. les donn es de l application YAPS Pet Store Pour acc der cette base utilisez le m me utilisateur et mot de passe que celui d fini dans le pool de connexions pr c dent dbuser dbpwd Une source de donn es Data Source propose de fournir une meilleure alternative a la classe DriverManager pour faciliter l obtention d une connexion une base de donn es Agissant comme une fabrique factory elle permet au serveur de contr ler le cycle de vie d une connexion L utilisa tion d un objet DataSource est obligatoire pour Cr ation d une source de donn es Apr s le pool de connexions il nous faut cr er une source de donn es DataSource Comme nous le verrons au chapitre suivant Objets persis tants c est cette source de donn es qui est r f renc e dans le code de l application Pour la cr er utilisez la commande pouvoir utiliser un pool de connexions dans un ser veur JEE PETSTORE_HOME ant f admin xml create datasource Figure 3 11 Affichage de la source de donn es dans la console d administration 58 Sun Java System Application Server Enterprise Edition 9 1 Admin Console Mozilla Firefox Odier dition Affichage Historique Marauepages Outils 2 G co oe E Home Version Logout Help User user name Role user nome Server server_name Gh G hito ocahost 8202 Sun Java System Application Server Admin Console fl Application Se
307. les stateless session beans font office de Session Facade et s occupent de faire le lien entre les interfaces utilisateurs et les objets persistants 5 Traitements m tier Exemple de stateless bean Pour d velopper un stateless bean il faut une classe qui contienne le code m tier et au minimum une interface permettant les appels Dans l exemple ci apr s l interface distante CustomerRemote d finit une m thode pour cr er un nouveau client createCustomer La classe CustomerBean quant elle impl mente cette interface en ajoutant du code m tier pour manipuler les entity beans Customer et Address Interface distante Remote public interface CustomerRemote Customer createCustomer Customer customer Address homeAddress Classe du stateless bean Stateless public class CustomerBeanimplements CustomerRemote PersistenceContext private EntityManager em public Customer createCustomer Customer customer Address homeAddress customer setHomeAddress homeAddress em persist customer O return customer O Autres m thodes m tier 105 Les Cahiers du Programmeur Java EE 5 JAVA Passage par valeur et r f rence Le passage de param tres en local dans Java se fait presque toujours par r f rence Seul un poin teur r f rence vers un objet est pass a la m thode Par contre les donn es de type primitif byte short char sont pass es par valeur c est a dire qu une cop
308. lises HTML 170 Les balises Core 172 Exemple de page JSP utilisant les balises JSF 173 Le langage d expression unifi 175 Traitements et navigation 176 La FacesServlet 177 Le managed bean 178 L injection 179 La glue entre le managed bean et la page 180 La navigation entre pages 180 Navigation statique 181 Navigation dynamique 182 Comment d velopper une application web avec JSF 182 L application web YAPS Pet Store 186 D corateurs 186 La visualisation du catalogue 188 Le managed bean CatalogController 188 Les pages web 190 La navigation 190 La page d affichage des produits 192 La page d affichage des articles 193 La page de d tail de Particle 194 La gestion du compte par les clients 195 Le managed bean AccountController 195 Les pages web 196 La navigation 197 L en t te 199 La page de login 199 Le formulaire de saisie 201 L affichage du compte client 202 La mise jour du compte client 204 Gestion des erreurs 205 Paquetages et r pertoires de l interface web 207 Architecture 208 Ex cuter l application 208 Packager 209 D ployer l application et acc der au site 209 En r sum 210 8 GESTION DU PANIER LECTRONIQUE 213 Stateful session bean 214 Exemple de stateful bean 215 Comment d velopper un stateful bean 216 Les interfaces 216 La classe de PEJB 216 Le cycle de vie d un stateful bean 217 Les anno
309. litaires d admi lt property name glassfish home nistration et de g n ration de GlassFish value env GLASSFISH_HOME gt lt property name glassfish lib value glassfish home lib gt lt property name derby home value glassfish home javadb gt lt property name derby 1ib value derby home 1lib gt lt property name asadmin value glassfish home bin asadmin bat gt lt property name wsgen value glassfish home bin wsgen bat gt lt property name wsimport value glassfish home bin wsimport bat gt lt property name echo value false gt lt property name verifier value glassfish home bin verifier bat gt lt property name verifier dir value home dir verifier gt B T ches Ant lt property name server user name value admin gt 4 Propri t s du serveur GlassFish lt property name server passwordfile value passwordfi le gt lt property name Server host value localhost gt lt property name server port value 8080 gt lt property name server admin port value 8282 gt lt property name db host value localhost gt 4 Propri t s de la base de donn es Derby lt property name db port value 1527 gt lt property name db sid value application name DB gt lt property name db user value dbuser gt lt property name db password value dbpwd gt lt property name db driver value org apache derby jdbc ClientDr
310. lt h panelGrid gt Une fois le formulaire saisi le client clique sur le gt lt h commandButton value Submit bouton Submit pour se cr er un compte lt h form gt action account doCreateCustomer type submit gt L affichage du compte client Lorsque le client est connect le lien Account s affiche dans l en t te En cliquant sur ce lien l utilisateur est redirig vers la page showaccount jsp qui affiche les donn es du client en lecture seule Pour les mettre 4 jour inputText value account customer dateOfBirth gt lt f convertDateTime pattern dd MM yyyy gt Street1 gt Street2 gt city gt state gt Zipcode gt country gt il suffit de cliquer sur le lien Edit Your Account Information 202 YAPS PetStore Customer Mozilla Firefox Fichier Edition Affichage Historique Marque pages Outils Q k antonio goncalves Account Cart Sign off YAPS Pet Store Yet Another Pet Store Pets Your Account Information Birds Cats Personal information Dogs Firstname Antonio Fish Lastname Goncalves Reptiles Email antonio goncalves gmail com Telephone 12 456 789 789 Date of birth dd MM yyyy 29 05 1971 Age 35 Street1 32 Broad Street Street2 City San Francisco State Zipcode 4567 Country USA Edit Your Account Information 7 Interface web
311. lui permet tout moment de naviguer dans les cat gories La navigation entre ces pages est d finie dans le fichier faces config xml Extrait du faces config xml concernant la navigation du catalogue lt navigation rule gt lt from view id gt lt from view id gt lt navigation case gt lt from outcome gt products displayed lt from outcome gt lt to view id gt showproducts jsp lt to view id gt lt navigation case gt lt navigation rule gt lt navigation rule gt lt from view id gt showproducts jsp lt from vi ew id gt lt navigation case gt lt from outcome gt items displayed lt from outcome gt lt to view id gt showitems jsp lt to vi ew id gt lt navigation case gt lt navigation rule gt lt navigation rule gt lt navigation case gt lt from outcome gt item displayed lt from outcome gt lt to view id gt showitem jsp lt to vi ew id gt lt navigation case gt lt navigation rule gt main jsp showproducts jsp Sor isme Mine gae Moses Qu 2 Ke Bos f e yiose poe womens Qu 2 Ce YAPS Pet Store FA E YAPS Pet Store 8 8 Yet Another Pet Store Yet Another Pet Store Bards Cats Dogs fish Reptiles NA ET Deroy P boe ism poe tune urere Om l K Dos isme piae goe mees Qu Kie YAPS Pet Store YAPS Pet Store Items for product Amazon Parrot INA EEA oen P EE INA EEA 0 Be showitems jsp showitem jsp Figure 7
312. m thode validateCreditCard avec et sans annotations avec les classes du service web JAX WS Extrait du sch ma XSD des param tres de la m thode sans annotations lt xs complexType name validateCreditCard gt lt XS Sequence gt lt xs element name arg0 type xs string minOccurs 0 gt lt xs element name arg1 type xs string minOccurs 0 gt lt xs element name arg2 type xs string minOccurs 0 gt lt xs sequence gt lt xs complexType gt lt xs complexType name validateCreditCardResponse gt lt XS Sequence gt lt xs element name return type xs string minOccurs 0 gt lt xs sequence gt lt xs complexType gt Extrait du sch ma XSD des param tres de la m thode avec annotations lt xs complexType name Val idateCard gt lt xs Sequence gt lt xs element name creditCardNumber type xs string minOccurs 0 gt lt xs element name creditCardType type xs string minOccurs 0 gt lt xs element name expiryDate type xs string minOccurs 0 gt lt xs sequence gt lt xs complexType gt lt xs complexType name Val idateCardResponse gt lt xs Sequence gt lt xs element name cardStatus type xs string minOccurs 0 gt lt xs sequence gt lt xs complexType gt 244 Comment d velopper un service web Comme nous venons de le voir dans ces quelques exemples le d velop pement d un service web est relativement simple bien que plusieurs technologies soient mi
313. m Edition Server Running Mozilla Firefox BAE Fichier Edition Affichage Historique Marque pages Outils IA K antonio goncalves G A 1 http f localhost 8080 z gt sun com Sun Java System Application Server Platform Edition 9 0 Your server is up and running To replace this page overwrite lt instal drro domains lt dowain nama docroot index html where lt instal dir is the Application Server installation directory and lt max name is the domain name for example domain1 You are invited to register your product now Registration is optional but as a registered user you will get News about product updates Access to value added contents Notification of promotional programs Entry in Java EE platform related gift give aways Also check out the Glassfish project the open source community for the Java EE application server More Information For more information about the Application Server samples documentation and additional resources see lt instad d diry docs about html where lt tas a _azz gt is the Application Server installation directory Company Info Contact Copyright 2006 Sun Microsystems Pour arr ter le serveur par d faut domain1 tapez la commande asadmin stop domain domainl En parcourant l arborescence des r pertoires d installation de GlassFish on s aper oit que la base de donn es Derby se trouve dans GLASSFISH_HOME javadb Co
314. m view id gt lt navigation case gt lt from outcome gt account updated lt from outcome gt lt to view id gt showaccount jsp lt to vi ew id gt lt navigation case gt lt navigation rule gt lt navigation rule gt lt from view id gt signon jsp lt from view id gt lt navigation case gt lt from outcome gt customer signed in lt from outcome gt lt to view id gt main jsp lt to view id gt lt navigation case gt lt navigation rule gt lt navigation rule gt lt from view id gt signon jsp lt from view id gt lt navigation case gt lt from outcome gt create a new account lt from outcome gt lt to view id gt createaccount jsp lt to view id gt lt navigation case gt lt navigation rule gt Len t te Pr sente dans la partie haute de toutes les pages l en t te propose des liens permettant aux clients de se connecter de se d connecter ou de consulter son compte Extrait du fragment de page header jspf lt c choose gt lt c when test empty sessionScope account gt lt h commandLink action signon gt lt h outputText value Sign on gt lt h commandLink gt lt c when gt lt c otherwise gt lt h commandLink action showaccount gt lt h outputText value Account gt lt h commandLink gt lt h commandLink action account doSignOff gt lt h outputText value Sign off gt lt h commandLink gt lt c otherwise gt lt c choose gt La page de login
315. mande JMS et les message driven beans Cycle de vie des MDB MOTS CL S JMS MOM MDB Point point Publication abonnement JavaMail Les Cahiers du Programmeur Java EE 5 4 Synchrone Asynchrone Synchrone change ou traitement d informations en direct appel bloquant Asynchrone change ou traitement d informa tions en diff r RETOUR D EXPERIENCE Les threads dans JEE Pour effectuer un traitement asynchrone en Java on peut utiliser l API des Threads En effet il suffit a une classe serveur de cr er un nouveau Thread par traitement demand Cette API s est enrichie et simplifi e avec JSE 5 Malheureusement les sp cifications JEE interdissent l utilisation de Threads dans les EJB car ce travail doit tre fait par le conteneur et non par le d veloppeur Il est donc proscrit d utiliser les Threads dans un environne ment JEE APPROFONDIR JMS Eric Bruno Java Messaging Programming Series Charles River 2005 Richard Monson Haefel David Chappell Java Message Service O Reilly 2000 gt http java sun com products jms Outils Providers JMS IBM MQSeries gt http www ibm com software maseries JBoss MQ gt http www jboss org wiki Wiki jsp page JBossMQ Sonic MQ gt http www sonicsoftware com products sonicmq Sun iMQ gt http Awww sun com software products message_queue index xml 262 Lorsque le client valide son panier lectronique et qu
316. me machine IHM aucun traitement nest impl ment dans cette couche L application YAPS Pet Store poss de deux types d interfaces homme machine un client l ger et un client riche Le client l ger utilis par linternaute est d crit en langage HTML puis interpr t par le navigateur Dans le cas du YAPS Pet Store nous ne d velopperons pas directement l interface en HTML mais plut t l aide de JSP et de tags JSF et JSTL ainsi que du langage d expression Les appels la couche m tier sont d l gu s la couche navigation Le client riche lui est d velopp en Swing et utilise le protocole RMI pour communiquer avec la couche m tier Pour afficher les v nements asynchrones re us de l application cette couche utilise galement JMS Couche de navigation Cette couche uniquement utilis e par le client l ger prend en charge la logique de navigation De ce fait elle g re l encha nement des JSP ainsi que les appels aux traitements m tier Cette couche est mise en uvre par la technologie JSF Couche de traitement m tier La couche de traitement m tier correspond la partie fonctionnelle ou m tier de l application Elle impl mente la logique et les r gles de ges tion permettant de r pondre aux requ tes de la couche pr sentation Couches de l application YAPS Pet Store JMS L application Swing L expression des besoins nous signale que les employ s veulent tre avertis lorsqu un b
317. me consulter les r f rences suivantes Antoine Lonjon Jean Jacques Thomasson et Libero Maesano Mod lisation XML Eyrolles 2006 4 Renaud Fleury Java XML Eyrolles 2004 gt http www w3 org XML gt http www w3 org XML Schema RAPPEL Sigles et acronymes Vous trouverez en annexe un lexique d acronymes et de sigles 238 Extrait de fichier WSDL lt definitions targetNamespace http validator barkbank com 1 name ValidationService gt lt types gt lt xsd schema gt lt xsd import namespace http validator barkbank com schemaLocation http localhost 8080 barkbank ValidationService xsd 1 gt lt xsd schema gt lt types gt lt message name ValidateCard gt lt part name parameters element tns ValidateCard gt lt message gt Ciun lt service name ValidationService gt lt port name ValidationPort binding tns ValidationPortBinding gt lt soap address location http localhost 8080 barkbank ValidationService gt lt port gt lt service gt lt definitions gt Cet extrait de document WSDL commence par l en t te definitions Cet l ment peut prendre plusieurs attributs facultatifs qui d finissent des noms de domaines 4 utiliser dans la suite du document Dans notre exemple la d finition re oit le nom ValidationService Le service web portant ce m me nom peut tre invoqu partir d une URL donn e Ce document utilise certains
318. ment r architectur s pour laisser place aux entity beans 2 1 Bien que cette volution ait apport beaucoup d am liorations ce mod le de composants persistants continuait faire des d tracteurs parmi la com munaut Ce m contentement a donn naissance une nouvelle sp cifi cation JDO Java Data Object ainsi qu diff rents outils de mapping objet relationnel payants ou libres TopLink Hibernate Java EE 5 et son lot de nouveaut s nous apporte un nouveau mod le de persistance JPA Java Persistence API Fortement inspir s par des outils Open Source tels qu Hibernate ou par JDO le mapping objet rela tionnel et le langage de requ te sont totalement diff rents de l anc tre entity bean 2 1 JPA ou JSR 220 r concilie ainsi les utilisateurs de la plate forme JEE avec les composants persistants Java Persistent API s appuie sur JDBC pour communiquer avec la base de donn es En revanche gr ce l abstraction apport e par JPA nous naurons nul besoin d utiliser directement JDBC dans le code Java JMS 1 1 Une des mani res d avoir des traitements asynchrones en JEE consiste en l utilisation dun MOM Message Oriented Middleware c est dire un syst me bas sur l change de messages En utilisant JMS Java Mes saging Service un client produit un message et le publie dans une file d attente Ainsi la communication des v nements ou des donn es se fait de fa on asynchrone ni le clien
319. mentaire utilisable dans une situa tion particuli re Interface locale Linterface locale d finit les m thodes accessibles l int rieur du serveur d applications c est dire par d autres EJB ou applications web h ber g es sur le m me serveur Cette interface permet les appels locaux sans rajouter de surco t li la s rialisation des param tres qui devient alors inutile Cette interface est identifi e par l annotation javax ejb Local Ci apr s l interface CustomerLocal d finissant la m me m thode pour cr er un client Interface locale Local public interface CustomerLocal Customer createCustomer Customer customer Address homeAddress Comme vous pouvez le constater le code est identique celui de linter face distante La seule diff rence r side dans l utilisation de l annotation Local au lieu de Remote Code de l annotation javax ejb Local package javax ejb Target TYPE Retention RUNTIME public interface Local Class valueQ default La classe de l EJB Cette classe contient la logique m tier du composant et doit avoir au moins une interface Si la classe impl mente les deux interfaces cela signifie que le m me EJB peut tre appel de mani re locale et distante Dans les deux cas le client de l EJB r utilise pas directement cette classe mais doit passer par une des interfaces La classe d impl mentation du bean Stateless public class Cust
320. mine Ils ne peuvent donc pas tre utilis s pour stocker de fa on perma nente les informations de l application Les EJB entit s peuvent r pondre ce besoin puisqu ils sont persistants En effet leur tat est sauvegard sur un support de stockage externe comme une base de donn es Les entity beans repr sentent des donn es ou des objets m tier plus exacte ment qui perdurent apr s la fin d une session Ils existent souvent sous la forme d enregistrements uniques dans une base de donn es Depuis Java EE 5 et l arriv e de JPA on a plut t tendance parler d entit entity que de bean entit entity bean En effet si les entity beans 2 1 ont un mod le de d veloppement assez lourd et compliqu les entities sont eux de simples classes Java Pojo et peuvent m me tre utilis s en dehors de Java Enterprise Edition c est dire dans une application Java standard Cependant la sp cification JEE utilise encore le terme entity bean Il faut juste se faire l id e qu un entity bean est devenu une simple classe Java ightweight et non un composant lourd heavyweight et complexe d velopper Exemple d entit d adresse Entity Table name t_adresse public class Adresse Id GeneratedValue private Long identifiant private String rue Le conteneur d EJB Souvent aussi appel tort serveur d applications le conteneur d EJB a la responsabilit de cr er de nouvelles ins
321. minpwd Login et mot de passe pour acc der la console d administration GlassFish master masterpwd Login et mot de passe du super utilisateur GlassFish petstoreDB Nom de la base Derby o seront stock es les donn es de l application dbuser dbpwd Login et mot de passe de la base de donn es petstorePool Nom du pool de connexions la base petstoreDS Nom de la source de donn es pour acc der la base jms petstoreConnectionFactory Fabrique JMS jms topic order File d attente JMS pour la gestion des bons de commande com yaps petstore Nom du logger de l application YAPS Pet Store com barkbank validator Logger du service web de validation de carte bancaire de BarkBank com petex transport Logger du service web du transporteur PetEx 4 Les fichier ear Le fichier ear Enterprise Archive est une archive au format JAR qui contient tous les fichiers d une application JEE classes java EJB pages web images Les fichiers ear sont d ploy s et ex cut s par les serveurs d applications 62 Environnement de d veloppement Tout au long de ce livre nous d velopperons trois applications e YAPS Pet Store le site de commerce lectronique permettant d acheter des animaux de compagnie e BarkBank composant de validation des cartes bancaires e PetEx application permettant au transporteur de livrer les animaux domestiques aux diff rents clients Ces a
322. mment d velopper une application web avec JSF Nous venons de d finir de nombreux concepts Il est temps de les assembler pour comprendre comment cr er une application web Pre nons l exemple de la recherche des articles Dans le cas d utilisation Rechercher un article du premier chapitre l application web doit pouvoir afficher la liste des articles en se basant sur une cha ne de carac t res saisie par un internaute Voici le fonctionnement g n ral La cha ne de caract res est saisie dans une balise inputText Lorsque l internaute clique sur le bouton Search commandButton la m thode doSearch du managed bean CatalogController est invoqu e Celui ci d l gue le traitement EJB Stateless CatalogBean qui lui retourne une liste d entity bean Item Gr ce au fichier faces config xm1 la naviga tion se fait vers la page searchresult jsp qui affiche la liste dans une balise dataTable public class CatalogController private String keyword private List lt Item gt items public String doSearch items catalogBean searchltems keyword return items found faces config xml lt h inputText value catalog keyword gt lt h commandButton action catalog doSearch value Search gt lt faces config gt lt managed bean gt lt managed bean name gt catalog lt managed bean name gt lt managed bean class gt CatalogController lt managed bean class gt lt manage d
323. mment un bean manag intercepte des exceptions et peut changer la navigation entre pages Figure 7 18 updateaccount jsp permet de modifier le compte client 205 7 Interface web Les Cahiers du Programmeur Java EE 5 Cette variable contient la cl de navigation Bloc try Le traitement se fait sans exception la cl de navigation est affect e En cas d exception on rajoute un message au contexte JSF Retourne la valeur null ou customer created Rajoute un message dans le contexte de JSF ARCHITECTURE La validation des donn es Dans la gestion des exceptions que nous d crivons pr c demment le syst me renvoie une exception ValidationException en signalant que le nom de famille est obligatoire Si vous vous reportez au chapitre 4 Objets persistants vous verrez que cette exception est lev e dans une m thode annot e PrePersist de l entity bean Customer 206 gt Exemple de m thode traitant les erreurs public String doCreateCustomer String navigateTo null try customer customerBean createCustomer customer homeAddress homeAddress customer getHomeAddress navigateTo customer created catch Exception e addMessage e return navigateTo O private void addMessage String message O FacesContext context FacesContext getCurrentInstance context addMessage null new FacesMessage FacesMessage SEVERITY_
324. mote java comp env com yaps petstore stateless catalog CatalogBean em naming bind RemoteBusinessJndiName ejb stateless Catalog remoteBusIntf com yaps petstore stateless catalog CatalogRemote java comp env com yaps petstore stateless order OrderBean em naming bind RemoteBusinessJndiName ejb stateless Order remoteBusIntf com yaps petstore stateless order OrderRemote Une fois le fichier petstore ear d ploy et toutes ces tapes pass es avec succ s vous pouvez vous rendre sur la console d administration de GlassFish pour consulter ces informations http localhost 8282 Vous trouverez entre autres le contenu de l arbre JNDI avec tous les stateless beans d ploy s http localhost 8282 Jndi Tree Browsing Mozilla Firefox DER A Jndi Tree Browsing View JNDI names The resource object and its JNDI name are bound together z stateless Order Catalog com yaps petstore stateless catalog CatalogRemote Catalog__3_x_Internal_RemoteBusinessHome__ PA Catalog ps Customer__3_x_Internal_RemoteBusinessHome__ Customer ns Order__3_x_Internal_RemoteBusinessHome__ M Customer com yaps petstore stateless customer CustomerRemote nt Order com yaps petstore stateless order OrderRemote a Figure 6 18 Images 85 85 Loaded 88 KB 296 3 KB s Time 0 00 ial Open Notebook Stateless beans dans JNDI Ex cuter Toutes nos classes sont compil es packag es et d ploy es sur le
325. mposants graphiques liste d roulante zone de saisie tableau etc Chaque composant r agit ensuite un ensemble d v nements clic changement de texte etc Le support de la partie graphique reste toujours une page JSP dans laquelle on rajoute les balises JSF La page est donc constitu e de ces composants graphiques qui simbriquent les uns dans les autres une page contient un formulaire qui est constitu de zones de saisie et de boutons formant ainsi un arbre Ces balises sont ensuite interpr t es pour tre transform es en HTML pour une application web ou en WML pour une application destin e aux PDA Application tT T T JSTL ciai JSF JSP Servlet Figure 7 2 Technologies autour de JSF ARCHITECTURE Le pattern observable Lorsqu on parle de programmation v nemen tielle on pense souvent au pattern observable Couramment utilis dans les interfaces graphiques c est le cas de Swing et de JSF ce pattern permet d alerter des objets int ress s par un changement d tat le contenu d une zone de saisie qui change un clic sur un bouton etc Des objets demandent a observer a recevoir une notification le change ment d autres objets 4 WAP et WML Le Wireless Application Protocol WAP est un pro tocole de communication dont le but est de per mettre l acc s a Internet l aide d un terminal mobile par exemple un t l phone portable un PDA etc
326. n Celui ci re oit un mes sage du Topic et en r cup re le contenu qui se trouve tre un entity bean Order Appelle une m thode priv e pour envoyer le message 4 On cr e une session JavaMail Le message JavaMail est envoy l adresse e mail du client 4 Le sujet de l e mail 281 10 Traitements asynchrones Les Cahiers du Programmeur Java EE 5 Une m thode priv e cr e le corps du message L e mail est envoy au serveur de messagerie par protocole SMTP MDB l coute du Topic jms topic order Le logger fait office d impression La m thode onMessage re oit un message du Topic et en r cup re le contenu qui est un bon de commande Appelle une m thode priv e pour imprimer le bon de commande L impression du bon de commande utilise l API de logging Java pour afficher les informations 282 gt msg setText formatBody order gt Transport transport session getTransport smtp transport connect SMTP_HOST USER PASSWORD transport sendMessage msg msg getAllRecipients gestion des exceptions transport closeQ Impression du bon de commande Un autre MDB est l coute du Topic l orderPrinterBean A chaque message re u ce message driven bean imprime un bon de commande L impression en Java est fastidieuse et ce mest pas le th me du livre Dans l exemple de code suivant l API de logging est utilis e pour affi cher l
327. n ere gt Address 32e gt lt h commandButton value Submit action account doUpdateAccount type submit gt YAPS PetStore Create Customer Mozilla Firefox Fichier Edition Birds Cats Dogs Fish Reptiles Affichage Historique Marque pages Outils 2 YAPS Pet Store Yet Another Pet Store A lus antonio goncalves Account Cart Sign off Update Your Account Login Email Telephone antonio Firstname Antonio Lastname Goncalves lantonio goncalves g 12 456 789 789 Date of birth dd MM yyyy 29 05 1971 Personal information Street1 Street2 City State Zipcode Country San Francisco 32 Broad Street Gestion des erreurs Les sources des managed beans et des pages ont t simplifi es pour en faciliter la lecture et la compr hension Dans le code que nous avons vu pr c demment la gestion des erreurs a t supprim e Le comportement souhait est qu en cas d exception la page en cours se rafra chisse en affichant le message d erreur en rouge Pour cela nous avons besoin de deux l ments Le premier est l utilisation de la balise lt h messages gt dans chaque page En effet cette balise permet d afficher les erreurs d tect es par le bean manag Le deuxi me est le code du managed bean qui permet de g rer cette fonctionnalit Le code ci apr s nous montre co
328. n es non persist es Avec JPA d s qu une classe est annot e persistante Entity ses attri buts sont tous automatiquement stock s dans une table Si l on veut qu un attribut ne soit pas rendu persistant on doit utiliser l annotation javax persistence Transient Par exemple l ge du client n a pas besoin d tre rendu persistant en base puisqu il peut tre calcul partir de la date de naissance Entiy bean Customer avec un attribut Transient Entity Table name t_customer public class Customer Ghia Column name date_of_birth Temporal Temporal Type DATE private Date dateOfBirth Transient private Integer age Englober deux objets dans une seule table JPA permet d englober les attributs de deux classes dans une seule table de mani re relativement simple La classe englob e utilise l annotation Embeddable alors que la classe englobante utilise Embedded Prenons l exemple d un bon de commande Order que l on r gle l aide d une carte bancaire CreditCard Ces deux classes peuvent tre englo b es dans une seule et m me table t_order dans notre exemple Entity bean Order englobant l entity bean CreditCard Entity Table name t_order public class Order Id GeneratedValue private Long id Embedded private CreditCard creditCard C Lentity bean CreditCard est englobable Embeddable public class CreditCard private String c
329. n lien pour ajouter cet article dans son panier lectronique Cette op ration peut tre ex cut e plusieurs fois sur des articles diff rents Le client a ensuite la possibilit de modifier la quan tit d sir e pour chaque article ou supprimer un ou plusieurs de ces arti cles du panier Lorsque la quantit d un article est inf rieure ou gale z ro l article est automatiquement supprim du panier Pendant toute la dur e de sa session le client peut visualiser le contenu de son panier quand bon lui semble Lorsque le Caddie est vide un mes sage avertit le client Sinon le syst me affiche la liste des articles avec le nom la description du produit la quantit d sir e le prix unitaire et le sous total prix unitaire x quantit Le montant total du panier est ga lement renseign Ce Caddie est illimit en taille un client peut donc acheter autant d articles qu il le souhaite Lorsque le client est satisfait il valide son panier lectronique Il doit alors saisir les informations de sa carte bancaire ainsi que l adresse de livraison Par d faut l adresse de livraison est la m me que celle du client mais elle peut tre modifi e Les donn es de la carte bancaire sont les suivantes e Num ro de carte bancaire e Type de carte bancaire Visa Master Card et American Express e Date d expiration de la carte bancaire Le format de cette date est MM AA c est dire deux chiffres pour le mois et deux pou
330. n y m lange des traitements Java l appel PEJB et de la pr sentation HTML souvent avec des images des styles des animations etc Dans le cas de pages complexes le code devient vite difficile maintenir Pour ne pas se retrouver dans ce cas de figure les JSP sont venues simplifier le d veloppement de pages web Une servlet tend la classe HttpServlet Point d entr e d une servlet Lookup JNDI pour obtenir l interface locale de l EJB CatalogBean L EJB retourne la liste des produits pour une cat gorie donn e La servlet pr pare la r ponse renvoyer au navi gateur sous forme de HTML On it re la liste des produits pour en afficher le nom et la description sous forme de tableau balises TABLE TR et TD 161 7 Interface web Les Cahiers du Programmeur Java EE 5 APPROFONDIR JSP Anne Tasso S bastien Initiation a JSP Eyrolles 2004 Q Simon Brown Sam Dalton Daniel Jepp Dave Johnson Sing Li Matt Raible Pro JSP 2 Apress 2005 JavaServer Pages Technology gt http java sun com products jsp The JSP Resource Index gt http www jspin com Ermacore Lookup JNDI pour obtenir l interface locale du stateless CatalogBean L EJB retourne la liste des produits pour une cat gorie donn e On it re la liste des produits On affiche le nom et la description du produit Wes Extensions des pages JSP Les fichiers de pages J
331. nant des balises JSTL lt taglib prefix c uri http java sun com jsp jstl core gt lt page import com yaps petstore entity catalog Product gt lt page import java util List gt lt TABLE gt lt jsp useBean id products class List lt Product gt scope request gt lt c forEach var product items products gt lt TR gt lt TD gt lt A href gt lt c out value product name gt lt A gt lt BR gt lt c out value product description gt lt TD gt lt TR gt lt c forEach gt lt TABLE gt L exemple pr c dent m lange les directives JSP jsp useBean avec les balises JSTL foreach out et le langage d expression Pour utiliser la biblioth que Core de JTSL il faut la d clarer dans la page l aide d une directive JSP Cette ligne de code nous informe de l URL de la biblioth que mais aussi du pr fixe utilis dans la page Toutes les balises pr fix es par la lettre c correspondent la biblioth que Core Ensuite on peut parcourir la liste des produits avec la balise forEach Celle ci prend en param tre la liste d objets products puis d finit un index product sur lequel it rer On affiche alors le nom du produit et sa des cription l aide de la balise out Comme vous pouvez le constater le code se limite des balises XML le rendant beaucoup plus simple lire et comprendre APPROFONDIR JSTL gt http java sun com prod
332. nde Il est payable par une carte bancaire CreditCard entity com yaps petstore lt lt entity gt gt d CreditCard id Long creditC ardNum ber String orderDate Date creditC ardT ype String creditC ardE xpiryDate String id Long quantity Integer order Order tem Item Ee lt lt entity gt gt lt lt entity gt gt Item Customer deliveryAddress Le diagramme de classes pr c dent nous montre les attributs du bon de commande identifiant et date de cr ation des lignes de commandes quantit achet e et r f rence vers l article achet et la carte de cr dit num ro de la carte date de fin de validit et type Notez que ces entity beans ont des liens avec des paquetages externes comme l article qui se trouve dans le paquetage catalog par exemple La classe Address quant elle se trouve la racine du paquetage com yaps petstore entity puisqu elle est commune au bon de com mande et au client Bon de commande Le bon de commande est reli diff rents entity beans au client qui a pass la commande l adresse de livraison et ses lignes de com mandes lien unidirectionnel Quant la carte de cr dit elle est englob e gr ce l utilisation de l annotation Embedded Lors de l inser tion du bon de commande en base on affecte la date de cr ation la date courante gr ce une m thode annot e par PrePersist La m thode m tier get
333. nection pool 57 306 list datasource 59 306 list jms resources 59 308 petex 257 petex build 256 298 petex clean 256 294 petex compile 256 295 petex deploy 257 301 ping connection pool 58 306 run client 155 302 set loggers 61 309 setup 57 310 start db 305 start domain 304 stop db 305 stop domain 304 yaps build 151 208 231 287 296 yaps clean 151 231 287 294 yaps compile 151 208 295 296 yaps deploy 153 209 231 257 287 300 yaps undeploy 257 anti patterns 41 API Application Programming Interface 26 architecture 42 44 couche d interop rabilit 44 240 couche de mapping 44 67 couche de navigation 43 176 couche de persistance 44 66 couche de pr sentation 43 146 couche de traitement 43 104 couplage lache 279 Open Source 31 s paration des responsabilit s 104 165 archive barkbank war 256 292 298 entity jar 152 209 232 292 297 mdb jar 287 292 297 petex war 256 292 298 petstore ear 153 209 231 257 287 292 298 petstore jar 152 292 296 petstore war 209 232 292 298 stateful jar 231 292 297 325 Les Cahiers du Programmeur Java EE 5 stateless jar 152 209 231 292 296 utility jar 152 209 292 297 ws interface jar 257 292 297 ASP 160 asynchrone 32 35 43 59 262 autoboxing 26 B B2B 236 BarkBank 2 4 44 63 126 236 250 255 BLOB 90 blueprint X 25 39 Business Delegate CatalogDelegate 143 144 148 Custome
334. nfiguration du serveur GlassFish Nous venons d installer les outils indispensables pour d velopper et ex cuter l application YAPS Pet Store Il nous faut encore configurer Glass Fish pour r pondre aux besoins sp cifiques de l application Cr ation d un domaine Tout d abord nous allons cr er un domaine propre l application Comme nous venons de le voir lors de l installation GlassFish poss de un domaine par d faut qui se nomme domain1 Nous allons cr er un Figure 3 8 Page d accueil par d faut de GlassFish Outils Versions utilis es Pour le d veloppement de l application YAPS Pet Store voici la version des outils utilis s dans ce livre e JDK 1 5 10 e Ant1 7 e GlassFish V2b30 55 3 Outils et installation Les Cahiers du Programmeur Java EE 5 GLASSFISH Les mots de passe Pour administrer GlassFish il faut soit saisir le mot de passe administrateur chaque commande en ligne soit le stocker dans un fichier Cette deuxi me solution a t adopt e dans ce livre Vous trouverez donc dans le code de YAPS Pet Store le fichier passwordfile qui contient le mot de passe administrateur sous le format AS_ADMIN_PASSWORD adminpwd Figure 3 9 Configuration du domaine Pet Store Security Donain pe F gt GLASSFISH Comprendre les domaines GlassFish comme bien d autres serveurs d applica tions utilise le concept de domaines Un domaine est une instance de serve
335. nistration et ceux entre particuliers comme les ench res petites annonces etc Consumer to Consumer ou C2C 4 URL URI URN URC URL Uniform Resource Locator est une chaine de caract res servant a localiser des res sources consultables l aide d un navigateur Les URL sont un sous ensemble d URI Unified Resource Identifier qui est un mode d adres sage labor de ressources utilis notamment pour le Web Plus pr cis ment l URI est un l ment g n rique qui se d cline en trois sous ensembles e URN Uniform Resource Name qui permet un nommage unique et permanent m me si la ressource devient inaccessible e URC Uniform Ressource Characteristic qui d crit les caract ristiques de la ressource e l URL qui donne sa localisation 4 XML RPC XML RPC Remote Procedure Call est un pro tocole qui a t con u pour permettre des struc tures de donn es complexes d tre transmises ex cut es et renvoy es tr s facilement sur des plates formes h t rog nes XML RPC est l anc tre de Soap gt http www xmlirpc com 236 Pour viter les commandes impay es li es des num ros de cartes ban caires erron s la soci t YAPS fait appel la banque BarkBank pour valider ces num ros Cette validation s effectue lorsque les clients pas sent une commande en ligne Les donn es sont chang es entre les deux soci t s au format XML et sont transport es par le p
336. nno t es par PrePersist Si l insertion ne rencontre pas de probl mes ou d exceptions les m thodes annot es PostPersist sont ex cut es Il en est de m me pour les mises jour PreUpdate PostUpdate et les sup pressions PreRemove PostRemove Par contre l annotation PostLoad est appel e lorsqu un entity bean est charg partir de la base de don n es via une requ te ou une association Dans l exemple suivant l entity bean Category valide ses donn es avant son insertion en base PrePersist ou sa mise jour PreUpdate Si les donn es ne sont pas valides une exception est lanc e Cat gorie utilisant des annotations de callback Entity public class Category Id GeneratedValue private Long id private String name private String description CES PrePersist PreUpdate private void validateData if name null equals name throw new ValidationException Invalid name if description null equals description throw new ValidationException Invalid description Les entity beans de YAPS Pet Store Apr s avoir d couvert le fonctionnement de JPA et de certaines annota tions il ne nous reste qu tudier son application sur les objets persis tants de YAPS Pet Store Pour cela il nous faut d finir les objets persistants de l application partir des cas d utilisation du premier chapitre Un moyen simple con siste trouver les noms et pas les verb
337. nomm es CatalogDelegate CustomerDelegate et OrderDelegate et qui respectivement d l gueront les appels aux interfaces CatalogRemote CustomerRemote et OrderRemote Par exemple l extrait de code ci apr s repr sente la classe CustomerDelegate qui d l gue les appels EJB CustomerBean Extrait de la classe CustomerDelegate public final class CustomerDelegate C public static Customer findCustomer Long customerId return getCustomerRemote findCustomer customerId Le constructeur est priv il ne peut donc pas tre appel par une classe ext rieure ce qui nous garantit l unicit de l instanciation On ini tialise le contexte JNDI et le cache dans le cons tructeur M thode permettant de retrouver une interface distante On commence par rechercher l objet dans le cache Si l objet ne s y trouve pas on le recherche dans JNDI puis on le stocke dans le cache pour les uti lisations futures Cette m thode statique appelle la m thode findCustomer de l EJB CustomerBean 143 6 Ex cution de l application Les Cahiers du Programmeur Java EE 5 Celle ci d l gue l appel deleteCustomer Cette m thode priv e appelle le Service Locator pour obtenir l interface distante Notez le nom JNDI de l EJB Celui ci est d fini dans l annotation Stateless de CustomerBean APPROFONDIR Business delegate Core J2EE Patterns Business Delegate gt http java sun
338. noms de domaines d finis l aide de pr fixes e tns abr g de this namespace ce nom de domaine c est dire le nom de domaine d accueil contenant le service xsd nom de domaine du sch ma XML XSD utilis pour d finir les types du document soap nom de domaine utilis pour la liaison Soap Nous ne nous attarderons pas plus sur WSDL car comme vous le d couvrirez plus loin ce document est g n r automatiquement et n a pas a tre d velopp manuellement JAX WS 2 0 JAX WS est la nouvelle appellation de JAX RPC Java API for XML Based RPC qui permet de d velopper tr s simplement des services web JAX WS fournit un ensemble d annotations pour mapper la correspon dance Java WSDL Il suffit pour cela d annoter directement les classes Java En ce qui concerne le client JAX WS permet d utiliser une classe proxy pour appeler un service distant et masquer la complexit du proto cole Ainsi ni le client ni le serveur n ont besoin de g n rer ou de parser les messages Soap JAX WS s occupe de ces traitements bas niveau Exemple d annotations JAX WS dans une classe Java WebService public class Validation WebMethod public String validateCreditCardQ Gand Dans l exemple ci dessus une classe Java utilise des annotations JAX WS qui vont permettre par la suite de g n rer un document WSDL JAXB 2 0 JAX WS s appuie sur l API JAXB 2 0 pour tout ce qui concerne la cor re
339. ns sont d finies par des m ta annotations Par exemple le PARAMETER l annotation peut tre utilis e sur des param tres code de l annotation Tab1e que nous venons de voir utilise plusieurs d une m thode ou d un constructeur m ta annotations e TYPE l annotation peut tre utilis e sur la d claration d un type Target permet de limiter le type d l ments sur lesquels l annotation classe interface annotation comprise ou num ration peut tre utilis e Si elle est absente de la d claration elle peut alors Retention indique la mani re dont l annotation doit tre g r e par tre utilis e sur tous ces l ments le compilateur Elle peut prendre une de ces trois valeurs e ANNOTATION_TYPE l annotation peut tre utilis e sur d autres SOURCE les annotations sont pr sentes dans le source mais ne annotations sont pas enregistr es dans le fichier class e CONSTRUCTOR l annotation peut tre utilis e sur des construc CLASS les annotations sont enregistr es dans le fichier class teurs la compilation ma s elle ne sont pas utilis es par la machine virtuelle e FIELD l annotation peut tre utilis e sur des champs d une classe l ex cution de l application e LOCAL_VARIABLE l annotation peut tre utilis e sur des varia RUNTIME les annotations sont enregistr es dans le fichier bles locales class la compilation et sont utilis es par la machine virtuelle
340. nt Le diagramme de d ploiement montre la disposi tion physique des mat riels qui composent le sys t me et la r partition des composants sur ces mat riels Les ressources mat rielles sont repr sent es sous forme de n uds les cubes qui peu vent tre li s entre eux l aide d un support de communication Le st r otype lt lt devi ce gt gt ren force le fait que le noeud est un serveur physique alors que lt lt executionEnvironment gt gt est utilis pour les logiciels tels qu un serveur d appli cations ou de base de donn es Figure 2 8 Diagramme de d ploiement de l application Pr cision Machine physique La r partition des composants sur diff rentes machines est une vision id ale de l architecture Pour simplifier le d ploiement de la totalit de l application nous n utiliserons qu une seule machine qui h bergera le serveur d applications les services web ainsi que les interfaces homme machine 45 2 Architecture de l application chapitre Code Analyze Refector Buld Run Took Version Control Window Help QR BM Ty newe tex gt D A 2 1 2 Category java hem java Sauthor Antoni 2 Eher Editon Affichage Historique Marquepages Quis 2 G y L Ga gen tinae t product a 4s Li http Aocalhost 8282 ue public class Product isp g CQ resources By src Home User user_name Role
341. nt customer age gt lt h panelGrid gt gt lt h3 gt Address lt h3 gt lt h panelGrid columns 2 gt gt lt h outputText value Street1 gt lt h outputText value account homeAddress street1 gt lt h outputText value Street2 gt lt h outputText value account homeAddress street2 gt lt h outputText value City gt lt h outputText value account homeAddress city gt lt h outputText value State gt lt h outputText value account homeAddress state gt lt h outputText value Zipcode gt lt h outputText value account homeAddress zipcode gt lt h outputText value Country gt lt h outputText value account homeAddress country gt Le lien hypertexte utilise la navigation statique Identit du client Adresse de domiciliation du client Pour mettre a jour le compte client le clic sur le bouton invoque la m thode doUpdateAccount du managed bean 204 lt h panelGrid gt gt lt h commandLink action updateaccount gt lt h outputText value Edit Your Account Information gt lt h commandLink gt lt h form gt La mise jour du compte client Cette page affiche un formulaire pr rempli des donn es du client et permet de les modifier Le code est presque identique celui de la page createaccount jsp nous n en d taillerons donc que quelques lignes Extrait de la page updateaccount jsp gt Personal informatio
342. nt e par un rec tangle s par en trois parties e la premi re partie contient le nom de la classe et un ventuel st r otype e la seconde contient les attributs de la classe e la derni re contient les m thodes de la classe On peut masquer ou non une de ces parties si on veut rendre un diagramme plus lisible ou si la classe en question ne contient ni attribut ni m thode Figure 5 2 Diagramme de classes du stateless bean Customer 127 5 Traitements m tier Les Cahiers du Programmeur Java EE 5 Interface locale M thodes utilis es par l application web Interface distante M thodes utilis es par l application en client lourd La politique transactionnelle est celle par d faut L annotation Stateless identifie cette classe comme tant un stateless bean qui se nomme CustomersSB Le bean impl mente l interface locale et dis tante L entity manager est li au contexte de persis tance petstorePU qui est d fini dans le fichier persistence xml Cette m thode permet au client de s authentifier l aide de son login et mot de passe On s assure de la validit du param tre login en lan ant une exception si besoin On recherche l entity bean Customer partir de son login gr ce une requ te JPQL 128 gt Local public interface CustomerLocal Customer authenticate String login String password Customer createCu
343. nt de d truire le stateful bean le conteneur appelle cette m thode Cette m thode ajoute un article dans le panier Si l article est d j dans le panier on en modifie la quantit 220 gt gt gt Local public interface ShoppingCartLocal void addItem Item item void removeItem Item item Float getTotal void emptyQ List lt CartItem gt getCartItems ShoppingCartBean La classe ShoppingCartBean impl mente l interface locale en ajoutant du code toutes les m thodes L tat du stateful bean le contenu du panier est stock dans une liste d objets CartItem Stateful name ShoppingCartSB public class ShoppingCartBean implements ShoppingCartLocal private List lt Cartltem gt cartItems PostConstruct public void initialize cartItems new ArrayList lt CartItem gt PreDestroy public void clear cartItems null public void addItem Item item boolean itemFound false for CartItem cartItem cartItems if cartItem getItem Q equalsCitem cartltem setQuantity cartltem getQuantityO 1 itemFound true if litemFound cartltems add new CartIltem item 1 public void removeItem Item item for CartItem cartItem cartItems if cartItem getItem equalsCitem cartitems remove cartItem return public Float getTotal if cartItems null cartItems isEmpty return Of Float total Of for
344. nt donc l interface Serializable Entity bean Product rendant persistantes ses donn es dans la table t_product Un produit a un identifiant unique un nom et une description Le produit a connaissance de sa cat gorie Cette association est charg e automatiquement Un produit poss de une liste d articles accessible de mani re diff r e La suppression d un produit entra ne la suppression en cascade de tous ses articles La liste est tri e par nom d articles 91 4 Objets persistants Les Cahiers du Programmeur Java EE 5 Avant d ins rer ou de mettre jour les donn es en base cette m thode est appel e par JPA Elle permet de valider les attributs de l entity bean et renvoie une exception en cas d incoh rence Entity bean Item rendant persistantes ses don n es dans la table t_item Un article a un identifiant unique un nom un prix unitaire et une image repr sentant l animal domestique L article a connaissance de son produit Cette association est charg e automatiquement Avant d ins rer ou de mettre jour les donn es en base cette m thode est appel e Elle permet de valider les attributs de l entity bean et renvoie une exception en cas d incoh rence 92 gt PrePersist PreUpdate private void validateData if name null equals name throw new ValidationException Invalid name if description null equals description
345. nt que la fin de ma liste d objets n est pas atteinte je la parcours Dans ce genre de cas il faut avoir recours aux scriptlets pour rajouter des if et des for Pour pal lier ce probl me il est possible d utiliser JSTL JSP Standard Tag Library ou biblioth que de balises standards pour JSP Le but avou de JSTL est l utilisation de balises XML afin d viter de placer du code Java dans les JSP C est donc un ensemble de balises regroup es dans quatre biblioth ques qui proposent des fonctionnalit s courantes comme e la biblioth que Core it ration condition gestion des URL e la biblioth que XML manipulation de donn es en provenance d un document XML transformation XSLT e la biblioth que 18n internationalisation des messages des dates des nombres e la biblioth que Database acc s aux bases de donn es d finition de sources de donn es ex cution de requ tes SQL Dans le cadre du d veloppement de l application YAPS Pet Store seule une partie de la biblioth que Core pr sente un int r t Si vous souhaitez approfondir cette vaste sp cification reportez vous aux r f rences sui vantes La biblioth que Core contient les balises pour afficher des messages ou des attributs d objets out pour conditionner une partie de la page if choose ou pour it rer foreach Voyons dans l exemple ci apr s com ment afficher une liste de produits en utilisant JSTL Exemple de JSP conte
346. nt utilis dans les architectures EJB 2 x En effet les entity beans tant repr sent s par des composants riches heavyweight rappelez vous les interfaces javax ejb EJBLocalHome ou javax ejb EJBLocalObject il est p nalisant de les manipuler en dehors du con teneur multiplication des appels distants Les objets DTO compos s uniquement d attributs et d accesseurs collectent des donn es de plu sieurs entity beans pour en obtenir une vision uniforme et permettre leur manipulation par des stateless beans D pourvus d acc s des res sources externes de logique m tier ou de persistance ces DTO sont charg s a partir des attributs des entity beans puis transmis au client pour enfin revenir au serveur Ainsi avec un seul appel distant on obtient un DTO qui contient toutes les informations souhait es Ce design pattern peut maintenant tre vu comme un anti pattern dans l architecture EJB 3 si utilis constamment Comme nous l avons vu un entity bean est maintenant une simple classe Java et peut tre facile ment manipul comme tel De plus comme nous allons le voir les entity beans peuvent tre d tach s de leur gestionnaire de persistance pour traverser les diff rentes couches de l application et tre vus comme de simples Pojo Bien entendu le design pattern DTO peut toujours tre utilis dans cer tains cas Il n est plus une pi ce indispensable de l architecture mais tout simplement une solution suppl
347. ntient l tat de sa variable cartItems Les attributs de l annotation javax ejb Stateful sont identiques ceux de javax ejb Stateless Code de l annotation javax ejb Stateful package javax ejb Target value TYPE Retention value RUNTIME public interface Stateful String name default String mappedName default String description default Le cycle de vie d un stateful bean La grande diff rence entre le cycle de vie d un stateful et d un stateless se r sume au fait qu il n y a pas de pool Pour les stateless beans le serveur d applications r cup re n importe quel EJB disponible dans un pool puis lui transmet une requ te traiter En effet les stateless n ayant pas d tat ils peuvent ex cuter un traitement indiff remment du client appelant Le stateful lui appartient un seul client ce qui rend utilisation du pool inutile Par contre lorsqu il est inutilis pendant un certain temps le con teneur le supprime de la m moire en le passivant il s rialise alors ses don n es Puis lorsqu un traitement doit tre effectu il le r active Suivant l impl mentation du conteneur le stateful bean a g n ralement une dur e de vie timeout param trable C est a dire que si le client ny acc de pas durant une certaine p riode PEJB est supprim du conteneur timeout P reDestroy Instandation du composant P ostC onstruct timeout P reP assivate
348. ntroller public class AccountController CEJB private CustomerLocal customerBean private String login private String password private String password2 private Customer customer new Customer private Address homeAddress new Address public String doSignIn customer customerBean authenticate login password homeAddress customer getHomeAddress return customer signed in public String doCreateCustomer customer customerBean createCustomer customer homeAddress homeAddress customer getHomeAddress return customer created public String doUpdateAccount customer customerBean updateCustomer customer homeAddress homeAddress customer getHomeAddress return account updated public String doSignOffQ FacesContext fc FacesContext getCurrentInstance HttpSession session HttpSession fc getExternalContext getSession false session invalidate return main Getters amp setters des attributs Les pages web La gestion du compte client peut se d cliner en deux parties connexion au site signon jsp et cr ation d un compte client createaccount jsp affichage des informations du client showaccount jsp et possibilit de les mettre jour updateaccount jsp 196 La plupart de ces actions sont accessibles par des liens hypertextes con tenus dans l en t te header jspf de chaque page La navigation Lors
349. nts m tier Les Cahiers du Programmeur Java EE 5 PERSISTANCE Synchronisation avec la base de donn es Lorsque vous appelez les m thodes persist merge ou remove l entity manager peut soit agir imm diatement sur la base de donn es soit diff rer cette action un moment qu il juge opportun Vous pouvez n anmoins forcer cette synchronisation en appelant la m thode flushQ PERSISTANCE Les langages de requ tes Les bases de donn es relationnelles utilisent le Standard Query Language SQL gt http www w3schools com sal default asp La version 2 x des entity beans utilise l EJBQL Enterprise Java Beans Query Language gt http java sun com j2ee tutorial 1_3 fcs doc EJBQL html Alors que JPA utilise le Java Persistence Query Language JPQL gt http java sun com javaee 5 docs tutorial doc QueryLanguage html 116 Mise a jour d un client dans un stateless bean public Customer updateCustomer Customer customer 4 Address homeAddress customer setHomeAddress homeAddress O em merge customer O return customer Supprimer un entity bean Un entity bean peut tre supprim gr ce la m thode EntityManager remove Cette derni re prend en param tre l entity bean et entra ne la suppression des donn es en base Une fois supprim l entity bean se d tache de l entity manager et ne peut plus tre manipul par ce dernier Le code suivant nous montre comment su
350. null 182 dynamique 182 statique 181 UIComponent 172 JSP Java Server Pages 36 43 160 162 168 289 balises 163 d claration 163 directive 163 expression 163 scriptlet 163 165 166 JSR Java Specification Requests 32 289 JSTL JSP Standard Tag Library 37 43 166 169 289 custom tags 167 JVM 66 87 L langage d expression 37 166 169 unifi 169 175 logging 61 132 327 Index Les Cahiers du Programmeur Java EE 5 M managed bean 178 AccountController 182 195 207 228 CatalogController 178 184 188 207 ShoppingCartController 222 231 248 252 253 255 MANIFEST MF 152 MDB Message driven bean 34 44 272 cycle de vie 274 OrderPrinterBean 272 MOM Message Oriented Middleware 32 262 MySQL 315 N NetBeans 49 o OMG Object Management Group 41 Open Source 48 168 186 283 P page JSP confirmorder jsp 224 252 createaccount jsp 196 footer jspf 186 187 header jspf 186 187 197 navigation jspf 186 187 orderconfirmed jsp 224 showaccount jsp 196 showcart jsp 224 showitem jsp 224 showitems jsp 190 224 showproducts jsp 190 signon jsp 196 updateaccount jsp 196 paquetages 99 133 207 221 255 286 pare feu 277 persistence xml 112 152 PetEx 2 4 44 63 126 236 251 255 petstore css 207 petstoreDB 58 62 petstorePool 57 62 petstorePU 112 154 PHP Hypertext Preprocessor 160 Pojo Plain Old Java Object 35 68 109 231 320 protocoles de messagerie 275 328 R RMI 43 rollbac
351. o gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt exec gt lt target gt Supprime la fabrique de connexions JMS 308 gt lt target name delete jms connection factory gt lt exec executable asadmin gt lt arg line delete jms resource gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line jms connection factory name gt lt exec gt lt target gt lt target name set loggers gt 4 Cr e les loggers pour les applications YAPS lt exec executable asadmin gt Pet STore BarkBank PetEx lt arg line set gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line server log service module log levels property com yaps petstore FINEST gt lt exec gt lt exec executable asadmin gt lt arg line set gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwo
352. o O FINEST LI com petex FINEST FT comyanspetsiom FINEST Ces loggers nous permettent d ajouter des traces dans notre code et de les visualiser dans le fichier de log qui se trouve dans le r pertoire GLASSFISH_HOME domains petstore logs On les cr e l aide de la commande suivante PETSTORE_HOME ant f admin xml set loggers Pour v rifier que les loggers ont bien t cr s utilisez la console d administration http localhost 8282 S lectionnez le menu Application Server puis cliquez sur les onglets Logging et Log Levels En bas de la page vous trouverez la section Additional Module Log Level Properties o vous verrez appara tre les noms des loggers figure 3 13 RETOUR D EXPERIENCE Les traces applicatives Depuis le JDK 1 4 il existe une API de logging paquetage java util logging Cette API consiste pister les traces des v ne ments survenus dans un syst me ou dans une application Un ou plu sieurs fichiers de log au format pr d fini sont g n r s en cours d ex cution et conservent des messages informant sur la date et l heure de l v nement la nature de ce dernier ainsi que sa gravit par un code ou une description s mantique et ventuellement d autres informations utilisateur classe etc Pour logger un message il faut utiliser les m thodes de l objet java util logging Logger Largument Level d finit le niveau de cri ticit du message pass en param tre Si ce niveau est g
353. oi d e mails sont d velopp s au chapitre 10 JMS message driven bean JavaMail Remerciements Cette pop e n aurait pas t possible sans l aide et les conseils de Jean Louis Dewez Je tiens 4 le remercier pour son coute et les multiples dis cussions constructives que nous avons eues XI Avant propos Les Cahiers du Programmeur Java EE 5 XII Le graphisme de l application web est l oeuvre de David Dewalle qui a aussi d velopp la partie Swing Un grand merci Alexis Midon pour m avoir aid dans les d veloppements c t serveur Je remercie galement mon quipe de relecteurs Zouheir Cadi Alexis Midon et Matthieu Riou pour m avoir permis d am liorer la qualit de ce livre gr ce leur expertise et leurs critiques Je tiens remercier la soci t de service Adex M2i de m avoir permis d enrichir mes comp tences dans les domaines technologiques Java EE Je voudrais plus particuli rement saluer Alain Stern et Christian Darneau Merci l quipe des ditions Eyrolles Muriel pour sa patience et ses encouragements Hind Eliza Sophie et Ga l pour le sprint final de relecture et de mise en pages Merci la communaut Java et plus particuli rement la communaut GlassFish qui ma t d un tr s grand secours Je tiens aussi remercier les diteurs JetBrains Intellij Idea et Visual Paradigm International pour m avoir offert des licences de leurs excellents logiciels Un grand m
354. ollections acceptent les doublons d autres non certaines sont ordonn es d autres pas Les java util Set ensembles sont un groupe d l ments uniques Les java util List listes sont une suite d l ments ordonn s accessi bles par leur rang dans la liste Les listes ne garantissent pas l unicit des l ments Les java util Map m morisent une collection de couples cl valeur Les cl s sont uniques mais la m me valeur peut tre associ e plusieurs cl s Une cat gorie poss de une liste de produits Entity Table name t_category public class Category Cr OneToMany mappedBy category private List lt Product gt products Cea Le produit a connaissance de sa cat gorie Entity Table name t_product public class Product Casa ManyToOne JoinColumn name category_fk private Category category Gas Dans une relation bidirectionnelle JPA peut utiliser deux modes de jointure le syst me de cl trang re ou la table de jointure Si aucune annotation n est utilis e la table de jointure est le mode par d faut On se retrouve alors avec une table t_category_product par exemple contenant deux colonnes permettant de stocker la relation entre cat gorie et produit Si ce mode par d faut mest pas satisfaisant il faut utiliser l attribut mappedBy de l annotation OneToMany Dans notre exemple le fait que l entity bean Category d clare OneToMany mappedBy catego
355. omerBean implements CustomerRemote CustomerLocal PersistenceContext private EntityManager em public Customer createCustomer Customer customer Address homeAddress customer setHomeAddress homeAddress em persist customer return customer Autres m thodes m tier Comme vous le voyez ci dessus pour distinguer un Pojo d un EJB state less il faut utiliser l annotation javax ejb Stateless Dans cet exemple la classe impl mente les deux interfaces et doit donc d finir la m thode createCustomer Cette annotation s applique a une classe Sp cifie la liste des interfaces locales sous forme de tableau de classes Cet attribut est utilis si la classe du bean impl mente plus d une interface locale 109 5 Traitements m tier Les Cahiers du Programmeur Java EE 5 Cette annotation s applique une classe Nom de l EJB Par d faut le nom est celui de la classe Cet attribut repr sente le nom donn l EJB l int rieur du conteneur Il est sp cifique cha que serveur d applications et peut donc ne pas tre portable Description du stateless session bean EJB Un nom JNDI Nous d velopperons l utilisation et le fonctionne ment de JNDI au chapitre suivant Ex cution de l application Je tiens juste vous faire remar quer que pour modifier le nom JNDI par d faut de l EJB dans GlassFish il faut utiliser l attribut mappedName de l annotation S
356. on Hello findByPrimaryKey String cle throws RemoteException FinderException Linterface m tier permet de d finir les services que propose le compo sant Elle d finit les accesseurs des attributs du composant ainsi que d ventuelles m thodes m tiers Dans notre cas sont d finis les acces seurs des attributs cl et valeur Notez que l invocation de ces m thodes peut chouer pour des raisons li es au r seau les m thodes lancent des RemoteException nous manions par cons quent ce que l on appelle un composant distant Interface m tier de l entity bean public interface Hello extends EJBObject String getCle Q throws RemoteException String getValeur throws RemoteException void setValeur String valeur throws RemoteException La classe du bean nimpl mente pas les interfaces que nous venons de d finir mais plut t interface EntityBean Notez qu un CMP ne pos s de pas d attributs et que les accesseurs sont d clar s asbtract La signature de la m thode ejbCreate doit tre la m me que ejbPostCreate et correspond la m thode create d clar e dans l interface de fabrique Les m thodes permettant de g rer le cycle de vie du composant sont vides Classe d impl mentation de l entity bean public abstract class HelloBean implements EntityBean public abstract String getCle throws RemoteException public abstract void setCle String cle throws 2 RemoteException
357. on de commande contient des reptiles Pour ce faire l application coutera sur une file d attente JMS et sera alert e a chaque fois qu un reptile est vendu 43 2 Architecture de l application Les Cahiers du Programmeur Java EE 5 4 CRUD CRUD est un terme commun ment utilis pour l acc s aux bases de donn es Il signifie en anglais Create Retrieve Update and Delete c est dire cr ation lecture mise jour et suppression de donn es 2 Les bases de donn es objets Les bases de donn es objets comme leur nom l indique organisent les donn es sous forme d objets et non sous forme de tables lignes et colonnes Bien que certains grands acteurs du monde relationnel aient des impl mentations objets les bases objets n ont jamais vraiment perc sur le march 4 JAX WS JAX WS est la nouvelle appellation de JAX RPC Java API for XML Based RPC qui permet de d velopper tr s simplement des services web 44 Pour fournir ces services elle s appuie le cas ch ant sur les donn es du syst me accessibles au travers des services de la couche inf rieure c est dire la couche de donn es En retour elle renvoie la couche pr senta tion les r sultats qu elle a calcul s En pratique on trouve au niveau de la couche m tier e Des entity beans dont la persistance est assur e par la couche de mapping e Des stateless beans qui proposent des m thodes pour manipuler
358. on du JDK dans une fen tre de commande RETOUR D EXPERIENCE Des espaces dans les chemins Java n appr cie gu re que vous installiez des outils ou des librairies dans des r pertoires contenant des espaces par exemple c Program Files ou d Mes Outils Il faut alors rajouter des guillemets sur les chemins d acc s par exemple c Program Files o d Mes Outils Les applications Java ont fr quemment besoin de librairies externes qui doi vent tre rajout es dans la variable Classpath On se retrouve alors avec des erreurs de type ClassNotFoundException car les chemins d acc s aux librairies contiennent des espaces et que l interpr teur Java n arrive pas retrouver les classes n cessaires Pour viter ce genre de probl mes et devoir rajouter des guillemets un peu partout vous pouvez installer vos outils et librairies dans des r pertoires ne contenant pas d espace par exemple c Tools ou d MesOuti Is 51 3 Outils et installation Les Cahiers du Programmeur Java EE 5 T L CHARGER Ant 1 7 http ant apache org bindownload cgi REMARQUE Ant 1 6 5 Les scripts ont t test s et fonctionnent correcte ment pour les versions 1 7 et 1 6 5 de Ant Figure 3 4 Affichage de la version de Ant dans une fen tre de commande TELECHARGER YAPS Pet Store T l chargez le code source de l application YAPS Pet Store la racine de l archive vous trouverez les deux fichiers admin xm
359. on entre les pages de l application web l aide de r gles de navigation navigation rule d crites dans le fichier faces config xm1 JSF va d terminer en fonction de la page courante quelle est la page suivante Une r gle de navigation s crit de cette mani re Exemple de r gle de navigation d finie dans le faces config xml lt navigation rule gt lt from view id gt showaccount jsp lt from view id gt lt navigation case gt lt from outcome gt updateaccount lt from outcome gt lt to view id gt updateaccount jsp lt to view id gt lt navigation case gt lt navigation rule gt Cette r gle se lit de la fagon suivante si je suis sur la page showaccount jsp et que la cl de navigation est updateaccount alors je me rends la page updateaccount jsp Il est aussi possible d utiliser des expressions r guli res dans la d finition des r gles de navi gation pour inclure un plus grand nombre de cas en une seule r gle L exemple ci apr s d finit une r gle qui permet partir de n importe quelle page d aller vers main jsp si la cl de navigation est main Exemple de r gle de navigation avec expression r guli re lt navigation rule gt lt from view id gt lt from view id gt lt navigation case gt lt from outcome gt main lt from outcome gt lt to view id gt main jsp lt to view id gt lt navigation case gt lt navigation rule gt Deux composants JSF d
360. on peut les externaliser dans un fichier nomm jndi properties Dans notre cas nous allons d ployer l application sur le serveur GlassFish qui se trouve sur le m me serveur phy sique localhost que l interface cliente Les para m tres par d faut du service JNDI n ont donc pas besoin d tre modifi s Nous utiliserons le fichier jndi properties inclus dans la distribution GlassFish EJB cast ou narrow des interfaces Pour ceux d entre vous habitu s aux EJB 2 x remarquez qu en EJB 3 le r sultat du lookup peut tre directement cast en interface remote sans avoir a utiliser la m thode PortableRemoteObject narrow 140 permet un client de localiser un objet ou une ressource distribu e LAPI JNDI est accessible partir du paquetage javax naming Dans l exemple pr c dent pour pouvoir afficher une cat gorie l applica tion Swing doit avant tout localiser l interface CatalogRemote partir d un contexte initial Dans ce type de syst me hi rarchique un contexte peut tre vu comme un n ud au sein d un arbre Le code Context initalContext new InitialContext permet d obtenir la racine de cet arbre Ensuite charge l application de s y d placer pour obtenir l objet qu elle recherche Par exemple le nom ejb stateless Catalog signifie qu partir de la racine il existe un contexte appel ejb puis un sous contexte stateless dans lequel on trouve un objet nomm Catalog Cependant po
361. onc optionnel partir des annotations JPA g n re une con trainte d int grit r f rentielle entre la colonne address_fk de la table t_customer et la cl primaire de la table t_address 80 gt gt OneToOne JoinColumn name address_fk nullable true private Address homeAddress es DDL d une relation 0 1 entre t_customer et t_ address CREATE TABLE T_CUSTOMER ID BIGINT NOT NULL ADDRESS_FK BIGINT PRIMARY KEY ID ALTER TABLE T_ CUSTOMER ADD CONSTRAINT T_CUSTOMER_ADDRESS_FK FOREIGN KEY CADDRESS_FK REFERENCES T_ADDRESS ID Relation bidirectionnelle 1 n Une relation 1 n signifie qu un objet fait r f rence un ensemble d autres objets cardinalit n Dans l application YAPS Pet Store cette notion est d crite dans le catalogue par exemple o une cat gorie con tient plusieurs produits De plus elle est bidirectionnelle puisque le pro duit a connaissance de la cat gorie 4 laquelle il appartient Cette information de cardinalit en Java est d crite par les structures du paque tage java util Collection List Map et Set JPA utilise les annotations OneToMany et ManyToOne Les collections en Java Les collections paquetage java util proposent une s rie de classes d interfaces et d impl mentations pour g rer les structures de donn es listes ensembles Chaque impl mentation utilise une strat gie avec des avantages et des inconv nients certaines c
362. onfig xml Cette valeur peut aussi tre gale a nul Ce cas provoque le r affichage de la page courante 182 rechercher une r gle applicable d finie dans le fichier faces config xm1 et d terminer la page suivante afficher Navigation dynamique Dans le cas de la navigation dynamique la cl de navigation est inconnue au moment o la page est crite C est donc le managed bean qui va retourner cette cl via l appel de l une de ses m thodes Dans l exemple suivant la valeur de l action n est pas connue On utilise le lan gage dexpression pour appeler la m thode doUpdateAccount du managed bean account Exemple de navigation dynamique lt h commandLink action account doUpdateAccount gt lt h outputText value Edit Your Account Information gt lt h commandLink gt La valeur de retour de l action doit tre de type String et doit tre r f renc e par une r gle de navigation Le managed bean calcule la cl de navigation public class AccountController public String doUpdateAccount Th Gers return success else return failure La valeur de la cl de navigation varie en fonction du r sultat de la m thode doUpdateAccount ici success ou failure La navigation qui en r sulte est donc variable dynamique et l utilisateur sera redirig soit vers une page soit vers une autre Bien s r il faudra d clarer ces nouvelles r gles dans le fichier faces config xm1 Co
363. opic Pour v rifier que toutes ces ressources ont bien t cr es tapez les com mandes suivantes XPETSTORE_HOME ant f admin xml list jms resources DEK Ddier Edition Affichage Historique Marque pages utils 2 G 4 Mw antonio goncalves 22 e gt C Home Version User user name Hoilc uscr name Server 30rver name sun Java System Application Server Enterprise Edition 9 1 Admin Console Mozilla Firefox B http ocalhost 8282 Logout telp Sun Java System Application Server Admin Console FE Common Tasks Common Tasks gt Resources gt JMS Resources gt Deslinalion Resources gt jmsiopiciorder A Aopicotion Server Edit JMS Destination Resource Save v M Applications diing a Java MS destination resource also modifies the associsled admin object resource The Hame propesty of a destination E Enterprise Applications BB wen Appacatone D FIA Modules Connector Modules D Litecycie Moduise JNDI Name ims topiclorder Resocurce Type liavax ms Topic ISA GB App Cent Modules Description Web Services Status U Enabled X Integrations i JDI Deployments asso Pr oper tem a ay ey gt E sbi componente gt E JA Libeares Custom MBcans typ Resources gt a Jon Y g JMS Resources v connection Factories gf ims petstoreConnectionf actory v D Veetnaton Resources e Value Name Name OrderTopic
364. ord t l chargez le fichier compress correspondant votre plate forme e Windows glassfish installer v2 b30 winnt jar e Linux glassfish installer v2 b30 linux jar e Solaris Sparc glassfish installer v2 b30 jar D compressez le fichier en tapant la commande suivante pour Windows java Xmx256m jar glassfish installer v2 b30 jar Une fen tre s affiche contenant la licence d utilisation du produit Vous devez faire d filer l cran et cliquer sur Accept License Agreement COMMON DEVELOPMENT AND DISTRIBUTION LICENSE CDDL Version 1 0 1 Definitions 1 1 Contributor means each individual or entity that creates or contributes to the creation of Modifications 1 2 Contributor Version means the combination of the Original So ftware prior Modifications used by a Contributor if any and t he Modifications made by that particular Contributor 1 3 Covered Software means a the Original Software or b Mod ifications or c the combination of files containing Original 53 oftware with files containing Modifications in each case includi ng portions thereof 1 4 Executable means the Covered Software in any form other than Source Code 1 5 Initial Developer means the individual or entity that first makes Original Software available under this License RETOUR D EXPERIENCE Chemin d installation Figure 3 5 Affichage de la licence GlassFish La d compression s effectue automatiquement dans le
365. ordonn es du client s affichent en lecture seule Cette fois la page d accueil affiche le nom et pr nom du client ainsi que trois liens lui permettant de se d connecter Sign Off de consulter ses informations Account et de visualiser le contenu de son panier lectro nique Caddie Cart Consulter et modifier son compte R sum Permet un client de consulter et de mettre jour ses informations per sonnelles dans le syst me Acteurs Client Pr conditions Le client doit tre connect au syst me cas d utilisation Se connecter et se d connecter Description Ce cas d utilisation diff re du cas G rer les clients dans le sens o le client ne peut consulter et modifier que ses donn es personnelles Celles ci sont identiques celles du cas d utilisation G rer les clients YAPS PetStore Customer Mozilla Firefox Fichier Edition Attichage Aler Marque pages Outils ns antonio goncalves SSA YAPS Pet Store Yet Another Pet Store Pets Your Account Information Birds p Cats Personal information Dogs Firstname James Fish Lastname Ransson Reptiles Email jr mymail com Telephone 02154 254 147 Date of birth dd MM yyyy 24 12 1968 Age 37 account Cart Sian off Streeti Ritherdon Road Street City New York State Zipcode 4568 Country USA Edit Your Account Information Maquettes Une fois connect le client peut consul
366. ore UML 2 UML Unified Modeling Language traduisez langage de mod lisation unifi est n de la fusion des trois m thodes qui ont le plus influenc la mod lisation objet au milieu des ann es 1990 OMT Booch et OOSE Issu d un travail d experts reconnus James Rumbaugh Grady Booch et Ivar Jacobson UML est le r sultat d un large consensus qui est vite devenu un standard incontournable Fin 1997 ce langage est devenu une norme OMG Object Management Group UML est un langage de mod lisation objet et non une d marche d ana lyse Il repr sente des concepts abstraits de mani re graphique UML est donc un langage universel et visuel qui permet d exprimer et d laborer des mod les objet ind pendamment de tout langage de programmation Comme UML n impose pas de m thodes de travail particuli res il peut tre int gr nimporte quel processus de d veloppement logiciel de mani re transparente UML 2 introduit quatre nouveaux diagrammes paquetages structures composites global d interaction et de temps qui viennent enrichir les neufs initiaux classes objets composants d ploiement cas d utilisa tion tats transitions activit s s quence et communication La plupart de ces diagrammes seront utilis s tout au long des chapitres GoF Le Gang of For d signe les quatre auteurs du livre des Design Pattern c est dire Erich Gamma Richard Helm Ralph Johnson et John Vlissides 4
367. ore utilisation du framework Spring openMDxX PetStore plate forme Open Source MDA 40 ques code Java design pattern architecture pour d velopper une application JEE A Welcome to the BlucPrints Petstore Microsoft Internet Explorer DOR He gdt Yew Favontes lock Help ty Qw X 9 Peat grs Qi O GLS Address Iitp fflucallent ANAN store finir screen Ej 64 Java Pet Store ie J2EE BluePrints Sample Application Account Cart Sign in S Ce The Java Pet Store Demo is a fictional sample application trom the Java HluePnnts tor the Enterprise For more information wiat the Java BluePrints fur the Enterprise Web site al nee ava sun con bluspeinte anterpriv Java Software Sun h 2001 Sun Microsystems Inc All rights reserved Use is subject to license terms 2 Local intranet Le Java Pet Store est aussit t devenu un standard de facto puisque les constructeurs de serveur d applications lont utilis pour d montrer la compatibilit de leur produit avec les sp cifications JEE En effet Oracle fut le premier l utiliser pour ses tests de mont e en charge Bien que Java Pet Store ait t d velopp des fins ducatives Oracle d clara que cette application fonctionnait deux fois plus rapidement sur son ser veur d applications que sur ceux de BEA ou IBM La communaut senflamma et tous les vendeurs commenc rent utiliser le Java Pet Store pour d montrer leurs me
368. ore poss de des traitements qui peuvent tre longs elle doit donc avoir recours au mode asynchrone pour ne pas p naliser ses temps de r ponse Lorsqu un client ach te des animaux et qu il confirme cet achat en ligne un e mail r capitulant ses achats doit lui tre envoy et le bon de commande doit tre imprim pour tre archiv par la soci t Ces deux traitements peuvent tre extr mement longs si l imprimante est teinte ou le serveur de messagerie hors service par exemple Ils seront donc trait s de mani re asynchrone par des mes sage driven beans Pour des raisons administratives les employ s doivent tre alert s des commandes contenant des reptiles Leur application Swing peut tre arr t e ou les employ s peuvent ne pas tre connect s Ils doivent donc pouvoir recevoir ces alertes une fois leur poste de travail Nous utilise rons un listener JMS sur l application Swing qui s lectionnera les mes sages contenant une propri t particuli re l informant que la commande contient des reptiles Tous ces composants seront l coute du m me Topic Lors de la cr a tion d un bon de commande le stateless session bean enverra un message contenant le bon de commande dans le Topic jms topic order l autre bout deux MDB s occuperont d imprimer le bon de commande et d envoyer un e mail alors que le client Swing affichera une alerte pour les commandes comportant des reptiles OrderB
369. ormations gt http blogs sun com JPQL01 entry native_query_in_java_persistence 117 5 Traitements m tier Les Cahiers du Programmeur Java EE 5 La requ te retourne une liste d objets La requ te retourne un objet unique Il existe plusieurs m thodes pour passer des param tres la requ te APPROFONDIR JPQL JPQL est d crit dans la sp cification de persistance EJB 3 et discut sur le site de Sun gt http jcp org en jsr detail id 220 gt http wiki java net bin view Javapedia JPQL 118 Extrait de l interface javax persistence Query package javax persistence public interface Query List getResultListQ Object getSingleResultO Query setParameter String name Object value Query setParameter String name Date date TemporalType temporalType Query setParameter String name Calendar calendar TemporalType temporalType Query setParameter int i Object value Query setParameter int i Date date TemporalType temporalType Query setParameter int i Calendar calendar TemporalType temporalType JPQL est un langage extr mement riche Il permet de faire toutes sortes de requ tes sur un mod le objet aussi compliqu soit il association entre classes h ritage classe abstraite interface On peut ainsi faire des jointures entre entity beans LEFT JOIN JOIN FETCH ou effectuer des sous requ tes Comme en SQL il existe des op rateurs pour filtre
370. orquepages Outils ine antonio goncalves YAPS Pet Store Yet Another Pet Store Pets Products for category Dogs Birds uillidoo Cats Friendly dog from England chihuahua Dogs Great companion dog Fish Dalmations Reptiles Great dog for a fire station Golden Retriever Great family dog Labrador Remover Great hunting dog Poodle Cute dog from France Figure 1 5 The YAPS Pet Store Demo is 2 fictional sampi a Affichage de tous les produits ne egg de la cat gorie Dogs YAPS PetStore Items Mozilla Firefox Me antonio goncalves Search Yet Another Pet Store Items for product Bulldog Birds wbotiess female tuopy 22 0 Cats Spotless Male Puppy 220 Dogs Fish Reptiles Figure 1 6 The YAPS Pet Store Demo is 3 3 fictional sampi ton Affichage de tous les articles ee iy LA neey P du produit Bulldog Jovi Enfin pour conna tre le d tail d un article il suffit de cliquer sur son nom pour arriver sur la page de description Le nom et le prix de l article sont affich s ainsi que l image repr sentant l animal YAPS PetStore Item Mozilla Firefox Fichier Edition Altichage Alers Marquepagcs Outils YAPS Pet Store Yet Another Pet Store Birds Cats Dogs Fish Reptiles The YAPS Pet Store Demo is 2 fictional sample application Rechercher un article R sum COR Me antonio goncalves Search Spotless Female Puppy Unit Cust 22 0 Ia T
371. otes de type 3 utilisent un autre pilote JDBC interm diaire pour acc der la base de donn es e Les pilotes de type 4 sont crits enti rement en Java Ils sont donc portables 29 2 Architecture de l application Les Cahiers du Programmeur Java EE 5 4 Les balises Une balise est une portion de texte encadr par les caract res lt et gt APPROFONDIR XML et XSD Antoine Lonjon Jean Jacques Thomasson Libero Maesano Mod lisation XML Eyrolles 2006 Mitch Amiano Conrad D Cruz Michael D Thomas Kay Ethier XML Wrox 2006 gt http www w3 org XML gt http www w3 org XML Schema ApPROFONDIR HTML XHTML Jean Engels XHTML et CSS Eyrolles 2006 gt http www w3 org MarkUp gt http www w3 org TR xhtml1 30 XML et XSD SGML Standard Generalized Markup Language ou langage normalis de balisage g n ralis adopt comme standard en 1986 a t la pre mi re tentative pour cr er des documents lectroniques Lid e princi pale tait de s parer le contenu d un document de sa forme SGML a t une innovation mais il tait si complexe que sa manipulation s est trouv e restreinte aux sp cialistes XML eXtensible Markup Language ou langage extensible de balisage issu de SGML a t mis au point par le World Wide Web Consortium W3C en 1996 Contrairement HTML qui pr sente un jeu limit de balises orient es pr sentation titre paragraphe
372. ou Array par exemple ne peut tre remplie que par un type de classe donn Il n est donc plus n cessaire d effectuer le contr le du type au moment de l ex cution Exemple d un vecteur g n rique Sans g n rique Vector nombres new Vector for Cint i 0 i lt nombres size i Integer nombre Integer nombres elementAt i Avec g n rique Vector lt Integer gt nombres new Vector lt Integer gt for Cint i 0 i lt nombres size i Integer nombre nombres elementAt i Comme on peut le constater dans le fragment de code ci dessus le par cours des l ments du vecteur pr sente une meilleure lisibilit ainsi qu une plus grande robustesse Les types num r s Java 5 0 introduit le nouveau mot cl enum utilisable comme le mot cl class Sa particularit est qu il repr sente un type num r c est dire un type qui n accepte qu un ensemble fini d l ments Il peut donc tre utilis pour d finir un ensemble de constantes Exemple d une num ration public enum Saisons PRINTEMPS ETE AUTOMNE HIVER Swing La plupart des applications destin es aux utilisateurs comportent des l ments graphiques de telle sorte qu elles soient plus conviviales et ergonomiques La plate forme Java dispose des API AWT et Swing permettant de construire des interfaces homme machine IHM sophis tiqu es en client lourd Pet Store File Customer Ca
373. p www exadel com tutorial jsf jsftags guide html Importe les balises JSF l aide de la directive taglib Les balises JSF doivent tre l int rieur d un f view On peut m ler balises HTML h2 et balises JSF Affiche les messages d erreurs en cas d excep tions It re la liste des produits D clare une colonne Cr e un lien hypertexte h commandLink sur le nom du produit product name Lorsqu on clique sur le lien un param tre f param est pass l action doFindItems 173 7 Interface web Les Cahiers du Programmeur Java EE 5 Balise HTML de retour chariot Affiche la description du produit Wes Extensions des pages JSF Les pages contenant des balises JSF sont des pages JSP Elles poss dent donc l extension j sp HTML Un langage de balises Le langage HTML est tr s riche et comporte beau coup de balises Dans l application nous n en utili serons qu une infime partie comme les balises de saut de ligne br de police de caract res h1 h2 strong ou de structure body head html Vous pouvez retrouver la liste exhaustive l adresse suivante gt http Awww w3schools com tags default asp Figure 7 3 Page affichant les produits d une cat gorie 174 lt br gt lt h outputText value product description gt O lt h column gt lt h dataTable gt lt h form gt lt f view gt Pour utili
374. pages JSP via le langage d expression exemple catalog keyword Cette m thode retourne les produits d une cat gorie 188 gt La visualisation du catalogue La visualisation du catalogue et la recherche d articles sont d taill es dans les cas d utilisation Visualiser les articles du catalogue et Rechercher un article Un internaute peut visualiser le contenu du catalogue des animaux domestiques Il peut aussi utiliser le m canisme de recherche qui lui permet de saisir une cha ne de caract res et lui retourne une liste d articles appropri s Le managed bean CatalogController Le managed bean CatalogController permet de faire toutes les actions concernant le catalogue Il fait le lien entre les pages JSP et PEJB State less CatalogBean qui manipule les donn es de l application via les entity beans Category Product et Item Le diagramme de classes ci apr s montre ces relations jsf catalog m yaps petstore com yaps petstore stateless lt lt control gt gt CatalogController keyword String category Category produd Product item Item Vv products List lt Product gt tems List lt item gt doFindProducts String doFinditems String doFinditem String doSearch String catalog com yaps petstore entit y lt lt entity gt gt Category lt lt entity gt gt lt lt entity gt gt Product Item E
375. par leur m tier comme par la transmission de leur savoir viennent renforcer nos quipes p dagogiques et contribuer ainsi la pertinence de notre offre C est le cas d Antonio qui est la fois architecte de grands projets Java EE et enseignant au Cnam pour la plus grande satisfaction de ses coll gues et surtout de ses auditeurs C est en grande partie dans ce contexte que s inscrit le livre que vous avez entre les mains L id e en est n e de plusieurs ann es de contributions la formation Java EE au Cnam L orientation pragmatique de l ouvrage est issue de la bonne connaissance de la demande de nos auditeurs Le pari de ce livre est de vous donner le moyen de p n trer chacune de ces nouvelles technologies par la pratique et dans le cadre structurant d un projet connu de tous pour tre le projet de r f rence en la mati re J esp re que ce livre aura l audience qu il m rite aupr s de tous ceux qui ne se contentent pas de simples g n ralit s En tout cas je suis s r qu il aura aupr s de nos tudiants Paris et dans son r seau national l impact p dagogique dont nous avons besoin pour relever ce d fi Professeur Louis Dewez D partement STIC Cnam Avant propos JAVA JEE 5 La version finale de la sp cification Java EE 5 date de juillet 2006 Retrouvez en annexe A la liste exhaustive des sp cifications qui constituent Java EE 5 Java Enterprise Edition est apparue 4 la fin des ann e
376. peuvent maintenant acheter des animaux en ligne Notre appli cation a donc besoin de communiquer avec des syst mes externes pour v rifier la validit des cartes bancaires ainsi que pour avertir le transporteur de nouvelles livraisons Ces traitements B2B se font via l change de don n es au format XML Ce chapitre nous a pr sent les services web et les diff rentes API sous jacentes cette technologie Java EE 5 et la g n ra tion d artefacts simplifient grandement le d veloppement des web services Un message s affiche indiquant que le num ro est invalide 259 9 Echanges B2B chapitre YAPS PetStore Items Mozilla Firefox MSIE chier dition Affichage Listorique Marque pages Qutis YAPS Pet Store Account Cart Yet Another Pet Store Birds Your order id is 103 Cats Amazon Parrot Dogs Female Adult Chihuahua Fish R Female Adult Reptiles Rattlesnake fa antoniv goncalves The Y fictional M2 INA EDG Derby B Traitements asynchrones Lorsque le bon de commande est cr le syst me doit l imprimer et envoyer un e mail au client lui confirmant ses achats Ces traitements pouvant tre longs ils sont effectu s de mani re asynchrone via un syst me d changes de messages Ce chapitre nous pr sente les technologies JMS MDB ainsi que API JavaMail Se eS PS SOMMAIRE Traitements asynchrones Envoi d un e mail de confirmation Impression du bon de com
377. pingCartBean empty catch Exception e addMessage e return order confirmed private void validateCreditCard CreditCard creditCard Validation validation val idationService getValidationPortQ String statusCard validation val idateCard creditCard getCreditCardNumber creditCard getCreditCardTypeQ creditCard getCreditCardExpDate if OK equals statusCard throw new CreditCardException Credit Card is invalid statusCard Si la carte bancaire est valide l application appelle PEJB Stateless OrderBean pour cr er un bon de commande Une fois la cr ation effec tu e EJB invoque le service web du transporteur pour l avertir des livraisons qu il doit faire ss Figure 9 7 deliveritems S A Diagramme de s quences pour la cr ation d un bon de commande On annote par WebServiceRef l interface g n r e par ws import Le syst me d injection se charge d instancier l objet Cette m thode est appel e lorsque le client sai sit ses donn es bancaires et soumet le formu laire Appel d une m thode priv e pour invoquer le service web S il n y a pas d exceptions on invoque le state less bean pour cr er le bon de commande En cas d exceptions on affiche un message sur la page web M thode priv e appelant le service web Appel du service web en lui passant les param tres Si les donn es bancaires sont
378. plication le Java Development Kit commun ment appel JDK est le kit de d ve loppement propos gratuitement par Sun Il comprend plusieurs outils parmi lesquels e javac le compilateur Java e java un interpr teur d applications machine virtuelle javadoc un g n rateur de documentation e jar un outil de compression de classes Java Le JDK nous permettra de compiler et d ex cuter l application ainsi que d autres outils tels que Ant Ant Ant est au monde Java ce que Make est au monde du langage C un outil incontournable pour automatiser des traitements r p titifs en mode batch suppression de fichiers compilation compression de fichiers etc Il est simple d utilisation b ti sur des technologies ouvertes Java et XML extensible et support par de nombreux logiciels Cet outil est aujourd hui pl biscit par l ensemble des acteurs majeurs de la commu naut Java et commun ment employ dans la majorit des r alisations d entreprise Ant sera utilis pour automatiser la compilation le packaging et le d ploiement de l application Il nous permettra aussi d ins rer physique ment des donn es en base et d administrer le serveur d applications GlassFish GlassFish est un serveur d applications certifi Java EE 5 Son d velop pement a t initi lorsque Sun a ouvert le code de son serveur d applica tions pour le licencier en Open Source Il utilise le moteur de persistance
379. pplications auront des arborescences diff rentes et seront d ploy es dans des fichiers ear ou war s par s Les r pertoires Vous pourrez utiliser PIDE de votre choix pour d velopper ces applica tions Cependant afin utiliser les t ches Ant il faudra respecter l arbo rescence des diff rents r pertoires La racine se trouve dans le r pertoire PETSTORE_HOME Tableau 3 3 R pertoires des applications l ment Description Le code de l application BarkBank se trouve dans le r pertoire PETSTORE_HOME BarkBank Vous y medias trouverez les sous r pertoires suivants ia En build contient le fichier war d ployer dans GlassFish ije er classes r pertoire contenant le bytecode des classes de l application th Lg resources generated classes Java g n r es pour les services web resources pages web et images du site de BarkBank s E src E3 com barkbank validator src ce r pertoire contient les fichiers source Java de l application de validation des cartes bancaires Les 4 CO WEB INF classes sont sous le paquetage com barkbank validator WEB INF les fichiers de configuration de l application web Le code de l application PetEx se trouve dans le r pertoire XPETSTORE_HOME PetEx Vous y trouverez ex F les sous r pertoires suivants Ca buile Hr mM com petex transport LG WEB INF build contient le fichier war d ployer dans GlassFish classes r pe
380. pprimer un objet apr s lavoir trouv Exemple de suppression d un objet apr s recherche customer em find Customer class 1234 em remove customer Revenons notre architecture distribu e Lentity bean supprimer se trouve dans la couche de pr sentation Le client appelle le stateless bean en passant l entity en param tre La suppression ne peut alors s effectuer qu en deux tapes rattacher l objet l entity manager via la m thode merge puis le supprimer en appelant la m thode remove Ce m canisme est illustr dans la m thode de l EJB ci dessous Suppression d un client dans un stateless bean public void deleteCustomer Customer customer em remove em merge customer 1 Langage de requ tes La possibilit d effectuer des requ tes est inh rente aux bases de donn es relationnelles Cela permet d obtenir des informations r pondant cer tains crit res n cessaires au syst me SQL ou Standard Query Language est le langage standard d interrogation de base de donn es Les r sultats obtenus sont sous forme de table c est dire de lignes et de colonnes JPA est une API de mapping objet relationnel qui g re des objets et non des lignes et des colonnes Pour conserver cette possibilit d effectuer des requ tes sur les entity beans JPA utilise son propre langage JPQL JPQL JPQL ou Java Persistence Query Language est un langage de requ tes d claratif s inspirant de
381. pr c demment dans MVC les servlets sont utilis es pour intercepter une requ te effectuer un traitement puis d l guer l affichage une JSP Les servlets s occupent donc de r cup rer les informations de la requ te d effectuer des traitements appeler des EJB Stateless par exemple mais aussi de naviguer entre pages Dans ce mod le on a donc une relation 1 1 entre une servlet et une JSP ce qui pour cr er un site complet multiplie consid rablement le nombre de servlets De plus les r gles de navigation sont cod es en dur ce qui rend les modifications compliqu es faces config xml Requ te Bean manag Figure 7 4 Architecture MVC de JSF 176 gms E Entity bean balises JSF Pour rendre le d veloppement d une application web plus modulaire et plus souple JSF d cor le tous ces l ments traitement pr sentation navigation et enrichit le pattern MVC Le mod le est toujours repr sent par les entity beans Par contre il ny a qu un contr leur unique le FacesServlet qui intercepte les requ tes HTTP une navigation configurable par fichier XML des traitements d l gu s des managed beans qui manipulent le mod le et un rendu graphique utilisant les balises JSF La FacesServlet Le contr leur JSF est le point d entr e de toutes les requ tes HTTP Il est constitu d une servlet unique nomm e FacesServlet La FacesServlet re oit les req
382. programme sur un ser veur et de renvoyer le r sultat a un navigateur Internet PHP Hypertext Preprocessor est un langage de script HTML inspir des langages C Java et Perl ASP est un langage propri taire de Microsoft pour les d veloppements web 4 HTTP HyperText Transfer Protocol est un protocole de communication pour transf rer les documents HTML image etc entre le serveur HTTP et le navigateur web gt http www w3 org Protocols ApPROFONDIR Servlet Java Servlet Technology gt http java sun com products servlet LQ Jason Hunter Java Servlet Programming 2nd Edition O Reilly 2001 160 Les employ s ont leur application il est temps maintenant de d ve lopper la partie web pour les internautes et les clients Elle leur per mettra de consulter le catalogue de rechercher des articles par mots cl s mais aussi de se cr er un compte et de devenir client voir cas d utilisa tion Visualiser les articles du catalogue Rechercher un article Se cr er un compte Se connecter et se d connecter Consulter et modifier son compte Le duo Servlet JSP Une application web c est avant tout un aspect visuel Les pages qui constituent le site utilisent plusieurs artefacts pour avoir un rendu gra phique Tout d abord une page est essentiellement constitu e de balises HTML qui sont interpr t es et affich es par un navigateur Conjointe ment HTML on peut
383. que le client arrive sur le site il peut soit visualiser le catalogue soit se connecter Pour cela il peut cliquer sur le lien Sign On de l en t te Il est alors redirig sur une page lui demandant de saisir son login et son mot de passe Deux cas de figures sont possibles soit l utilisateur pos s de d j un compte et le syst me le redirige vers la page d accueil soit il veut s en cr er un et le site lui propose de renseigner ses informations Une fois connect le client peut tout moment consulter son compte en cliquant sur le lien Account de en t te partir de cette page il peut galement modifier ses informations Le lien Sign Off lui permet de se d connecter createaccount isp i tow time noue Dares weerom om 1 Kl B YAPS Pet Store TE V YARS Pet Store 4 Birds Cats Dogs Fish vos Ne F would like to sign wp for am account Repties Login Loge Are you a returning customer Dos eus Mae ene Monee Dm z ore tome noue ee Benne O Kie YAPS Pet Store ATE QA YAPS Pet Store Update Your Account Cats Ps JAVA ET A Dorty D showaccount jsp updateaccount jsp Figure 7 14 Navigation entre pages du compte client 197 7 Interface web Les Cahiers du Programmeur Java EE 5 partir des liens plac s dans l en t te le client peut se connecter au site se d connecter ou affi cher les informations de son compte Lorsque les donn es du compte cli
384. que le client invoque un EJB Le conteneur cr e alors une nouvelle instance et appelle la m thode demand e Instandiation du composant P ostC onstruct P reDestroy Figure 5 1 Cycle de vie d un stateless bean Appel d une m thode m tier Le passage d un tat l autre peut tre intercept gr ce aux annotations de callback Les annotations de callback Gr ce aux annotations de callback le conteneur d EJB laisse la possibilit aux d veloppeurs d effectuer des traitements lors du passage d un tat un autre I existe deux annotations utilisables par les stateless beans e javax annotation PostConstruct e javax annotation PreDestroy Apr s avoir instanci un stateless bean le conteneur ex cute les m thodes annot es par PostConstruct Dans le cas inverse l annota tion PreDestroy est appel e lorsque le conteneur supprime l EJB de la m moire Ces annotations sont importantes lorsque par exemple un EJB utilise des ressources externes Si l initialisation et la lib ration de ces ressources sont co teuses il est pr f rable de les effectuer le moins souvent possible c est dire une fois la cr ation de l EJB et une fois sa suppression Dans l exemple ci apr s le stateless bean ouvre une connexion JMS dans la m thode openConnection annot e par PostConstruct et la referme avant la suppression de l EJB de la m moire PreDestroy Ainsi tout au long de
385. qui vous permettront de comprendre les diff rences entre les EJB 2 et les EJB 3 Pour changer un peu de configuration ces EJB utilisent des fichiers de d ploiement pour le serveur d applications JBoss et la base MySQL Un exemple d entity bean Les entity beans 2 x se d clinent en deux mod les de persistances au niveau du composant BMP Bean Managed Persistence au niveau du conteneur CMP Container Managed Persistence La persistance d un BMP est impl ment e par le d veloppeur Ce der nier a en charge le d veloppement de la logique n cessaire pour ins rer les donn es en base les mettre jour les supprimer et instancier un EJB partir de ces donn es Cela n cessite habituellement d crire du code JDBC Avec cette gestion de persistance le d veloppeur a un contr le total sur la mani re dont les acc s la base sont r alis s La persistance d un CMP est assur e par le conteneur d EJB travers une configuration sp cifi e dans un descripteur de d ploiement le conteneur d EJB fera correspondre les attributs de l entity bean avec les colonnes dune table L utilisation des CMP r duit le temps de d veloppement ainsi que le code mais augmente la complexit en utilisant des fichiers XML Les Cahiers du Programmeur Java EE 5 L interface de fabrique h rite de javax ejb EJBHome Cette m thode permet d instancier un entity bean et d ins rer ses donn es en base Permet
386. r le message sera redirig vers tous les flux de sortie associ s au journal Il existe plu sieurs niveaux SEVERE niveau le plus lev WARNING avertissement INFO information CONFIG configuration FINE niveau faible FINER niveau encore plus faible FINEST niveau le plus faible Par exemple pour logger le message donn e invalide avec un niveau de criticit avertissement on utilise le code logger log Level WARNING donn e invalide Cette API permet aussi d viter l utilisation de la m thode printStackTrace d une exception Bien que tr s utile cette m thode affiche la trace d une exception l cran sans la garder dans un fichier En utilisant la m thode throwing de l API de logging la trace de l exception pourra tre r pertori e comme un message c est dire dans un fichier ou sur la console 61 3 Outils et installation Les Cahiers du Programmeur Java EE 5 R capitulatif des l ments de configuration Nous venons de voir comment configurer le serveur GlassFish et les dif f rents composants qui seront utilis s par l application Le tableau ci apr s nous donne un r capitulatif de cette configuration Tableau 3 2 Configuration GlassFish l ment Description petstore Nom du domaine GlassFish utilis par l application http localhost 8080 URL de l application htpp localhost 8282 URL de la console d administration admin ad
387. r l ann e s par s par le caract re Une fois toutes ces donn es valid es un bon de commande est cr Le panier lectronique est alors automatiquement vid Exceptions Les donn es de la carte bancaire sont valid es par BarkBank Si la banque rejette la carte bancaire le client en est averti et peut ressaisir ses donn es Post condition Ex cuter le cas d utilisation Cr er un bon de commande Maquettes Lorsque linternaute s authentifie le menu Cart appara t en haut de la page Ce lien permet d afficher le contenu du panier lectronique Si ce dernier est vide la page affiche un message avertissant le client figure 1 15 Pour remplir le panier il suffit de se rendre sur la page de description des articles et de cliquer sur le lien Add to cart Cette action ajoute dans le Caddie l article s lectionn avec une quantit gale un figure 1 16 YAPS PetStore Shopping Cart Mozilla Fircfox EEE Fichier Edition Aftichogc Aller Marquepages Outis ium antonio goncalves 42 YAPS Pet Store Account Cart sian off Yet Another Pet Store Birds Cats Dogs Fish Reptiles The Shopping Cart is empty The YAPS Pet Store Demo is 3 fictional sample application L x Ja ELA Derby D POWERED YAPS PetStore Item Mozilla Firefox DEOR Fichier Edition Affichogo Alers Morquepages Outis fh antonio goncalves SSA YAPS Pet Store Account Cart sian off Yet Anothe
388. r Pet Store Pets Spotless Female Puppy Birds Cats Dogs Unit Cost 22 U Fish Add to cart Reptiles The YAPS Pet Store Demno is a fictional sample application Figure 1 15 Le panier lectronique est vide Figure 1 16 Le client ajoute des articles en cliquant sur Add to cart 19 1 Pr sentation de l tude de cas Les Cahiers du Programmeur Java EE 5 20 Figure 1 17 Contenu du panier lectronique Apr s avoir effectu diff rents achats le client clique sur le lien Cart pour consulter le contenu de son panier lectronique Cette page affiche le nom des articles achet s ainsi que leur quantit et leur prix Le client peut tout moment modifier la quantit de chaque article en cliquant sur Update ou supprimer un article en cliquant sur Remove En bas du tableau s affiche le montant total du panier lectronique YAPS PetStore Shopping Cart Mozilla Firefox Fichier Edition Attichage Aler Marque pages Outi hu antonio goncalves SSA YAPS Pet Store Account Cart Sian off Yet Another Pet Store Pets Shopping Cart Birds Bulldog ou Cats Spotiess omale Puppy 220 Update S 1x 22 0 110 0 emove Dogs co 120 Update 1 4120 1205 gemove fa pes 150 0 update 2 150 0 300 04 Remove Reptiles Total 422 0 Check Qut The YAPS Pel Store Demno is a fictional sample application CL Z INA ELA Dei P POWERED Une fois les achats termin s le cl
389. r host gt lt arg line port server admin port gt lt arg line jdbc pool name gt lt exec gt lt target gt lt target name delete datasource gt lt exec executable asadmin gt lt arg line delete jdbc resource gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line jdbc datasource name gt lt exec gt lt target gt lt target name list jndi resources gt lt exec executable asadmin gt lt arg line list jndi resources gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt exec gt lt target gt lt target name list jndi gt lt exec executable asadmin gt lt arg line list jndi entries gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt exec gt lt target gt 4 4 4 4 Supprime le pool de connexions Supprime la source de donn es Affiche toutes les ressources J
390. r l application elle m me Ainsi selon certains crit res le client ne recevra que les messages qui l int ressent Les crit res de s lection ne peuvent porter que sur des champs inclus dans l en t te ou dans les propri t s du message Il mest pas possible d utiliser les donn es du corps pour effectuer le filtre Cette possibilit de filtrer les messages se fait par le consommateur qui utilise un s lecteur de type SQL Cette cha ne de caract res permet de ne s lectionner que les messages dont les champs d en t te et les pro pri t s pr sentent certaines caract ristiques Exemple de filtres JMS JMSPriority gt 6 JMSPriority gt 6 And OrderId lt 100 JMSPriority gt 6 And OrderId lt 100 Or Reptiles true 4 Reprenons lexemple de l interface Swing Les employ s ne sont en r alit int ress s que par les commandes contenant des reptiles Pour cela le pro ducteur du message rajoute une propri t Reptiles de type bool en qu il positionne vrai lorsque qu une commande contient au moins un reptile Le producteur du message rajoute la propri t Reptiles ObjectMessage objectMessage session createObjectMessage 4 objectMessage setObject order objectMessage setBooleanProperty Reptiles true 4 producer send objectMessage 4 Le consommateur lui utilise un s lecteur pour ne recevoir que les messages poss dant une propri t ayant le nom de Reptiles avec une valeur 4 true
391. r la pr sentation de la logique de communication JNDI Service Locator Comme nous l avons vu pr c demment dans le code linterface gra phique a besoin de localiser les stateless beans au travers d un service de nommage Le code technique qui permet d acc der JNDI peut tre isol dans une m me et seule classe le Service Locator Le design pattern Service Locator dont le seul but est de localiser des objets dans l arbre JNDI permet de rendre notre syst me plus flexible en centralisant et masquant les acc s JNDI En effet au lieu d ajouter ce code technique dans nos crans Swing ce design pattern fournit plu sieurs m thodes pour retrouver des objets stock s dans le service de nommage APPROFONDIR Service Locator Core J2EE Patterns Service Locator gt java sun com blueprints corej2eepatterns Patterns ServiceLocator html 141 6 Ex cution de l application Les Cahiers du Programmeur Java EE 5 Contexte initial JNDI Le cache est repr sent par une Map Le design pattern Singleton utilise une m thode statique pour acc der l unique instance de l objet 142 Par exemple l extrait de code suivant d crit comment retrouver une interface distante La m thode getRemoteInterface prend en param tre le nom JNDI de la remote interface effectue un lookup JNDI z gt puis retourne l interface si elle l a trouv ou elle lance une exception de typ
392. r les r sultats IN NOT IN EXIST LIKE IS NULL IS NOT NULL pour ne pas ramener de doublons DISTINCT ou pour contr ler la taille des collec tions IS EMPTY IS NOT EMPTY CONTAINS JPQL vient aussi avec toute une batterie de fonctions pour les cha nes de caract res LOWER UPPER TRIM CONCAT LENGTH SUBSTRING les num riques ABS SQRT MOD ou pour les ensembles COUNT MIN MAX SUM Comme en SQL on peut trier les r sultats ORDER BY ou les regrouper GROUP BY JPQL m riterait un chapitre lui tout seul mais ce nest pas l objet de ce livre Nous allons donc uniquement analyser les requ tes utilis es dans notre application L application YAPS Pet Store a souvent besoin d afficher la totalit des objets se trouvant dans la base de donn es toutes les cat gories ou tous les clients En JPQL il suffit d crire une requ te sans restreindre le r sultat sans clause WHERE Par exemple pour avoir la liste de tous les clients Query query em createQuery SELECT c FROM Customer c List lt Customer gt customers query getResultListQ ou alors tous les clients tri s par leur nom de famille Query query em createQuery SELECT c FROM Customer c ORDER BY c lastname List lt Customer gt customers query getResultListQ La requ te la plus compliqu e de l application concerne la recherche d animaux domestiques Si l on se reporte au cas d utilisation Rechercher un article il est stipu
393. r quand elle d bute begin et quand elle se termine commit ou rollback en cas chec PERSISTANCE Les jokers Tout comme SQL JPQL peut aussi utiliser des jokers pour ses requ tes Le joker remplace n importe quelle cha ne de caract res y compris la cha ne vide Le _ remplace un et un seul caract re On s lectionne les articles Item On utilise la fonction UPPER et le mot cl LIKE Pour obtenir le nom du produit on appelle les accesseurs de l objet item getProductO getName Le tri est fait sur le nom de la cat gorie acces sible par item getProduct getCategory getName On concat ne le caract re l op rateur LIKE par exemple LIKE iche r cu p re les caniches L ex cution de la requ te retourne une liste PERSISTANCE Commit et rollback En SQL rollback signifie que l on restaure les don n es d une base l tat o elles se trouvaient avant modifications Ainsi les derni res modifica tions sont annul es l oppos le commit permet de valider ces modifications en laissant les don n es de la base dans un tat coh rent 119 5 Traitements m tier Les Cahiers du Programmeur Java EE 5 PERSISTANCE Transactions explicites Si vous ne voulez pas laisser le conteneur g rer les transactions vous pouvez le faire explicitement en utilisant JTA Java Transaction API sp cifica tion JEE d finissant un mod l
394. r v rifier que GlassFish fonctionne rendez vous l adresse http localhost 8080 La page d invite s affiche Vous pouvez aussi consulter les logs et v rifier que le message suivant appara t Application server startup complete GLASSFISH Consulter les logs Pour lire les logs du serveur GlassFish vous pouvez soit consulter le fichier GLASSFISH_HOME domains petstore logs soit vous connecter la console d administration Pour cela allez l adresse http 1ocalhost 8282 puis saisissez le nom de l utilisateur admin et son mot de passe adminpwd Cliquez sur le menu Application Server gt View Log Files Ce n est qu une fois le serveur d marr que l on peut d ployer l applica tion Pour cela utilisez la t che Ant yaps deploy Celle ci fait appel au programme d administration de GlassFish asadmin et lui passe en param tre le fichier petstore ear E YapsPetstoredant yaps deploy Buildfile build xml yaps deploy echo Deploys the YAPS application exec Command deploy executed successfully dh insert data sql Executing resource E YapsPetstore yaps conf ig data sql sql 91 of 91 SQL statements executed successfully BUILD SUCCESSFUL Figure 6 17 Ex cution de la tache yaps deploy Le d ploiement permet au serveur d applications de lire le fichier ear et d en extraire les informations utiles Ce processus va donc cr er la base de donn es a partir des annotations JPA d
395. rDelegate 143 148 OrderDelegate 143 148 C Cas d utilisation 2 4 16 Acheter des articles 17 22 219 236 acteur 2 3 Consulter et modifier son compte 16 160 195 Cr er un bon de commande 22 236 exception 4 6 G rer le catalogue 7 138 G rer les clients 5 16 138 post condition 4 13 pr condition 4 14 Rechercher un article 11 160 188 Se connecter et se d connecter 14 16 17 160 195 Se cr er un compte 12 160 195 Visualiser et supprimer les commandes 22 138 Visualiser les articles du catalogue 8 160 188 CGI Common Gateway Interface 160 classpath 151 156 209 293 304 commit 119 268 conteneur 35 38 120 208 contexte de persistance 111 CRUD Create Retrieve Read Update Delete 44 104 131 D DDL 69 ADDRESS 69 sch ma de la base de donn es 100 T_ADDRESS 73 T_CATEGORY 81 T_CUSTOMER 80 326 T_ORDER 76 79 83 T_ORDER_LINE 83 T_ORDER_ORDER_LINE 83 T_PRODUCT 81 Derby 49 153 cr ation de la base de donn es 58 sch ma de la base de donn es 100 descripteurs XML 69 152 design pattern 41 Business Delegate 143 148 Composite 169 DAO 66 DTO 108 Facade 105 MVC 163 166 168 252 Observable 169 Proxy 239 Service Locator 141 283 singleton 142 Value Object 108 E Eclipse 49 EJB Entreprise Java Bean 33 290 entity 35 68 Stateful 34 214 217 232 Stateless 33 34 104 217 EJBQL Enterprise Java Beans Query Language 116 EL 166 169 entity bean 35 44 68 Addre
396. rcation de transactions 119 Transactions 120 Gestion des transactions par le conteneur 120 Gestion des exceptions 122 Exceptions application 122 Exception syst me 124 Le cycle de vie d un stateless bean 125 Les annotations de callback 125 Les stateless beans de YAPS Pet Store 126 La gestion des clients 127 CustomerLocal 127 CustomerRemote 128 CustomerBean 128 La gestion du catalogue 130 CatalogBean 131 La gestion des bons de commande 131 Paquetages des stateless beans 133 Architecture 133 En r sum 134 6 EXECUTION DE L APPLICATION s 0 esesererssererersrarers 137 Swing 138 Exemple d appel un EJB dans Swing 138 JNDI 139 Comment d velopper l application Swing 141 Service Locator 141 Business Delegate 143 Appel dun EJB Stateless dans cette architecture 144 L application graphique YAPS Pet Store 146 La gestion des clients 147 La gestion du catalogue 148 La gestion des bons de commande 148 Paquetages du client Swing 150 Architecture 150 Ex cuter l application 150 Compiler 151 Packager 151 Interface graphique 152 Application serveur 152 D ployer 152 Ex cuter 155 En r sum 156 7 INTERFACE WEB sensecseivisceteessucscaasad aneer ein casas sdeneessuas 159 Le duo Servlet JSP 160 Les servlets 160 Les JSP 162 Le design pattern MVC 163 Le langage d expression 166 JSTL 166 JSF 168 Les balises JSF 169 Les ba
397. rdfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line server log service module log levels property com barkbank FINEST gt lt exec gt lt exec executable asadmin gt lt arg line set gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line server log service module log levels property com petex FINEST gt lt exec gt lt target gt B T ches Ant lt target name version gt 4 Affiche la version du serveur GlassFish lt exec executable asadmin gt lt arg line version gt lt arg line echo echo gt lt arg line user server user name gt lt arg line passwordfile server passwordfile gt lt arg line host server host gt lt arg line port server admin port gt lt arg line verbose true gt lt exec gt lt target gt 309 Les Cahiers du Programmeur Java EE 5 Affiche la liste des composants d ploy s sur gt GlassFish Affiche la totalit des informations du serveur GlassFish gt Configure le serveur GlassFish gt 310 lt target name 1ist components gt lt exec executable asadmin gt lt arg lt arg lt arg lt arg
398. reditCardNumber private CreditCardType creditCardType private String creditCardExpDate La date de naissance du client est mapp e dans une colonne de type DATE L ge du client n est pas stock dans la base de donn es cet attribut est transient ANNOTATIONS Markup Nous avons vu le code de diff rentes annotations qui poss dent des m thodes G Embedded et Embeddable ne d finissent aucune m thode Elles sont appel es annotations markup Le bon de commande est stock dans la table t_order Notez que nous pouvons ne pas sp cifier la stra t gie de g n ration de cl si on utilise la strat gie par d faut strategy GenerationType AUTO La classe Order englobe les attributs de la classe CreditCard en utilisant l annotation Embedded La carte de cr dit n est pas annot e par Entity mais par Embeddable Cela signifie que ses attributs se retrouvent dans la table de la classe englobante 75 4 Objets persistants Les Cahiers du Programmeur Java EE 5 Attributs de la classe Order Attributs de la classe CreditCard La cl primaire est celle de la classe Order 4 Cl trang re Une cl trang re Foreign Key est un champ d une table fille permettant la jointure avec une table parent 76 Remarquez que sans ces annotations les attributs de Order seraient stock s dans une table et les attributs de CreditCart dans une autre
399. rent la structure d un mod le Il fait abstraction des aspects dyna miques et temporels Ce diagramme se concentre sur les relations entre classes association h ri tage etc leurs attributs et m thodes 89 4 Objets persistants Les Cahiers du Programmeur Java EE 5 PERSISTANCE Les images Pour pouvoir afficher une image pour chaque animal il est n cessaire que cette image soit stock e dans le syst me Deux possibilit s s offrent nous Soit l image est stock e directement en base de donn es sous forme de BLOB Binary Large Object soit le nom du r pertoire physique o se trouve l image est stock en base de donn e Cette derni re solution est plus simple mettre en uvre l attribut imagePath de la classe Item contient donc le chemin d acc s l image par exemple images poissonRouge gif Entity bean Category rendant persistantes ses donn es dans la table t_category gt Une cat gorie a un identifiant unique un nom et une description gt 90 forte entre ces objets Ainsi la suppression dune cat gorie entra nera la suppression de ses produits et des articles li s ce produit JPA utilise la notion de cascade En ce qui concerne les attributs de ces trois classes ils suivent l expres sion des besoins d crite dans le premier chapitre La cat gorie et le pro duit comportent un identifiant id un nom name et une description L article poss de un pr
400. res pour d velopper une application web et se compl tent mutuellement Par contre rien dans les sp cifications ne nous oblige utiliser un mod le de programmation particulier MVC par exemple La navigation entre pages rest pas non plus sp cifi e il est donc possible de la cr er de diff rentes mani res plus ou moins l gantes en dur dans les servlets via un fichier de configuration etc Il manque un mod le un peu plus rigide permettant de savoir clairement dans quel composant d velopper les traitements o concentrer la pr sentation et comment naviguer entre les pages Ce mod le est apparu dans Java EE avec JSF Java Server Faces permet de d velopper des applications web en b n fi ciant de concepts d j prouv s par Java et Java EE composants graphi ques Swing mod le de programmation v nementiel JSP servlets JSTL langage d expression et par les apports d autres framework Open Source tel que Struts JSF ne remplace pas les autres technologies web il les utilise et les com pl te e Les servlets constituent le fondement de la technologie web et jouent le r le de contr leur du mod le MVC La sp cification pr cise aussi comment packager et d ployer une application e Les JSP permettent de g n rer la partie graphique en utilisant des langages tels que HTML ou CSS Cascading Style Sheets e Les balises JSTL simplifient le d veloppement des pages JSP en ajoutant de la logique de pr sen
401. resse emetteur com msg setRecipients Message RecipientType TO new InternetAddress adresse destinataire com La classe Transport La classe javax mail Transport se charge d envoyer le message avec le protocole ad quat Dans notre cas pour SMTP il faut obtenir un objet Transport d di ce protocole en utilisant la m thode getTransport smtp d un objet Session Il faut ensuite tablir la connexion en utilisant la m thode connect en passant le nom du serveur de messagerie le nom de l utilisateur et son mot de passe Pour envoyer le message que l on aura cr ant rieurement il faut utiliser la m thode sendMessage en lui passant la liste des destinataires getAllRecipients Enfin il faut fermer la connexion l aide de la m thode closeQ Envoi d un e mail Transport transport session getTransport smtp transport connect smtp free fr user password transport sendMessage msg msg getAllRecipients transport close O ARCHITECTURE Attention au pare feu Si vous avez un firewall pare feu sur votre machine v rifiez bien qu il autorise le protocole SMTP sur le port 25 Sinon les e mails seront blo qu s et ne pourront pas tre envoy s 277 10 Traitements asynchrones Les Cahiers du Programmeur Java EE 5 278 Figure 10 5 Le stateless bean envoie un message dans le Topic Les traitements asynchrones de YAPS Pet Store L application YAPS Pet St
402. rface per mettant les appels Dans lexemple ci apr s l interface locale ShoppingCartLocal d finit une m thode pour ajouter un nouvel article dans le panier La classe ShoppingCartBean impl mente cette interface Interface locale Local public interface ShoppingCartLocal void addItem Item item Classe du stateless bean Stateful public class ShoppingCartBean implements ShoppingCartLocal private List lt CartItem gt cartItems O public void addItem Item item cartItems add new CartItem item 1 O autres m thodes m tiers APPROFONDIR Stateful EJB A Rima Patel Sriganesh Gerald Brose Micah Silverman Mastering JavaBeans 3 0 Wiley 2006 gt http www jguru com faq view jsp EID 917 Enterprise 215 8 Gestion du panier lectronique Les Cahiers du Programmeur Java EE 5 EJB Impl menter les interfaces En EJB 3 0 la classe a le choix entre impl menter les interfaces ou les d finir elle m me l aide des annotations Remote et Local RAPPEL Les interfaces Reportez vous au chapitre 5 Traitements m tier o les interfaces sont expliqu es en d tail 216 Ce code est tr s similaire celui d un stateless beans En fait les seules diff rences r sident dans l utilisation de l annotation Stateful au lieu de stateless et dans le fait que les attributs conservent leur tat entre les appels Les interfaces restent identiques puisqu elle
403. ri Le programme re oit donc des v nements du type ouver ture de la balise X zone de texte fermeture de la balise X Apr s le passage de SAX seules restent les informations que le programmeur a lui m me trait es et plac es dans d autres structures de donn es DOM Document Object Model est plus simple comprendre puisqu il lit l int gralit du document XML afin de construire sa repr sentation en m moire Ensuite le programme peut librement et rapidement parcourir cette repr sentation interne pour y garder les informations souhait es DOM n est pas recommand pour des documents de taille importante cause de l occupation m moire que les donn es pourraient prendre Services web Souvent d crits comme le nouveau mod le de r f rence pour les sys t mes d information les services web permettent des applications de dialoguer distance et ceci ind pendamment des plates formes et des langages sur lesquels elles reposent Pour communiquer les services web s appuient sur les standards que nous venons de voir Cette communica tion est bas e sur le principe de demandes et de r ponses en fait des messages XML transport s par le protocole HTTP Les services web sont aujourd hui incontournables et se pr sentent comme le nouveau paradigme des architectures logicielles ou architec tures orient es services SOA Cette technologie tend s imposer comme le nouveau standard en termes d int gration
404. rmed jsp J POWERED affiche le r capitulatif Le code de cette page est tr s similaire celui de showcart jsp Il ne sera donc pas d crit ici 230 Architecture L architecture se voit enrichie d un nouveau managed bean ShoppingCartController Celui ci a pour t che d invoquer les m thodes du stateful bean ShoppingCartBean lorsque l utilisateur sou haite acc der son panier lectronique Le stateful bean n expose qu une interface locale et utilise une liste de Pojo CartItem pour stocker le contenu du Caddie lt lt boundary gt gt PetstoreF rame lt lt Delegate gt gt Catalog elegate lt lt entity gt gt Category lt lt entity gt gt Customer lt lt com ponent gt gt 8 CatalogBean lt lt Delegate gt gt lt lt com ponent gt gt 3 CustomerD elegate CustomerBean lt lt Delegate gt gt OrderD elegate lt lt entity gt gt Order lt lt utility gt gt lt lt control gt gt ShoppingCartController lt lt control gt gt lt lt control gt gt AccourtCortroller CatalogController Figure 8 10 Stateful bean s inscrivant dans l architecture globale de l application Ex cuter l application Pour ex cuter l application il suffit d utiliser les m mes t ches Ant yaps clean yaps build et yaps deploy qui compileront packageront les classes et d ploieront les fichiers archives Le stateful session bean ShoppingCartBean est d ploy dans un fichier J
405. roduct ManyToOne fetch FetchType EAGER 4 Le produit d clare le chargement automatique private Category category de sa cat gorie Cee Le param tre fetch est tr s important car il peut provoquer des pro bl mes de performances s il est mal utilis Imaginez un mod le objet riche et complexe o toutes les relations sont d finies automatiquement EAGER Cela signifierait qu l appel d un objet le syst me aurait charger automatiquement toute la grappe d objets li s Cela aurait des impacts sur la m moire du syst me ainsi que sur les performances de la base de donn es Ordonner une association multiple Les bases de donn es relationnelles ne pr servent pas d ordre dans leur table Ainsi si on veut r cup rer une liste ordonn e de telle ou telle mani re il faut utiliser le mot cl order by dans les ordres SQL Il en va de m me pour les listes des entity beans Pour reprendre l exemple de la cat gorie et de ses produits on veut pou voir r cup rer cette liste de mani re ordonn e par nom de produits ascendant Pour cela JPA propose l annotation OrderBy que l on peut utiliser sur les annotations OneToMany et ManyToOne OrderBy prend en param tre les noms des attributs sur lesquels on souhaite effectuer un tri ainsi que le mode ascendant ou descendant Code de l annotation javax persistence OrberBy package javax persistence Target METHOD FIELD Retention RUNTIME
406. rotocole HTTP Ces donn es contiennent les informations de la carte bancaire et sont envoy es la soci t BarkBank celle ci effectue la validation et renvoie un statut valide ou non voir cas d utilisation Acheter des articles Pour le transport des animaux YAPS fait aussi appel une soci t externe Elle envoie des donn es PetEx lui permettant d acheminer d un point vers un autre une commande d animaux domestiques voir le cas d utilisation Cr er un bon de commande du premier chapitre Ces changes se font via des services web Les standards autour des services web Les services web s appuient sur un ensemble d API et de protocoles standardisant l invocation de composants applicatifs Ils sont d crits en XML par des documents WSDL qui pr cisent les m thodes pouvant tre invoqu es leurs signatures et les points d acc s du service URL port UDDI est le standard de recherche de ces services et Soap le pro tocole utilis pour changer ces informations Java EE 5 a consid rable ment simplifi le d veloppement des services web Nous n aurons donc pas manipuler directement tous ces standards Il est cependant impor tant d en conna tre la d finition et leur r le dans architecture globale des services web Soap Inspir de XML RPC Soap Simple Object Access Protocol est le proto cole utilis par les services web Fond sur XML ce protocole autorise l interop rabilit av
407. rri re la recherche d un client Elle passe juste un identifiant 4 une m thode qui lui retourne l objet initialis avec les donn es de la base Les patterns Business Delegate et Service Locator nous aident d autant mieux faire ce d coupage qu ils isolent les responsabilit s de chaque classe L application graphique YAPS Pet Store Linterface graphique des employ s de la soci t YAPS se compose d un menu principal qui permet d acc der a diff rents sous menus Chacun d eux correspond une des fonctionnalit s pr sent es dans les cas d utilisation MIE Pet Store File Customer Catalog Order Look amp Feel Tableau 6 1 Sous menus de l application Menu Sous menu Description File Exit Permet l employ de fermer l application Customer List customers Affiche la totalit des clients de la base de donn es Manage customer Effectue les op rations CRUD sur un client Catalog List categories Affiche la totalit des cat gories du catalogue List products Affiche la totalit des produits du catalogue List items Affiche la totalit des articles du catalogue Manage category Effectue les op rations CRUD sur une cat gorie Manage product Effectue les op rations CRUD sur un produit Manage item Effectue les op rations CRUD sur un article Order List orders Affiche les bons de commande Manage order Affiche l cran permettant l employ de retrouver et de supprimer
408. rtBean getCartItems shoppingCartBean empty return order confirmed public Float getTotal 4 return shoppingCartBean getTotalQ public List lt CartItem gt getCartItems 4 return shoppingCartBean getCartItemsO Gr ce l annotation EJB le conteneur injecte les r f rences des interfaces locales des EJB Sta teless Cata logBean et OrderBean et de l EJB Stateful ShoppingCardBean Ces attributs sont initialis s par le faces config xm voir plus bas Ils correspondent aux informations du client qui est connect Cette m thode permet d ajouter un article au panier La page web passe en param tre l identi fiant de l article i temId au bean qui utilise le stateless CatalogBean pour r cup rer l entity Item Cet entity est rajout dans le panier La valeur de retour item added est utilis e pour la navigation voir le faces config xml M me type de traitement que la m thode ci des sus Notez la valeur de retour nul Celle ci indique JSF de r afficher la m me page En effet lorsqu on supprime un article du panier une redirection est faite sur la page qui en affi che le contenu Lorsque le client a termin ses achats des ani maux et qu il souhaite valider son panier il cli que sur le lien Check Out Aucune action n est effectu e Seule une redirection vers la pro chaine page est lanc e Le client saisit son adresse de livraison son moyen
409. rtoire contenant le bytecode des classes de l application generated classes Java g n r es pour les services web resources pages web et images du site de PetEx src ce r pertoire contient les fichiers source Java de l application du transporteur Les classes sont sous le paquetage com petex transport WEB INF les fichiers de configuration de l application web Yaps C3 build 3 classes fi F T He Le code de l application YAPS Pet Store se trouve dans le r pertoire PETSTORE_HOME Yaps Vous y trouverez les sous r pertoires suivants build contient le fichier ear d ployer dans GlassFish classes r pertoire contenant le bytecode des classes de l application C3 config x 3 ns er L E cenerate config contient les fichiers de param trage de l application Ca generated S k L generated classes Java g n r es pour les services web L resources pages web et images du site YAPS Pet Store src ce r pertoire contient les fichiers source Java de l application YAPS Pet Store Les classes sont sous le CG WEB INF paquetage com yaps petstore WEB INF les fichiers de configuration de l application web la racine vous trouverez les deux fichiers des t ches Ant admin xm toutes les t ches d administration du serveur GlassFish sont regroup es dans ce fichier bui 1d xm1 t ches pour compiler et d ployer les applications En r sum Ce chapitre no
410. rty name petex home value home dir petex gt lt property name yaps home value home dir yaps gt lt property name yaps build dir value yaps home bui1d gt lt property name yaps config dir value yaps home config gt lt property name yaps src dir value yaps home src gt lt property name yaps web dir value yaps home resources gt lt property name yaps web inf dir value yaps home web inf gt Les Cahiers du Programmeur Java EE 5 Variables propres de l application BarkBank gt Variables propres de l application PetEx gt Fichiers pour le d ploiement de l application gt YAPS Pet Store Fichier pour le d ploiement de l application gt BarkBank Fichier pour le d ploiement de l application gt PetEx 292 lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property lt property name yaps generated src dir value yaps home generated gt name yaps classes dir value yaps home classes production gt name barkbank build dir value barkbank home build gt name barkbank src dir value barkbank home src gt name barkbank web dir val
411. rver D Appieations Enterprise Apphcations B We appications GB cn Modules BD Connector oguics E Litecycie Moouies BD Ace Cient Modules g Web Services Integrations D 2810cpioyments D 251 components gt D 2ntibenres f Custom Micans v typ Resources r Joc v D Joc Resources amp rc TimerPoal amp Kbc _ColFbwPoo E Jbc _defaut Et gt D Connection Poote gt gt JMS Resources Common Tasks gt Resources gt JINAC gt JORC Resources gt jibopetsioreDS Edit JDBC Resource Save Ed an existing JORC dala source JNDI Name jdbe petstoreDS Pool Name pstetorePool Use the JDBC Connection Pools page to create new pals Description Status Freatsleedd Pour v rifier que la source de donn es a bien t cr e vous pouvez soit utiliser la commande PETSTORE_HOME ant f admin xml list datasource soit utiliser la console d administration http localhost 8282 Pour cela naviguez dans l arborescence du menu de droite et d ployez les n uds Resources JDBC JDBC Resources Vous verrez alors la DataSource jdbc petstoreDS figure 3 11 Cr ation des ressources JMS L application YAPS Pet Store utilise JMS pour les traitements asyn chrones Il faut donc cr er une fabrique de connexions ainsi qu un Topic file d attente JMS Pour cela tapez les commandes suivantes XPETSTORE_HOME ant f admin xml create jms connection factory PETSTORE_HOME ant f admin xml create jms t
412. ry pr cise JPA qu il doit utiliser le syst me de cl trang re Lattribut mappedBy n a de sens que dans une relation bidirectionnelle DDL des tables t_category et t_product CREATE TABLE T_CATEGORY ID BIGINT NOT NULL PRIMARY KEY ID CREATE TABLE T_PRODUCT ID BIGINT NOT NULL CATEGORY_FK BIGINT PRIMARY KEY ID ALTER TABLE T_PRODUCT ADD CONSTRAINT T_PRODUCT_CATEGORY_FK FOREIGN KEY CATEGORY_FK REFERENCES t_category ID 4 Les donn es de l entity bean Category sont rendues persistantes dans la table t_category Une One cat gorie poss de plusieurs Many produits Remarquez l utilisation des g n riques pour la liste de produits Les donn es de l entity bean Product sont rendues persistantes dans la table t_product Plusieurs Many produits peuvent tre ratta ch s une One m me cat gorie On renomme la colonne de la cl trang re en category_fk La table t_category ne porte pas l informa tion du lien avec t_product La table t_product utilise une cl trang re pour pointer vers la table t_category Contrainte d int grit r f rentielle sur la cl trang re category_fk 81 4 Objets persistants Les Cahiers du Programmeur Java EE 5 D finit l entity bean avec lequel il faut cr er une relation Cet attribut est obligatoire lorsqu on n utilise pas les types g n riques Op rations devant tre propag es
413. ry getId model setName category getName model setDescription category getDescription Appel d un EJB Stateless dans cette architecture Voyons maintenant comment tout cela simbrique l aide d un dia gramme de s quences Dans ce genre de diagramme les objets commu niquent en invoquant des op rations sur d autres objets On peut donc suivre visuellement les diff rentes interactions et les traitements r alis s par chaque objet Prenons pour exemple la recherche d un client et l affi chage de ses informations Le diagramme de s quences figure 6 2 nous montre comment l cran Swing invoque l EJB au travers de la classe CustomerDelegate L application Swing appelle la m thode findCustomer de la classe CustomerDelegate Celle ci doit retrouver l interface distante de EJB grace au singleton ServiceLocator Elle appelle donc la m thode getInstance puis getRemoteInterface en passant le nom JNDI de l EJB c est dire ejb stateless Customer La classe CustomerDelegate utilise l interface CustomerRemote et appelle la m thode findCustomer ce qui a pour effet d appeler la classe d impl mentation CustomerBean C est cette derni re qui manipulera l entity manager pour obtenir l entity bean Customer L application Swing se retrouve donc avec un objet Customer sur lequel elle peut invoquer les getters et pour afficher les informations l cran 5 lookup 7 findCustomer
414. s 1990 et a apport au langage Java une plate forme logicielle robuste pour les applications d entreprise Remise en cause chaque nouvelle version mal comprise ou mal utilis e concurrenc e par les frameworks Open Source elle a su tirer profit de ces critiques pour s am liorer et trouver un quilibre dans sa version Java EE 5 Cet ouvrage propose de d couvrir les nouveaut s de cette nouvelle ver sion tout en examinant comment les assembler pour d velopper un site de commerce lectronique Objectifs de cet ouvrage Servlet JMS EJB JSP JPA MDB JSF la liste des sp cifications qui constituent Java EE 5 et qui doivent tre connues par ses adeptes est longue L objectif de ce livre est ambitieux puisqu il se propose de vous guider dans le d veloppement d un site de commerce lectronique en utilisant la plupart de ces sp cifications Java EE 5 est constitu de plus d une vingtaine de sp cifications cha cune faisant l objet d une description pr cise dans un document relative ment volumineux par exemple 330 pages pour les servlets 2 5 ou encore 646 pour les EJB 3 0 Vous trouverez donc dans la litt rature informatique et sur Internet une multitude de mini applications du type Hello World ainsi que des tutoriels couvrant chacune de ces sp cifi cations de mani re isol e Ce n est pas le but de cet ouvrage Son objectif est de vous guider dans le d veloppement d un site complet de com mer
415. s Cahiers du Programmeur Java EE 5 Le service web peut tre appel partir de n importe quelle classe un managed bean dans notre cas La classe ValidationService est g n r e par wsimport L annotation WebServiceRef permet d injecter la r f rence du service web On r cup re l interface Validation qui a t g n r e par ws import Appel du service web en lui passant les param tres et en r cup rant la valeur de retour Cette annotation s applique une m thode ou un attribut Nom local du service web URL du document WSDL d crivant le service web Nom local du service web sp cifique au serveur d applications Au lieu de sp cifier l URL du service via wsdiLocation on peut directement sp ci fier le nom de l interface g n r e 248 Extrait du code appelant le service web public class ShoppingCartController WebServiceRef private ValidationService validationService private void validateCreditCard CreditCard creditCard Validation validation validationService getValidationPort String statusCard validation val idateCard creditCard getCreditCardNumberQ creditCard getCreditCardTypeQ creditCard getCreditCardExpDate C4 L annotation WebServiceRef peut prendre plusieurs param tres Dans l exemple pr c dent nous aurions pu lui fournir l URL du document WSDL de la mani re suivante WebServiceRef wsdiLocation http
416. s attributs ex expiryDate cor respondent aux noms sp cifi s dans les annota tions JAX WS du service web WebParam name expiryDate String ccExpiryDate La classe ValidateCreditCardResponse repr sente la valeur de retour Le nom cardStatus fait r f rence l annotation JAX WS du service web WebResult name cardStatus 246 gt gt fourni avec GlassFish partir de la classe Validation l utilitaire wsgen g n re les l ments suivants La classe ValidateCreditCard du nom de la m thode du service cor respond aux param tres pass s au service Cette classe ne contient que les trois attributs de type String num ro type et date d expiration ainsi que les accesseurs Comme elle est responsable du transport des param tres au format XML cette classe utilise les annotations JAXB e La classe ValidateCreditCardResponse du nom de la m thode suf fix e par Response correspond la valeur de retour Cette classe est elle aussi annot e par JAXB Le document WSDL d crivant le service web et son sch ma XSD Ci apr s le diagramme de classes repr sentant le service web Validation ainsi que les artefacts g n r s dans le sous paquetage jaxws Validation validateC ard creditC ardNumber String creditC ardT ype String expiryDate String String jaxws ValidateCreditCardResponse _retum String ValidateCreditCard creditC ardNum ber String Bien q
417. s books tutorial uiswing Java CodeGuru Swing gt http www codeguru com java Swing index shtml LQ Kathy Walrath Mary Campione Alison Huml Sharon Zakhour The JFC Swing Tutorial A Guide to Constructing GUIs Second Edition Addison Wesley 2004 L Emmanuel Puybaret Swing Eyrolles 2006 REMERCIEMENT L application Swing Pet Store Je tiens remercier David Dewalle pour m avoir aid d velopper l application graphique de YAPS Pet Store Celle ci utilise le framework Open Source dont David est le cr ateur et qui simplifie la gestion des v nements et le fen trage Swing gt http www viprojects org 138 Les objets persistants et la couche m tier ont t d velopp s dans les pr c dents chapitres Ces composants serveurs doivent maintenant tre compil s puis d ploy s sur GlassFish pour pouvoir tre interrog s par lapplication graphique Ce chapitre se consacre donc l interface homme machine IHM et aux processus de d ploiement Les employ s de la soci t g rent le catalogue des articles ainsi que les clients De plus ils affichent les bons de commande l aide d une inter face graphique de type client lourd voir Cas d utilisation G rer les clients G rer le catalogue et Visualiser et supprimer les commandes D velopp e en Swing cette interface doit tre install e et ex cut e sur le poste de chaque employ Swing La langage Java dispose de diff rentes A
418. s chapitres suivants Paquetages des stateless beans Les interfaces et classes des stateless beans client catalogue et bon de commande sont plac es dans les sous paquetages de com yaps petstore stateless Les exceptions lanc es dans les EJB ValidationException et CreditCardExcepti on se trouvent dans com yaps petstore exception Architecture L architecture globale obtenue jusqu pr sent est principalement cons titu e de stateless et d entity beans La couche de stateless forme le point d entr e c est dire la fa ade de l application et publie des m thodes pour les interfaces graphiques Cette couche s appuie ensuite sur les entity beans qui repr sentent le mod le persistant de l application La couche des stateless beans est constitu e de trois EJB permettant la gestion du catalogue des clients et des bons de commande Chacun publie ses m thodes l aide d interfaces locales et distantes Les stateless beans interagissent avec les entity beans UML Les st r otypes Les diagrammes de classes s enrichissent ainsi que la palette de st r otypes lt lt interface gt gt permet de typer une classe en tant qu interface en UML on peut aussi utiliser le rond pour repr senter une interface lt lt Session Bean gt gt et lt lt entity gt gt sont utilis s pour les EJB Figure 5 6 Diagramme des classes interagissant avec la gestion du bon de commande L CreditCardException
419. s de persistance sur les entity beans CRUD enchaine les appels a plusieurs entity beans et rajoute de la logique m tier Stateless session bean Un stateless session bean ou composant sans tat est un objet particu lier qui r side dans un conteneur on parle alors de conteneur d EJB Contrairement aux entity beans les EJB Stateless ne persistent pas de donn es ils servent ex cuter des traitements Comme son nom l indique le stateless session bean ne poss de pas d tat En effet il sert l ex cution d un traitement et retourne un r sultat sans avoir connais sance des appels pr c dents ou futurs Par exemple une application cliente contacte un stateless bean et lui transmet des param tres Le sta teless bean s lectionne des entity beans correspondant aux param tres et retransmet un r sultat au client Lorsque ce traitement s ach ve le state less bean ne conserve aucun souvenir de cette interaction Parce qu il ne poss de pas d tat un stateless bean peut tre utilis par diff rents clients Ainsi le m me EJB pourra retourner un r sultat un client puis imm diatement apr s ex cuter le m me traitement pour un autre client Ceci implique qu un appel de m thode doit passer tous les param tres n cessaires sa bonne ex cution Il est donc impossible d appeler plusieurs m thodes pour construire un traitement Un stateless bean n est pas d di un seul client et ne conserve pas d ta
420. s mod liser et d crire l architecture logicielle de l application YAPS Pet Store Celle ci s inspire du Blueprint Java Pet Store de Sun et de ses design patterns Elle est architectur e en couches pr sentation traitements et acc s aux donn es et utilise la plate forme Java EE 5 qui s appuie sur les nouveaut s du langage Java 5 annotations g n riques SN ae oo gt ES ER i EES CS I ES OVNI SOMMAIRE Technologies utilis es Nouveaut s du langage Java 5 La plate forme Java EE 5 Les Blueprints et le Pet Store de Sun Architecture en couches MOTS CLES JSE JEE EJB JPA JMS et MDB JSP JSTL JSF XML Web Service Design pattern UML Les Cahiers du Programmeur Java EE 5 4 API Une API ou Application Programming Inter face d finit la mani re dont un composant infor matique peut tre invoqu par un autre Il s agit g n ralement d une liste de m thodes que l on peut appeler LRE Java 5 Il existe beaucoup de livres sur le langage Java ainsi que de nombreuses r f rences et articles en ligne notamment Emmanuel Puybaret Java 1 4 et 5 0 Eyrolles 2006 Claude Delannoy Programmer en Java Eyrolles 2006 gt http java sun com docs books jls JAVA5 Les technologies Vous retrouverez sur le site de Sun la liste des outils API et librairies que contient Java 5 gt http java sun com javase technologies index jsp Figure 2 1 L archi
421. s sont anno t es par Local et doivent tre impl ment es par la classe Comment d velopper un stateful bean Le d veloppement d un stateful bean est identique celui d un stateless voir chapitre 5 Traitements m fier il faut une classe ainsi qu une ou deux interfaces Les interfaces Un stateful bean peut avoir une interface distante et ou locale Son r le tant de garder et de g rer un tat il a tendance surtout tre utilis localement par une application web Une application Swing par exemple n a pas besoin de stateful bean pour g rer son tat elle peut le faire elle m me On peut tout de m me utiliser les deux types d inter faces que l on annotera avec Local et ou Remote La classe de l EJB La classe du bean contient le code m tier et impl mente les interfaces La nouveaut des stateless beans se caract rise par le fait que l on peut d clarer des attributs en tant certain de leur contenu entre chaque appel La classe d impl mentation du bean Stateful public class ShoppingCartBean implements ShoppingCartLocal private List lt CartItem gt cartItems public void addItem Item item cartItems add new CartItem item 1 autres m thodes m tiers Comme vous pouvez le voir pour distinguer une simple classe Java d un EJB Stateful il suffit d utiliser l annotation javax ejb Stateful La classe impl mente les m thodes de l interface et mai
422. s utility in the Control Panel Feature Description J2SE Development Kit 5 0 induding private JRE 5 0 This Demos will require 264 MB on your hard Source Code drive Public JRE Install to D Java JDK jdk1 5 0_10 A Figure 3 2 S lectionnez les modules installer lt Back Next gt Cancel et cliquez sur Next L installation termin e il faut positionner la variable JAVA HOME par 4 Les variables d environnement exemple set JAVA_HOME F Too s Java JDK jdk1 5 0_10 et rajouter le be d environnement Conk dee variable r pertoire bin dans la variable syst me PATH pour notre exemple utilis es par le syst me pour partager des informa PATH JAVA_HOME bin PATH partir d une fen tre de commande tions de configuration entre diff rents pro V rifiez que l interpr teur java est reconnu en tant que commande interne grammes Une variable d environnement tr s 1 des and fen tre d d utilis e sous Windows est la variable path Elle en tapant a commande java version dans votre fen tre de commande contient la liste des dossiers dans lesquels Win dows ira chercher les commandes par d faut at Open JEE5 F gt echo JAUA_HOMEx D NJavaNJDK jdk1 5 6_16 F gt java version java version 1 5 6 _16 JavaCTM gt 2 Runtime Environment Standard Edition build 1 5 6_16 h 3 gt Java HotSpot lt TM gt Client UM Chuild 1 5 6_1 b 3 mixed mode sharing ENS Figure 3 3 Affichage de la versi
423. se que d une m thode dont la signature est la suivante public void onMessage javax jms Message message Charge au d veloppeur d impl menter cette interface pour r aliser le traitement ad quat lors de la r ception d un message Prenons l exemple du client Swing de l application Celui ci doit tre l coute des nouvelles commandes qui sont publi es dans le Topic jms topic order Lorsque le message contenant le nouveau bon de com mande arrive ses informations sont affich es l cran Injection de la fabrique de connexions et du Topic qui sont d clar s dans GlassFish On se connecte au provider de messages Le premier param tre true signifie que la ses sion est transactionnelle On cr e un MessageProducer qui dans notre cas sera un TopicPublisher On cr e un message de type objet On affecte au corps du message l entity bon de commande Le message est envoy dans le Topic On referme la session et la connexion 269 10 Traitements asynchrones Les Cahiers du Programmeur Java EE 5 ANNOTATION Resource dans le client Swing Souvenez vous que pour des raisons p dagogiques l interface Swing ne s ex cute pas dans un conte neur client Application Client Container Si tel avait t le cas nous aurions pu utiliser l annota tion Resource pour injecter les r f rences de la fabrique de connexions et de la destination JMS et ainsi s affranchir de JN
424. sement D urabilit lorsque la transaction est achev e les modifications sont d finitives Avec Java EE la gestion des transactions peut tre d l gu e au conte neur Le d veloppeur n a pas besoin d utiliser d API pour le faire Il est cependant possible de d clarer explicitement le mode transactionnel lorsqu il est souhait Gestion des transactions par le conteneur Lorsque la gestion des transactions est laiss e au soin du conteneur il n est pas n cessaire d crire explicitement les begin commit ou rollback En annotant un stateless bean avec TransactionAttribute le conteneur est inform de la politique transactionnelle utiliser Si le conteneur ne rencontre pas d exceptions il effectuera lui m me le commit en respec tant les param tres de l annotation sinon il lancera un rollback Prenons par exemple une m thode d un stateless bean Pappel de cette m thode une transaction d marre pour se terminer la fin de l ex cu tion de cette m me m thode Que se passe t il maintenant si cette m thode appelle une autre m thode situ e dans un autre stateless bean Cette seconde m thode s ex cute t elle dans la m me transaction que la premi re Cr e t on une nouvelle transaction Cela d pend de l anno tation javax ejb TransactionAttribute qui est utilis e pour d finir la politique transactionnelle et peut prendre les six valeurs suivantes REQUIRED utilise la transaction si
425. ser les balises JSF il faut obligatoirement importer les biblio th ques ad quates l aide des directives taglib et les englober dans une balise f view Les balises Core seront alors pr fix es par f et les balises graphiques par h Pour afficher le nom de la cat gorie en titre de la page on utilise la balise HTML h2 conjointement avec la balise JSF lt h outputText gt Celle ci est utilis e diff rents endroits dans la page pour afficher le nom du produit ainsi que sa description Le but tant d afficher une liste de produits on utilise la balise lt h dataTable gt pour it rer la collection catalog products et la pr senter sous forme de tableau Pour repr senter un lien HTML on utilise la balise lt h commandLink gt Celle ci poss de un param tre action qui permet comme nous le verrons par la suite d appeler une m thode lorsqu on clique sur le lien En cas d erreur un message d exception est affich gr ce la balise h messages Le r sultat est le suivant une page web qui affiche en titre le nom de la cat gorie puis it re la liste de ses produits en affichant leur nom sous forme de lien hypertexte et leur description figure 7 3 YAPS PetStore Products Mozilla Firefox Fichier Edition Affichage Historique Marque pages Outils G Products for category Birds Amazon Parrot Great companion for up to 75 years Finch Great stress reliever lt
426. serveur d applications La base de donn es est cr e et contient des donn es Il ne reste plus qu ex cuter l interface graphique pour effectuer les traite ments m tier demand s par les employ s de la soci t YAPS Pour ce faire utilisez la t che Ant run client 155 6 Ex cution de l application Les Cahiers du Programmeur Java EE 5 156 Figure 6 19 Ex cution de la t che run client cx Open JEE5 ant run client E YapsPetstoredant run client Buildfile build xml mun client echo Runs the client application Cette t che lance la classe du menu principal PetstoreFrame qui se trouve dans le fichier d archive petstore jar Pour pouvoir s ex cuter convenablement certaines librairies GlassFish sont rajout es au class path Il ne vous reste plus maintenant qu utiliser l application Swing avant de passer l interface web En r sum Ce chapitre nous a montr comment compiler packager et d ployer l application YAPS Pet Store dans le serveur GlassFish Une interface graphique Swing a galement t d velopp e pour permettre aux employ s de g rer le catalogue les clients et les bons de commande du syst me I nous faut maintenant d velopper une interface web pour per mettre aux internautes de consulter le catalogue d articles et de se cr er un compte Ces deux IHM d l guent les traitements m tier la couche de stateless session beans que nous avons vu dans
427. ses en uvre Telle est la force de Java EE 5 Pour cela il y a plusieurs phases de g n ration de code qui entrent en jeu et qui mettent en uvre toute la tuyauterie technique Le d veloppement et l utilisation d un service web comportent quatre phases e d veloppement du service web e g n ration des artefacts serveurs e g n ration des artefacts clients e appel du service web D velopper la classe du service web Prenons l exemple du service web de la BarkBank qui permet de valider une carte bancaire La classe Validation publie une m thode validateCreditCard renomm e en ValidateCard qui prend en para m tres le num ro de la carte son type Visa Master Card etc et la date d expiration Tous ces param tres sont de type String ainsi que la valeur de retour correspondant au statut num ro invalide carte expir e etc WebService public class Validation WebMethod operationName ValidateCard 2 WebResult name cardStatus public String validateCreditCard WebParam name creditCardNumber String ccNumber WebParam name creditCardType String ccType WebParam name expiryDate String ccExpiryDate L algorithme de v rification n est pas d taill Voil tout est dit N est ce pas magique Si les valeurs par d faut vous conviennent vous pouvez m me limiter les annotations la seule WebService Contrairement aux EJB un service web
428. sion des donn es le tout pour une p riode limit e la dur e de vie de la session Alias utilis pour invoquer le managed bean La classe du managed bean Managed bean La r f rence de l EJB est inject e Les attributs sont accessibles dans les pages via le langage d expression Par exemple catalog keyword M thode recherchant les articles Passe la cha ne de caract res l EJB Alias utilis pour la navigation 184 gt Extrait de la JSP permettant la saisie de la cha ne de caract res lt h inputText value catalog keyword gt Q lt h commandButton action catalog doSearch 2 value Search gt Le suffixe catalog que vous voyez dans cet extrait de code fait r f rence au managed bean CatalogController Cet alias se fait par le fichier de configuration faces config xm1 JSF cr e une instance de la classe com yaps petstore jsf CatalogController O qu il nomme catalog La port e de cet objet est session c est dire que le managed bean et ses attributs pourront tre utilis s tout au long de la session de l utilisateur Extrait du faces config xml d clarant le managed bean lt managed bean gt lt managed bean name gt catalog lt managed bean name gt lt managed bean class gt com yaps petstore jsf CatalogController lt managed bean class gt lt managed bean scope gt session lt managed bean scope gt lt man
429. sommer les messages Pour ce faire on associe un listener pour traiter les messages de fa on asynchrone Ainsi chaque r ception d un nouveau message la m thode onMessage est automatiquement invo qu e et peut effectuer un traitement R ception d un message public class YapsMsgListener implements MessageListener private ConnectionFactory connectionFactory private Topic destinationOrder private void receiveOrder Order order Pour simplifier la lecture du code la r ception asynchrone l aide d un thread n est pas impl ment e InitialContext ic new InitialContext connectionFactory ConnectionFactory ic lookup jms petstoreConnectionFactory destinationOrder Topic ic lookup jms topic order Connection connection connectionFactory createConnection Session session connection createSession true Session AUTO_ACKNOWLEDGE MessageConsumer consumer session createConsumer destinationOrder O consumer setMessageListener this Q connection start public void onMessage Message message O if message instanceof ObjectMessage ObjectMessage objMsg ObjectMessage message tableModel add objMsg getObject La s lection de messages Pour les clients qui ne seraient pas int ress s par tous les messages arri vant dans une file d attente JMS permet de les filtrer Ce filtrage est effectu par le provider de messages plut t que pa
430. spondance entre documents XML et objets Java JAXB Java Archi tecture for XML Binding facilite cette correspondance bidirectionnelle en fournissant un niveau d abstraction plus lev que SAX ou DOM et en s appuyant sur des annotations Par exemple si on veut obtenir une repr sentation XML de la classe Customer il suffit de l annoter avec G javax xml bind annotation Xm1RootElement D autres annotations permettent de sp cifier qu un attribut est un identifiant ou de renommer un attribut e mail au lieu de email par exemple Exemple d annotations JAXB dans la classe Customer Xm1RootElement public class Customer Xm1ID private String id private String firstname private String lastname XmlAttribute name e mail private String email Gack Ces annotations permettent alors de g n rer le document XML suivant partir de la classe et inversement ARCHITECTURE Design pattern Proxy Le Proxy tr s utilis pour la gestion d objets distri bu s ajoute un niveau de redirection vers une m thode d un objet L id e est de construire un Proxy capable de communiquer avec un objet dis tant sans que l appelant fasse de diff rences entre un acc s local ou un acc s distant 4 JAX RPC JAX RPC Java API for XML based Remote Proce dure Call est une API permettant de cr er des ser vices et clients web bas s XML et RPC http java sun com webservices jaxrpc index jsp
431. ss 68 89 93 95 127 129 195 223 254 279 Category 81 86 89 90 123 131 280 category 139 188 CreditCard 75 89 96 99 223 248 253 254 279 Customer 74 89 93 127 128 195 206 223 254 279 cycle de vie 86 Item 89 92 131 188 221 Order 77 83 89 96 223 254 279 280 281 282 OrderLine 89 96 98 254 279 282 Product 81 86 89 91 131 188 entity beans 2 x 67 315 BMP Bean Managed Persistence 315 CMP Container Managed Persistence 315 EJBHome 316 EJBLocalHome 316 EntityBean 317 entity manager 105 110 clear 112 115 createQuery 112 129 find 112 114 129 flush 112 116 merge 112 114 116 129 254 persist 112 113 116 129 254 remove 112 116 129 exception 122 205 application 122 CreditCardException 123 133 253 RemoteException 107 systeme 124 ValidationException 124 129 133 148 206 extension css 160 186 ear 62 152 209 jar 152 209 jsp 162 174 jspf 162 jspx 162 war 152 209 F faces config xml 177 180 209 FacesServlet 177 185 FOP 283 G g n riques 26 28 81 82 GlassFish 48 52 55 153 asadmin 54 153 293 303 configurer le pool de MDBs 274 cr ation d un domaine 55 cr ation d un pool de connexion 57 305 cr ation d une source de donn es 58 306 cr ation de loggers 60 309 cr ation des ressources JMS 59 JNDI 155 232 logs 61 153 258 mots de passe 56 param tres JNDI 140 pool de connexions 57 GoF Gang of Four 41 H
432. ss est d fini Il est ensuite utilis pour tracer l entr e et la sortie de la m thode tout comme pour ajouter des traces dans le code Il faut cependant faire attention au nombre de traces que vous ajoutez dans le code ainsi qu leur niveau de s v rit Il faut garder en t te que potentiellement une journalisation se solde par un acc s disque pour crire dans un fichier Cela peut donc avoir des r percussions en termes de performances Dans ce cas veillez profiter des diff rents niveaux de criticit pour renseigner bon escient vos traces et d finir correctement ce degr pour limiter le stockage sur disque http www onjava com pub a onjava 2002 06 19 log html http java sun com j2se 1 5 0 docs api java util logging package summary html Ci apr s le diagramme de classes du stateless bean agissant sur le bon de commande order entity com yaps petstore stateless com yaps petstore lt lt interface gt gt 0 1 OrderRemote findOrder orderld Long Order deleteOrder order Order void findOrders List lt Order gt lt lt interface gt gt OrderLocal validateCreditC ard CreditCard creditC ard createOrder Order order Order lt lt Session Bean gt gt OrderBean em EntityManager lt lt entity gt gt CreditCard Les m thodes du bon de commande tant troitement li es au panier lectronique leurs impl mentations seront d crites dans le
433. ss gt javax faces webapp FacesServlet lt servlet class gt lt load on startup gt 1 lt load on startup gt lt servlet gt lt servlet mapping gt lt servlet name gt Faces Servlet lt servlet name gt lt url pattern gt faces lt url pattern gt lt servlet mapping gt 4 4 On d clare la FacesServlet La servlet est invoqu e lorsqu une ressource poss de l extension faces 177 7 Interface web Les Cahiers du Programmeur Java EE 5 APPROFONDIR Un bean Un bean est une classe Java qui respecte la sp cifi cation JavaBeans un constructeur vide des m thodes publiques de lecture et de modification de ses attributs getXXX et setXXX etc gt http java sun com beans docs Managed bean La r f rence de l EJB est inject e Attributs priv s du managed bean accessibles uniquement via les m thodes publiques get et set M thode du bean Alias utilis pour la navigation JSF Nommer les managed beans Java EE n impose pas de r gles de nommage pour ses composants Toutefois il est commun de suf fixer les stateless beans par Bean En ce qui con cerne les managed beans pour ne pas r p ter le suffixe Bean on peut utiliser Controller ou Action Alias qui sera utilis dans les pages Classe Java devant tre prise en compte par JSF Champ d application du bean 178 Le managed bean La FacesServiet d l gue les traitemen
434. ssageProducer qui va permettre d envoyer un message aupr s d une destination La session permet aussi de cr er le message de type objet dans notre exemple Envoi d un message public class OrderBean implements OrderRemote OrderLocal Resource mappedName jms petstoreConnectionFactory private ConnectionFactory connectionFactory Resource mappedName jms topic order 2 private Topic destinationOrder private void publishOrder Order order Connection connection connectionFactory createConnection Session session connection createSession true Session AUTO_ACKNOWLEDGE MessageProducer producer session createProducer destinationOrder O ObjectMessage objectMessage session createObjectMessage QO objectMessage setObject order producer send objectMessage session close connection close Recevoir un message Le consommateur du message est le client capable d tre l coute d une file d attente ou d un Topic et de traiter les messages a leur r ception Si on ne veut pas bloquer le consommateur le m canisme d coute doit tre fait dans un thread 4 part En effet le client doit tre constamment l coute listener et l arriv e d un nouveau message il doit pouvoir le traiter Pour cela le thread doit appeler la m thode onMessage de l inter face javax jms MessageListener Celle ci permet la r ception asyn chrone des messages et ne dispo
435. st pas le cas reportez vous au chapitre suivant Interface web o l injection est expliqu e en d tail Reprenons notre exemple une classe a besoin de contacter un EJB Pour cela elle utilise JNDI pour obtenir une r f rence vers cet EJB Lorsque cette classe est ex cut e dans un conteneur EJB ou web le conteneur lui m me injecte cette r f rence Ce m canisme permet la classe de s affranchir des appels JNDI Depuis la premi re version de J2EE il existe un conteneur web pour ex cuter et g rer le cycle de vie des servlets et un conteneur EJB pour faire de m me avec les Enterprise Java Beans L Application Client Container apporte les m mes types de services c est dire la s curit le service de nommage l injection mais pour une application JSE Swing dans notre exemple Ainsi en d marrant l application l aide de la commande GLASSFISH_HOME bin appclient nous aurions pu nous affranchir du Service Locator et b n ficier de l injection offerte par l ACC Pour des raisons didactiques j ai pr f r utiliser JNDI pour l application cliente et l injection pour les composants serveurs Comment d velopper l application Swing Nous n aborderons pas les API Swing de l application mais nous nous int resserons plut t l architecture utilis e pour d corr ler la partie gra phique des appels EJB L interface graphique utilisera donc les deux design patterns Business Delegate et Service Locator pour s pare
436. st alors impossible de les interchanger si besoin Une autre possibilit beaucoup plus portable est d utiliser XML et les transformations XSL Nous avons vu dans le pr c dent chapitre qu en utilisant les annotations JAXB il tait facile de transformer une grappe d objets en flux XML C est ce que nous aurions pu faire avec l entity bean Order En plus des annotations JPA pour le rendre persistant nous aurions pu rajouter des annotations JAXB pour obtenir une repr senta tion XML du bon de commande Ensuite en effectuant une transforma tion XSL on aurait pu transformer ce flux en page web ou en document PDF Une fois le fichier PDF obtenu on peut alors utiliser l API javax print pour l envoyer vers une imprimante l utilitaire Open Source FOP Formatting Objects Processor est souvent utilis dans les projets pour simplifier les transformations XSL II permet tr s facilement de produire un document PDF SVG TXT etc partir d un document XML Fop gt http xmlgraphics apache org fop gt http Awww onjava com pub a onjava 2002 10 16 fop htm D autres outils d impression ReportCat http www netcat li java report printing library Java Print Dialog Framework http www softframeworks com RReport http www java4less com print_java_e htm Crystal Reports http www businessobjects com Listener JMS de l application Swing L interface homme machine doit elle aussi tre l coute du Topic En fait elle aff
437. standard de gestion de courriers lectroniques de JEE Elle permet d envoyer et de recevoir du courrier lectronique et de manipuler les messages en t te sujet corps pi ces jointes JavaMail n est pas un serveur de courrier en tant que tel mais plut t un outil pour interagir avec ce type de serveur Il peut tre vu comme un type de clients de messagerie au m me titre que Outlook Lotus Eudora etc Pour envoyer ou recevoir des messages JavaMail utilise diff rents proto coles comme Smtp Imap ou POP JAXB 2 0 JAXB est l acronyme de Java Architecture for XML Binding Cette API permet de g n rer des classes Java 4 partir de sch mas XML XSD et inversement Autrement dit il permet de convertir les fichiers XSD en classes Java Il est ensuite possible de manipuler le document XML au travers de ces classes Une fois de plus les annotations de Java 5 sont venues simplifier l utili sation de API JAXB En annotant un Pojo Plain Old Java Object on peut ensuite obtenir ses attributs au format XML Exemple d annotations JAXB XmlRootElement public class Adresse Xm11ID private Long identifiant private String rue Services web Comment faire dialoguer des logiciels crits dans des langages de pro grammation diff rents et fonctionnant sur des syst mes d exploitation divers et vari s La r ponse est simple en utilisant des services web Les services web permettent cette interop rabilit en s
438. stomer Customer customer Address address Customer findCustomer Long customerId Customer updateCustomer Customer customer Address address CustomerRemote Les m thodes de l interface distante permettent aux employ s de g rer les clients du syst me Remote public interface CustomerRemote Customer createCustomer Customer customer Address address Customer findCustomer Long customerId void deleteCustomer Customer customer Customer updateCustomer Customer customer Address address List lt Customer gt findCustomers CustomerBean La classe d impl mentation du stateless bean manipule les entity beans Customer et Address via l entity manager et JPQL TransactionAttribute value TransactionAttributeType REQUIRED Stateless name CustomerSB mappedName ejb stateless Customer public class CustomerBean implements CustomerRemote CustomerLocal PersistenceContext unitName petstorePU private EntityManager em public Customer authenticate String login String password if login null equalsClogin throw new ValidationException Invalid login Query query Customer customer query em createQuery SELECT c FROM Customer c WHERE c login login query setParameter login login customer Customer query getSingleResult 5 Traitements m tier if customer null 4 Si la recherche aboutit l objet customer est customer matc
439. sword gt lt classpath refid classpath gt lt sql gt lt target gt lt target name core depends clean build gt lt project gt Admin xml Dans ce fichier vous trouverez les taches d administration du serveur GlassFish La plupart utilise la commande asadmin de GlassFish Pour les ex cuter il suffit de taper la ligne de commande suivante ant f admin xml lt le nom de la t che gt Vous trouverez dans le fichier ci dessous la liste des t ches d administra tion que vous pouvez ex cuter lt xml version 1 0 gt lt project name Admin Petstore default list basedir gt lt property name application name value petstore gt lt property name home dir value basedir gt lt property name lib dir value home dir lib gt lt property environment env gt lt property name glassfish home value env GLASSFISH_HOME gt lt property name asadmin value glassfish home bin asadmin bat gt lt property name echo value false gt lt property name server host value localhost gt lt property name server port value 8080 gt lt property name server admin port value 8282 gt lt property name server jms port value 7676 gt lt property name server user name value admin gt lt property name server passwordfile value passwordfile gt lt property name db home value glassfish home javadb gt lt property name db lib v
440. t Les balises HTML Les balises HTML de JSF servent au rendu graphique Lid e est de s affranchir des balises HTML classiques et d utiliser celles de JSF pour avoir des pages portables selon les navigateurs r pondant des v ne ments et s int grant facilement aux traitements effectu s par le contr leur Dans les balises HTML de JSF il y a tout d abord celles qui vous per mettent d afficher ou de saisir du texte sous diff rentes formes outputText affiche un message ou le contenu d une variable alors que inputText d finit une zone de saisie et affecte la valeur un objet inputSecret est l quivalent pour les zones de saisie de mot de passe Lorsque vous validez un formulaire qui comporte des donn es erron es ou qu une exception syst me intervient il est n cessaire d en informer l utilisateur La balise message r pond cette fonctionnalit en affi chant les messages d erreurs sur la page Balise JSF Rendu graphique lt h outputText value cart customer lastname gt Smith lt h inputText value cart customer firstname gt 2 lt h inputSecret value account password maxlength 10 size 12 gt lt h message style color red gt Login lt h inputText value account login gt Login job Pwd lt h inputSecret value account pwd gt Pwd eee lt h commandButton value Sign In action account doSignIn type submit
441. t Le client d un EJB peut tre un programme de toute forme une appli cation avec ou sans interface graphique une servlet une JSP ou un autre EJB Comme nous le verrons dans les prochains chapitres les appels aux EJB dans l application YAPS Pet Store seront effectu s par le client graphique Swing et le client web au travers de JSF Cette couche de traitements inspir e du design pattern Fa ade agit donc comme un point d entr e unique pour les diff rents clients Le design pattern Fa ade Le design pattern Fa ade du GoF Gang of Four permet de fournir un point d entr e simple un syst me complexe Il introduit une interface pour d coupler les relations entre deux syst mes dans notre cas les interfaces graphiques et les objets persistants Gr ce ce design pat tern le code qui g re les appels aux diff rents objets est regroup un seul endroit et peut tre r utilis par diff rentes interfaces utilisateurs Le succ s de ce design pattern a son pendant pour les EJB o la pro bl matique r side dans son insertion dans un environnement distribu il s agit du pattern SessionFacade Comme les EJB s ex cutent dans un conteneur les appels sont donc r alis s distance C est pourquoi les objets doivent tre s rialis s puis transmis tra vers un r seau Le design pattern SessionFacade offre un point d entr e unique et permet donc de limiter les appels distants Dans notre architecture
442. t lt include name com yaps petstore uti 1 class gt lt include name com yaps petstore exception class gt lt fileset gt lt jar gt lt target gt lt target name yaps build ws jar gt lt echo message Creates the WebService jar gt lt jar jarfile yaps ws jar gt lt fileset dir yaps classes dir gt lt include name com barkbank class gt lt include name com petex class gt lt fi leset gt lt jar gt lt target gt 4 Cr e le jar contenant le stateful bean 4 Cr e le jar contenant les message driven beans 4 Cr e le jar contenant les entity beans 4 Cr e le jar contenant les classes utilitaires 4 Cr e le jar contenant les artefacts des servi ces web 297 B T ches Ant Les Cahiers du Programmeur Java EE 5 Cr e le war contenant l application web Cr e ear contenant toutes les librairies Package l application BarkBank Package l application PetEx 298 lt target name yaps build war gt lt echo message Creates the PetStore Web Application gt lt war destfile yaps war webxml yaps web inf dir web xml gt lt fileset dir yaps web dir gt lt include name jsp gt lt include name jspf gt lt include gif gt lt include 3pg gt lt include css gt lt fileset gt lt webinf dir yaps web inf dir gt lt include name fa
443. t de ses attributs avant l insertion et la mise jour en base de donn es Code de l entity bean Category package com yaps petstore entity catalog Entity Table name t_category public class Category implements Serializable Id GeneratedValue strategy GenerationType AUTO private Long id Column nullable false length 30 private String name Column nullable false private String description OneToMany mappedBy category cascade CascadeType REMOVE fetch FetchType LAZY OrderBy name ASC private List lt Product gt products PrePersist PreUpdate private void validateData 10 if name null equals name throw new ValidationException Invalid name if description null equals description throw new ValidationException Invalid description constructeurs accesseurs m thodes hashcode equals et toString Produit Chaque cat gorie d animaux domestiques est subdivis e en produits Ainsi la cat gorie chats contiendra les produits Siamois Persan Chartreux etc Lentity bean Product poss de un lien bidirectionnel avec la cat gorie il a donc un attribut qui lui fait r f rence Un produit contient une liste d articles tri e par nom et acc d e de mani re diff r e Code de l entity bean produit package com yaps petstore entity catalog Entity Table name t_product public class Product implements Serial
444. t la panoplie de tech nologies utilis es pour d velopper une application web Le mod le MVC de JSF nous permet de repr senter graphiquement les donn es contenues dans les entity beans Ceci est facilit par les managed beans qui d l guent les traitements aux EJB Stateless Le principe d injection qui facilite cette interaction va tre largement utilis dans les chapitres suivants chapitre YAPS PelSture Shopping Car L Mozilla Firefox Fichier dition Affichage Historique Marque pages Outils g a Iu antonio goncalves Search Account Cart Sian off YAPS Pet Store Yet Another Pet Store Birds Amazon Parrot ae Chihuahua ihuahua pogs Female Adult Update 5 Fish Rattlesnake Reptiles Male Adult Bulldog Spotless Male Puppy Update g 480 0 Rerriuve The YAPS Pel Slure Dern is d fictional sample application Gestion du panier lectronique Les internautes peuvent d sormais g rer leur compte client et visualiser le catalogue d animaux L tape suivante consiste autoriser ces clients acheter ces articles en ligne Ce chapitre nous pr sente la gestion du Caddie lectronique ou plus exactement comment ajouter des articles dans un panier virtuel et en modifier la quantit Ce panier est impl ment l aide d un stateful session bean AD HA v we a DS i SOMMAIRE Acheter des animaux en ligne G rer son panier lectronique
445. t Interface web si le serveur web souhaite garder un sou venir de l tat conversationnel En plus de la session HTTP Java EE poss de un autre moyen de stocker et de g rer cet tat les EJB Stateful L application YAPS Pet Store utilise un stateful session bean pour impl menter son panier lectronique RETOUR D EXPERIENCE Stateful EJB vs HttpSession La plate forme JEE poss de deux technologies lui permettant de stocker l tat d une application web les sessions HTTP et les stateful session bean Il est parfois difficile de faire le choix entre les deux lorsqu on a des donn es a stocker durant une session utilisateur Voici une r gle simple pour les diff rencier la session HTTP est plut t utilis e pour stocker la logique de pr sentation alors que le stateful stocke la logique m tier De plus avec le stateful cet tat est accessible par les autres composants et non uniquement par le client web HTTP Session Object vs Stateful EJB http webservices sys con com read 42885 htm Stateful session bean Par opposition aux stateless beans sans tat les stateful session beans avec tat associent les requ tes un client sp cifique unissant client et bean dans une relation un un Ce type de composant peut aussi fournir un ensemble de m thodes m tier mais il dispose en plus de la possibilit de conserver des donn es entre les diff rents appels d un m me client Une instance est donc d di e un cl
446. t ejb jar gt Un autre fichier de description propre au serveur d applications dans notre cas jboss xm1 permet de donner un nom JNDI l EJB afin qu il puisse tre appelable par un client Le composant He11oBean se nomme donc ejb Hello Fichier jboss xml lt jboss gt lt enterprise beans gt lt session gt lt ejb name gt Hel loBean lt ejb name gt Q lt jndi name gt ejb Hello lt jndi name gt lt session gt lt enterprise beans gt lt jboss gt Il faut ensuite compiler les classes et les packager avec les descripteurs XML dans un jar pour pouvoir d ployer EJB Pour interagir avec ce composant il faut d velopper une classe cliente qui utilise JNDI pour retrouver l interface du session bean Une fois l interface obtenue on peut appeler les m thodes m tier Classe utilisant le stateless bean public class Main public static void main String args InitialContext ic null try Properties props new Properties props setProperty java naming factory initial org jnp interfaces NamingContextFactory props setProperty java naming factory url pkgs org jboss naming org jnp interfaces props setProperty java naming provider url Tocalhost ic new InitialContext props Object objRef HelloHome ic lookup ejb Hello HelloHome home HelloHome PortableRemoteObject narrow CobjRef HelloHome class Hello hello home create System out printin h
447. t lt executionEnvironment gt gt 45 lt lt extend gt gt 3 lt lt interface gt gt 133 lt lt Session Bean gt gt 133 Struts 38 168 Swing 29 138 Look amp Feel 146 synchrone 34 262 T thread 262 TopLink 32 49 67 154 transaction 120 121 acidit 120 explicite 120 JMS 268 U UDDI Universal Description Discovery and Integration 237 UEL 169 175 UML Unified Modeling Language 41 50 attribut d riv 93 classes 127 composants 133 diagramme d activit s 9 diagramme d tats 87 diagramme de cas d utilisation 3 diagramme de classes 89 90 diagramme de d ploiement 45 diagramme de paquetages 42 diagramme de s quences 144 les cr ateurs du langage 2 les diff rents liens 130 paquetage 42 sous syst me 42 st r otypes 96 visibilit 130 URL 236 V variable ANT_ HOME 52 54 AS_ADMIN_PASSWORD 56 classpath 151 GLASSFISH_HOME 54 141 JAVA_ HOME 51 54 path 52 Visual Paradigm XII 50 88 W W3C 30 237 web xml 209 232 WML Wireless Markup Language 169 175 WSDL Web Service Description Language 39 237 256 wsgen 245 251 WS I Web Services Interoperability 237 wsimport 247 251 255 X xDoclet 67 XHTML eXtensible Hyper Text Markup Language 30 162 XML eXtensible Markup Language 30 36 238 240 283 DOM 240 SAX 240 XML RPC 236 XSD XML Schema Definition 30 38 238 244 256 XSL 283 Y YAPS Pet Store 2 42 63 250 251 329 Index
448. t me distribu le service de nommage est un service fonda mental Il a pour vocation d associer un nom un objet et de permettre la recherche de cet objet partir de son nom Java Naming and Directory Interface JNDI fournit les fonctionnalit s de nommage et d annuaire aux applications crites en Java JNDI est une abstraction d annuaire et peut donc tre utilis sur LDAP NIS ou DNS par exemple Ce service Rapel Le nom JNDI du CatalogBean Dans cet exemple le nom du stateless session bean est ejb stateless Catalog Si vous vous reportez au code de l EJB CatalogBean vous verrez que ce nom est le m me que celui d fini dans l annotation Stateless Stateless mappedName ejb stateless Catalog Affichage des informations d une cat gorie ApPROFONDIR JNDI gt http java sun com products jndi 139 6 Ex cution de l application Les Cahiers du Programmeur Java EE 5 4 LDAP NIS et DNS LDAP ou Lightweight Directory Access Protocol est un protocole qui permet d acc der des annuaires r pondant la norme x500 NIS Network Information Service est le service qui permet certaines informations d tre connues par toutes les machines disponibles sur un r seau Un DNS Domain Name System est un serveur qui permet de faire correspondre une adresse web URL avec une adresse IP CONFIGURATION jndi properties Au lieu de coder en dur les param tres d acc s JNDI
449. t A href gt lt product getName gt lt A gt lt BR gt lt product getDescriptionQ gt lt TD gt lt TR gt lt O lt TABLE gt La directive import poss de le m me comportement que l import en Java Dans notre cas elle permet d importer l entity bean Product la classe java util List et d autres classes comme celles de JNDI Gr ce aux scriptlets on peut inclure du code Java dans la page et par exemple rechercher un EJB dans JNDI puis linvoquer pour qu il retourne la liste des produits l aide d une boucle for on affiche dans un tableau HTML le nom du produit ainsi que sa description en utilisant l expression lt Les balises JSP Pour d clarer ex cuter ou manipuler des objets Java les JSP utilisent plusieurs types de balises e La directive lt X gt est une instruction ins r e dans des balises HTML sp cifiques lt page import java util Date gt e La d claration lt permet d ins rer du code d claratif dans la JSP Elle peut tre utilis e pour d finir une variable globale la classe ou pour cr er des m thodes Java lt 4 int i 0 gt e Le scriptlet lt gt est utilis pour placer du code dans la JSP C est g n ralement l l ment utilis pour placer tout code Java sauf les m thodes et les variables de classe lt int i 0 out printin On peut aussi afficher une valeur de variable i gt e L express
450. t String Object gt cache public ConnectionFactory getConnectionFactory String connFactoryName throws ServiceLocatorException ConnectionFactory factory ConnectionFactory getRemoteObject connFactoryName return factory public Destination getDestination String destinationName Destination destination Destination getRemoteObject destinationName return destination private synchronized Object getRemoteObject String jndiName throws ServiceLocatorException Object remoteObject cache get jndiName if CremoteObject null try remoteObject initalContext lookup jndiName cache put jndiName remoteObject catch Exception e throw new ServiceLocatorException e return remoteObject L application Swing na plus qu utiliser le ServiceLocator pour obtenir la fabrique de connexions et la destination sur laquelle couter Reception d un message public class YapsMsgListener implements MessageListener private ConnectionFactory connectionFactory private Topic destinationOrder private void receiveOrder Order order Pour simplifier la lecture du code la reception asynchrone l aide d un thread n est pas impl ment e connectionFactory ServiceLocator getInstance getConnectionFactory jms petstoreConnectionFactory destinationOrder ServiceLocator getInstance getDestination jms topic order Connection connection connectionFactory
451. t d un entity bean tait relativement simple et surtout identique n importe quelle classe Java hormis l utilisation de quelques annotations Pour un stateless bean c est tout aussi facile puisqu il suffit de d velopper une classe ainsi qu une ou deux interfaces Les interfaces Un stateless bean peut avoir une interface distante et ou locale Linter face distante javax ejb Remote permet aux clients distants d invoquer des m thodes de l EJB Les param tres des m thodes sont ainsi copi s s rialis s puis transmis l EJB On appelle ce m canisme l appel par valeur cal by value Linterface locale javax ejb Loca1 est utilis e par les objets r sidants dans la m me JVM que l EJB Les param tres des m thodes ne sont pas recopi s mais pass s par r f rence cal by reference La plupart de nos stateless session beans utilisent les deux interfaces En effet application YAPS Pet Store est constitu e d une interface graphique de type client lourd Swing utilis e par les employ s et qui s appuiera sur les interfaces Remote ainsi qu une application web h berg e sur le m me serveur que les EJB qui quant elle utilisera les interfaces Local Les deux interfaces peuvent exposer des m thodes diff rentes Interface distante L interface distante d finit les m thodes de l EJB accessibles en dehors du conteneur application Swing utilis e par l employ Cette interface est annot e p
452. t h3 gt Credit Card lt h3 gt lt h outputText value Credit card number gt lt h inputText value 4 cart creditCard creditCardNumber gt lt h outputText value Type gt lt h selectOneMenu value 4 cart creditCard creditCardType gt lt f selectItem itemValue visa itemLabel Visa gt lt f selectItem itemValue visa_gold itemLabel Visa Gold gt lt f selectItem itemValue master itemLabel Master Card gt lt f selectItem itemValue american itemLabel American Express gt lt h selectOneMenu gt lt h outputText value Expiry date MM YY gt lt h inputText value 4 cart creditCard creditCardExpDate gt lt h form gt lt f view gt n Lorsque cette page s affiche elle est pr initialis e par les donn es du client ainsi que son adresse de domiciliation Ces informations sont g r es et manipul es par le managed bean AccountController et non ShoppingCartController JSF a la possibilit d initialiser les attributs d un managed bean 4 partir d attributs d un autre managed bean Cette action se fait de mani re d clarative dans le fichier faces config xml Dans notre cas on veut initialiser l attribut customer et deliveryAddress du ShoppingCartController avec les valeurs des attri buts customer et homeAddress du AccountController YAPS PetStore Confirm Order Mozilla Firefox Cichier dition Affichage Historique Marque pages Qutis 2 C4 1m antonio goncalves
453. t ni EJB ne d pendent de la r ponse directe de l autre et n ont donc pas leurs traitements fig s durant l attente d une r ponse EJB 3 0 Les Entreprise Java Beans ou EJB sont des composants serveurs qui res pectent les sp cifications d un mod le dit par Sun Ces sp cifications d finissent une architecture un environnement d ex cution un conte neur et un ensemble d API Le respect de ces sp cifications permet d utiliser les EJB ind pendamment du conteneur dans lequel ils s ex cu tent Ce dernier fournit un ensemble de fonctionnalit s comme la ges tion du cycle de vie de l EJB la s curit l acc s concurrent et les transactions Le but des EJB est de faciliter la cr ation d applications distribu es pour les entreprises Pi ce ma tresse de l architecture JEE les EJB 3 apportent des modifica tions notables dans le mode de d veloppement et int grent de nom breuses nouveaut s notamment en ce qui concerne la persistance Le passage des EJB 2 1 en 3 0 apporte une simplification radicale en sup primant les descripteurs de d ploiement les appels JNDI etc et laisse place aux annotations Il existe deux grandes familles d EJB entit et session Les EJB sessions sont diff renci s entre EJB sans tat avec tat ou s ex cutant en mode asynchrone EJB Stateless Les EJB sans tat ou stateless session beans ne fonctionnent que de fa on ph m re Une fois qu un client a dem
454. t set Cet exemple de code repr sente une classe Address Notez la pr sence d annotations plusieurs endroits dans la classe Tout d abord l annota tion javax persistence Entity permet JPA de reconnaitre cette classe comme une classe persistante et non comme une simple classe Java Lannotation javax persistence Id quant elle d finit l identifiant unique de l objet Elle donne l entity bean une identit en m moire en tant qu objet et en base de donn es via une cl primaire Les autres attri buts street1 street2 country seront rendus persistants par JPA en appliquant les param trages par d faut le nom de la colonne est identique celui de l attribut et le type String est converti en varchar 255 Cet exemple ne comporte que des attributs mais la classe peut aussi avoir des m thodes m tier comme nous le verrons par la suite Notez que cet entity bean Address est une simple classe java Pojo Elle nimpl mente aucune interface se contente d tre annot e par javax persistence Entity et d avoir un identifiant unique javax persistence Id Pour tre un entity bean une classe doit au minimum utiliser ces deux annota tions et poss der un constructeur par d faut Gr ce ces annotations JPA peut synchroniser les donn es entre les attributs de l entity bean Address et les colonnes de la table Address Ainsi si l attribut zipcode est modifi par l application JPA se charg
455. t un autre ordonnanceur respectant le paradigme MVC gt http tapestry apache org APPROFONDIR JSF gt http java sun com javaee javaserverfaces gt http Awww jsfcentral com 2 Kito Mann JavaServer Faces in Action Manning 2005 168 RETOUR D EXPERIENCE La s paration des traitements et de la pr sentation dans les quipes Nous venons de voir l importance du design pattern MVC et de la r par tition des responsabilit s entre traitements et pr sentation Ce d cou page se fait aussi naturellement dans une quipe de d veloppement On y retrouve ainsi des d veloppeurs Java s occupant de traitements et des designers concevant la charte graphique de l application c est dire les pages web Ces deux technologies bien que compl mentaires ont du mal coexister chez la m me personne Il est difficile de demander un d veloppeur Java de ma triser l art graphique et inverse ment De plus un designer risque de rencontrer des difficult s dans la manipulation de pages JSP lorsque celles ci contiennent du code Java puisqu il ne travaille habituellement qu avec des langages de balises JSTL pr sente l avantage de permettre au designer de continuer uti liser des balises XML pour la construction de ses pages Les taglibs et Custom Tags cr ent une nouvelle couche d abstraction qui facilite la communication entre les deux langages JSF Toutes les technologies que nous venons de voir sont n cessai
456. talog Order Look amp Feel Al Category Category Identifier h A Lists all the categories N Fish lly Fis ID_ Name Description 5 Birds Any of the class Aves of warm blooded egg laying fe Description fany of nu 4 Cats _ Small carnivorous mammal domesticated since ear 2 Dogs A domesticated carnivorous mammal related to the f 1 Fish Any of numerous cold blooded aquatic vertebrates c 3 Reptiles Any of various cold blooded usually egg laying verte Create Create View Update Swing sera utilis dans cet ouvrage pour d velopper une partie de linter face utilisateur Toutefois cette biblioth que tr s riche et parfois com plexe ne sera pas enseign e dans ce livre JNDI 1 5 Ce composant appel commun ment service de nommage est un service fondamental dans nimporte quel syst me informatique Il permet d associer des noms des objets et de retrouver ces objets gr ce leurs noms Java Naming and Directory Interface JNDI fournit les fonction nalit s de nommage et d annuaire aux applications crites en Java Omnipr sent dans la version J2EE 1 4 JNDI se fait plus discret et est int gr directement dans le JSE 5 Il continue tre une pi ce ma tresse mais de mani re plus transparente JDBC 3 0 JDBC Java Data Base Connectivity est une API permettant l acc s des bases de donn es relationn
457. tances d EJB et de g rer leur cycle 4 Pojo Pojo est un acronyme qui signifie Plain Old Java Object Ce terme est principalement utilis pour faire r f rence la simplicit d utilisation d un objet Java en comparaison avec la lourdeur d utili sation d un composant EJB ANNOTATIONS Java EE Vous avez peut tre remarqu dans les extraits de code pr c dents l utilisation des annotations Java pour le monde JEE Entity MessageDriven Stateless Stateful Comme nous le verrons dans les chapitres suivants il en existe bien plus encore 35 2 Architecture de l application Les Cahiers du Programmeur Java EE 5 4 HTTP HTTP ou Hypertext Transfer Protocol est un protocole de transfert de pages HTML sur le Web Sa fonction premi re est d tablir la connexion avec un serveur qui contient la page que l on veut voir afficher et de rapatrier cette page sur le poste de l internaute AURE Servlet et JSP 1 Jean Luc Deleage JSP et servlets efficaces Dunod 2005 A Anne Tasso S bastien Ermacore Initiation JSP Eyrolles 2004 36 de vie Il est l interm diaire entre PEJB et le serveur d applications Il fournit des services tels que le transactionnel la s curit la concurrence la distribution le service de nommage des EJB JNDJ et l ex cution Les EJB interagissent avec le conteneur de plusieurs mani res et peuvent ex cuter des traitements d clench s automatiqu
458. tateless Le code ci dessous attribue le nom ejb stateless Customer au CustomerBean Stateless mappedName ejb stateless Customer public class CustomerBean 110 Code de l annotation javax ejb Stateless package javax ejb Target value TYPE Retention value RUNTIME public interface Stateless String name Q default String mappedName default String description default La classe de notre exemple pr c dent impl mente les deux interfaces En EJB 3 0 la classe a le choix entre impl menter les interfaces ou les d finir gr ce aux annotations Remote et Local Remote value CustomerRemote class Local value CustomerLocal class Stateless public class CustomerBean CG L avantage d impl menter les interfaces est que le compilateur peut d celer les m thodes qui seraient d finies dans les interfaces mais pas dans la classe d impl mentation Cela r duit donc les erreurs de d ploiement Entity manager Comme nonc en introduction de ce chapitre un des r les de la couche de traitements est de manipuler les entity beans Ceux ci sont de simples classes Java que l on peut instancier l aide de l op rateur new En revanche quand on veut les persister en base de donn es il faut utiliser un entity manager Pour ceux d entre vous qui ont d j manipul les entity beans 2 x vous vous souvenez peut tre qu ils utilisent une Home Interface Cette inter
459. tation au format XML Les langages d expressions EL et UEL que nous verrons par la suite permettent d acc der simplement aux objets A tout cela JSF apporte plusieurs fonctionnalit s destin es r soudre les probl mes inh rents la programmation web JSF se compose d un ensemble d API fournissant notamment une s paration nette entre la couche de pr sentation et les autres couches e une librairie de composants graphiques un mode de programmation v nementiel pour ces composants e la navigation entre pages le traitement des formulaires et leur validation e la gestion des exceptions et l affichage de messages d erreur e la conversion des types primitifs provenant des donn es d applica tions vers des objets de plus haut niveau String vers Objets e la gestion de clients h t rog nes HTML WML XML l ind pendance des protocoles HTTP WAP e la cr ation ou lenrichissement de composants graphiques custom e la gestion de l tat des composants entre requ tes e la diff rence de comportement entre navigateurs Ce livre n a pas la pr tention de couvrir toutes les particularit s de JSF Nous ne nous attarderons que sur les balises graphiques les traitements et la navigation entre pages Les balises JSF JSF fournit aux d veloppeurs une large palette d outils leur permettant dimpl menter des applications web en respectant un mod le bas sur des co
460. tations de callback 218 La gestion du Caddie de YAPS Pet Store 219 Le stateful bean 219 ShoppingCartLocal 219 ShoppingCartBean 220 Cartltem 221 Paquetages du stateful bean 221 Le managed bean 222 Les pages web 224 La navigation 224 XV Table des mati res Les Cahiers du Programmeur Java EE 5 La page de contenu du Caddie 226 La page de saisie des donn es de livraison et de paiement 227 La page r capitulative 230 Architecture 231 Ex cuter l application 231 En r sum 232 9 CHANGES B2B 2eme 235 Les standards autour des services web 236 Soap 236 UDDI 237 WSDL 237 JAX WS 2 0 238 JAXB 2 0 239 Services web 240 Exemple de service web 241 Annotations JAX WS 241 Le service 241 La m thode 242 Les param tres de la m thode 243 Comment d velopper un service web 245 D velopper la classe du service web 245 G n rer les artefacts serveurs 245 G n rer les artefacts clients 247 Appeler un service web 247 La vision globale 248 Les services web utilis s par YAPS Pet Store 249 La validation des cartes de cr dit 250 Avertir le transporteur 251 Appel des services web 252 Paquetages des diff rents services web 255 Architecture 255 Ex cuter l application 255 Compiler 256 Packager 256 D ployer 257 Tester les services web avec GlassFish 257 Ex cuter 258 En r sum 259 10 TRAITEMENTS ASYNCHRONES scesesesrsesssrseestse
461. te m thode qui affecte la liste d objet null 218 gt L tat inexistant signifie que l EJB n a pas encore t instanci et n existe pas en m moire Au premier appel d une m thode le cycle de vie s ini tialise et reste d di un seul client Lorsqu il est l tat pr t le stateful bean garde son tat conversationnel avec le client et r pond ses requ tes Pendant sa dur e de vie il se peut qu il ait des moments d inac tivit Alors pour lib rer des ressources le conteneur peut d cider de le supprimer de la m moire et de le passiver pour une utilisation ult rieure Il le r activera l interception d une nouvelle requ te d un client Les annotations de callback Tout comme les entity et les stateless beans le passage d un tat l autre peut tre intercept gr ce des annotations de callback Il existe quatre annotations utilisables par les stateful beans e javax annotation PostConstruct javax annotation PreDestroy javax ejb PostActivate javax ejb PrePassivate Apr s avoir instanci un stateful bean le conteneur ex cute les m thodes annot es par PostConstruct Dans le cas inverse l annotation PreDestroy est appel e lorsque le conteneur supprime d finitivement PEJB Deux autres annotations permettent d intercepter le moment pr c dant une passivation PrePassivate ou succ dant une activation PostActivate Le d veloppeur peut ut
462. tecture de Java SE 5 26 Dent D ploiement Java Web Start Java Plug in Pr sentation des langages utilis s Java SE 5 Avant de parler de Java Enterprise Edition 5 JEE il est n cessaire de pr senter bri vement le langage sur lequel s appuie cette plate forme Java 5 0 La version 5 du JSE ou Java Standard Edition est une r vision majeure du langage Java cr en 1995 par l quipe de James Gosling Cette version apporte de nombreuses nouveaut s telles que l autoboxing les annotations les g n riques une nouvelle boucle d it ration les types num r s les m thodes arguments variables les imports statiques et bien d autres encore De nouveaux outils ainsi que de nouvelles API ont vu le jour ou ont t consid rablement enrichis comme l API de concur rence l API de thread la supervision de la JVM etc Langage Java Outils et java javac javadoc apt jar javap I JPDA JConsole API d outils S curit it8n RMI IDL D ploiement Debug Script JVM Ti ke Interface graphique Librairies d int gration Autres Sur gt H Librairies lang util Collections Concurrence JAR Logging JMX lang et util pr f rence R f rence R flexion JVM Java Hotspot Client VM Java Hotspot Serveur VM La figure 2 1 vous montre les composants qui constituent Java SE 5 Cet ouvrage na pas la pr tention de vous expliquer toutes les nouveaut s du l
463. ter ses informations en cliquant sur le lien Account Cette page de consultation affiche en lecture seule les informations du client Il peut ensuite les modifier en cliquant sur le lien Edit your account information figures 1 13 et 1 14 YAPS PetStore Create Customer Mozilla Firefox Eicher Edition fichage Aler Marque pages Outils 2 Mes antonio goncalves YAPS Pet Store Yet Another Pet Store Pets Update Your Account Birds Cats Personal intormation Dogs Lagin james Fish Firstname James Reptiles Lastname Rorisson Email brOmymail cnm Telephone N2154 254 147 Date of birth dl MM yyyy 24 12 196 Streotl Filherdun Road Stroctz High Wycombe City New York State Zipcode 1568 Country USA Acheter des articles R sum Permet un client d acheter des articles Acteurs Client BarBank Pr conditions Le client doit tre connect au syst me cas d utilisation Se connecter et se d connecter Description Un client visualise le catalogue voir cas d utilisation Visualiser les arti cles du catalogue ou recherche un animal domestique voir cas d utili sation Rechercher un article Lorsqu il est int ress par un article il Figure 1 14 Le client peut mettre a jour ses coordonn es 17 1 Pr sentation de l tude de cas Les Cahiers du Programmeur Java EE 5 18 lui suffit de cliquer sur u
464. terfaces ainsi que la classe d impl mentation CustomerBean Celle ci utilise les entity beans Customer et Address customer com yaps petstore stateless lt lt interface gt gt CustomerLocal authenticate login String password String Customer createCustomer customer Customer homeAddress Address Customer findC ustomer customerld Long Customer updateC ustomer customer Customer homeAddress Address Customer entity com yaps petstore lt lt interface gt gt CustomerR emote createC ustomer customer Customer homeAddress Address Customer findC ustomer customerld Long Customer deleteCustomer customer Customer void updateCustomer customer Customer homeAddress Address Customer findCustomers List lt Customer gt lt lt Session Bean gt gt CustomerBean em EntityManager Notez les diff rences entre les deux interfaces l interface CustomerLocal permet l authentification en effet seule l interface web le permet alors que l interface distante permet aux employ s d afficher la liste de tous les clients et d en supprimer CustomerLocal Les m thodes r f renc es dans l interface locale sont utilisables par l interface web Elles permettent au client de se cr er un compte de s authentifier de consulter et de mettre jour ses informations lt lt entity gt gt Customer UML Les classes En UML une classe est repr se
465. tion YAPS Pet Store 4 JSR JSR ou Java Specification Requests est un sys t me normalis ayant pour but de faire voluer la plate forme Java en donnant la possibilit la communaut de cr er de nouvelles sp cifications 32 Bien que pr dit un bel avenir les promesses de cette plate forme ne sont pas toujours honor es Les syst mes d livr s sont souvent trop lents et compliqu s et le temps de d veloppement est quant lui fr quemment disproportionn par rapport la complexit des demandes utilisateurs Heureusement au deuxi me trimestre 2006 JEE 5 est venu simplifier la pr c dente version J2EE 1 4 S appuyant sur la nouvelle mouture du langage Java et s inspirant de frameworks Open Source certains compo sants de la version 5 de JEE ont t totalement r crits dans le but de simplifier la plate forme La figure 2 3 d crit les diff rents conteneurs sp cifi s dans Java EE 5 ainsi que les sp cifications qui peuvent y tre employ es Les paragra phes suivants nous donnent un bref descriptif des sp cifications utilis es pour le d veloppement de l application YAPS Pet Store Certaines ont vu le jour avec la version 5 de JEE d autres ont t compl tement rema ni es pour simplifier le travail des d veloppeurs JPA 1 0 Depuis les d buts de J2EE le mod le de persistance ne cesse d voluer et de s engluer de version en version Les entity beans 1 0 ont t com pl te
466. tion du serveur GlassFish nous avons cr une fabrique de connexions jms petstoreConnectionFactory ainsi qu une file d attente jms topic order ANNOTATION L injection avec Resource annotation Resource permet d injecter la r f rence d une ressource dans un attribut de classe Dans nos exemples nous l utilisons pour r f rencer des destinations ou fabrique de con nexions JMS Mais la m me annotation peut tre utilis e pour r f rencer une DataSource un pool de connexions JDBC ou tout autre objet d clar dans JNDI 265 10 Traitements asynchrones Les Cahiers du Programmeur Java EE 5 Injection de la fabrique de connexions Resource mappedName jms petstoreConnectionFactory private ConnectionFactory connectionFactory Resource permet d injecter des ressources externes dans notre cas la fabrique de connexions Code de l annotation javax annotation Resource package javax annotation Cette annotation s applique une classe une gt Target TYPE FIELD METHOD Retention RUNTIME m thode ou un attribut public interface Resource Nom de la ressource JNDI gt String name default Classe de la ressource ex gt Class type default Object class javax sql DataSource pour une source de donn es Informe le serveur du composant responsable de gt AuthenticationType authenticationType default CONTAINER l authentification pour acc der la resso
467. tring state Column name zip_code nullable false length 10 4 Uattribut zipcode est mapp dans la colonne private String zipcode Column nullable false length 50 private String country accesseurs get set public Long getId Q return id public String getStreet1 return street1 public void setStreet1 String street1 this street1 street public String getStreet2 return street2 public void setStreet2 String street2 this street2 street2 Zip_code de 10 caract res de long 4 Il n y a pas de m thode setId puisque ce n est pas l application qui g n re l identifiant mais la base de donn es 4 Accesseurs des attributs 4 Objets persistants DDL obtenu pour cet entity bean CREATE TABLE T_ADDRESS ID BIGINT NOT NULL CITY VARCHAR 100 NOT NULL STATE VARCHAR 255 n ifi STREET2 VARCHAR 255 REMARQUE Un setter pour l identifiant ZIP_CODE VARCHAR 10 NOT NULL Notez que dans notre exemple il n y a pas de STREET1 VARCHAR 255 NOT NULL m thode setIdQ En effet l identifiant est COUNTRY VARCHAR 50 NOT NULL g n r automatiquement gr ce l annotation PRIMARY KEY ID GeneratedValue Nous n avons pas besoin de pouvoir changer cette valeur Comme nous pouvons le constater JPA permet de modifier la DDL de la table au travers des annotations RETOUR D EXPERIENCE G n rer la base de donn es Avec JPA il est possible d
468. ts et les appels aux managed beans Un managed bean est une classe dont la vie est g r e par JSF En fait JSF instancie le bean en fonction de son champ d application scope le stocke dans le contexte JSF et l invoque lorsque n cessaire Ci apr s un exemple de managed bean Exemple de managed bean public class CatalogController GEIB private CatalogLocal catalogBean private String keyword private List lt Item gt items public String doSearch O items catalogBean searchItems keyword O return items found Getters amp setters des attributs Ce managed bean CatalogController d clare deux attributs priv s et une m thode publique Celle ci appelle la m thode searchItems du stateless session bean CatalogBean qui effectue r ellement les traite ments m tier La cha ne de caract res retourn e par la m thode est utilis e pour la navigation entre pages Nous l expliquerons par la suite Comme vous pouvez le voir cette classe est tout fait simpliste En fait pour devenir managed bean et tre pris en compte par JSF il faut tout simplement la d clarer dans le fichier faces config xm1 Exemple de d claration de managed bean lt managed bean gt lt managed bean name gt catalog lt managed bean name gt lt managed bean class gt com yaps petstore jsf CatalogController lt managed bean class gt lt managed bean scope gt session lt managed bean scope gt
469. tures multicou ches Ces couches sont pr sentation des donn es affichage sur le poste de travail des don n es du syst me et interaction avec l utilisateur traitements m tier ensemble des r gles m tiers de l application e acc s aux donn es manipulation et conservation des donn es Ci apr s un diagramme de paquetages UML repr sentant ces trois cou ches Chaque sous syst me contient les technologies Java EE 5 utilis es dans l application Pr sentation Acc s aux donn es HTML JSP Servlet JSF JSTL Swing RMI JPA JDBC Figure 2 6 Architecture JEE en trois couches Architecture applicative Le pr c dent mod le en trois couches peut tre affin pour tre plus fid le l architecture finale de l application YAPS Pet Store Ci apr s un diagramme de paquetage d crivant les couches de l application Pr sentation Int rop rabilit Persistance Base de donn es relationnelle 4 Traitement m tier Vv Stateless Bean Entity Bean Stateful Bean MDB Mapping Objet Relationnel Navigation tee JavaMail dite Figure 2 7 JMS JDBC Couche de pr sentation La couche de pr sentation est la partie visible de l application qui permet un utilisateur d interagir avec le syst me Elle relaie les requ tes de Putilisateur destination de la couche m tier et en retour lui pr sente les r sultats renvoy s par les traitements On parle alors d interface hom
470. u tes de la part des clients web et ex cute un certain nombre d tapes pour pr parer la r ponse qui sera affich e par le navigateur Les actions et la navigation entre pages sont param trables par fichier XML faces config xm1 Pour que cette servlet puisse intercepter toutes les requ tes concernant JSF elle doit tre d clar e dans le fichier web xm1 de l application D clarer les servlets dans le fichier web xml Le fichier web xm1 est un fichier extr mement important dans une appli cation Java EE Aussi appel descripteur de d ploiement il contient les caract ristiques et param tres de l application ce qui inclut la descrip tion des servlets utilis es et leurs diff rents param tres d initialisation Chaque servlet doit tre d clar e dans l l ment XML lt servlet gt de la mani re suivante e lt servlet name gt est le nom interne de la servlet nom qui l identifie de fa on unique e lt servlet class gt est la classe Java associ e la servlet e lt load on startup gt demande que la servlet soit charg e d s le d marrage du serveur e lt servlet mapping gt effectue le lien entre l URL et la servlet e lt url pattern gt est l URL permettant de faire le lien avec la servlet Dans notre cas chaque URL ayant comme suffixe faces invoquera automatiquement la FacesServlet Extrait du fichier web xml lt servlet gt lt servlet name gt Faces Servlet lt servlet name gt lt servlet cla
471. u du panier c est dire une liste de CartItem Le diagramme suivant nous montre les classes et interfaces impliqu es dans la gestion du panier lectronique stateful com yaps petstore lt lt interface gt gt ShoppingCartLocal additem item Item void removeltem item Item void getC artltems List lt Cartitem gt lt lt Session Bean gt gt Hinitialize void quantity Integer item Figure 8 2 clean void 1 getSubT otal Float ShoppingCartLocal Les m thodes r f renc es dans l interface locale sont utilisables par l application web Elles permettent au client d ajouter des articles dans le panier lectronique de les supprimer d obtenir le prix total ou le con tenu du Caddie Ces actions se font uniquement au travers de l interface locale il n y a donc pas d interface distante Diagramme de classes du ShoppingCart 219 8 Gestion du panier lectronique Les Cahiers du Programmeur Java EE 5 Interface locale M thodes manipulant le contenu du Caddie lectronique Gr ce l annotation cette classe est identifi e comme tant un stateful bean qui se nomme ShoppingCartSB Le bean impl mente l interface locale Liste des articles contenus dans le panier Apr s initialisation de l EJB par le conteneur cette m thode est appel e Elle permet d instan cier la liste de CartItem Ava
472. u il d l gue au MDB le traitement du message et plus particuli rement la m thode onMessage Comme les autres EJB le MDB peut acc der tout type de ressources EJB JDBC mail etc Exemple de message driven bean Un MDB ne poss de pas d interface distante ou locale puisqu il n est pas utilis par un client Il est constitu d une seule classe Java qui doit tre annot e par javax ejb MessageDriven Pour r agir l arriv e d un message il doit impl menter la m thode onMessage javax jms Message d finie dans l interface javax jms MessageListener Il est associ une destination JMS c est dire une Queue pour les com munications point point ou un Topic pour les communications publi cation souscription La m thode onMessage est activ e la r ception d un message envoy par un client JMS Classe du message driven bean MessageDriven mappedName jms topic order public class OrderPrinterBean implements MessageListener public void onMessage Message message if message instanceof ObjectMessage ObjectMessage msg ObjectMessage message Order order Order msg getObjectQ printOrder order gestion des exceptions Comme la plupart des composants sp cifi s dans Java EE 5 les mes sage driven beans utilisent eux aussi les annotations Code de l annotation javax ejb MessageDriven package javax ejb Target TYPE Retention R
473. u la persistance des messages javax ejb ActivationConfigProperty est constitu e de cl s et de valeurs permettant une configuration plus fine d un MDB Code de l annotation javax ejb ActivationConfigProperty package javax ejb Target Retention RUNTIME 4 Cette annotation s applique MessageDriven a 273 10 Traitements asynchrones Les Cahiers du Programmeur Java EE 5 Cl de la propri t Valeur de la propri t GLASSFISH Les MDB stock s dans un pool Bien que les sp cifications n obligent pas les con teneurs a avoir un pool de message driven beans la plupart des serveurs d applications en utilise un pour augmenter les performances C est le cas de GlassFish qui les stocke dans un pool configurable Sa taille est param trable ainsi que sa taille mini male et maximale Cette configuration est faite via la console d administration menus Configura tion gt EJB Container gt MDB Settings Figure 10 4 Cycle de vie d un message driven bean 274 public interface ActivationConfigProperty String propertyNameO String propertyValue RETOUR D EXPERIENCE Int rop rabilit avec JMS Dans le pr c dent chapitre Echanges B2B nous avons vu les services web comme outils d interop rabilit avec des syst mes externes On peut aussi utiliser les MOM Middleware Oriented Messages pour le faire Imaginez une application externe d velopp e dans un langage diff rent
474. ucts jsp jstl index jsp gt http java sun com products jsp taglibraries html Shawn Bayern JSTL in Action Manning 2002 Si la JSP utilise un ou plusieurs tags de la biblio th que Core il faut le d clarer avec une directive taglib Gr ce au design pattern MVC la servlet invoque un EJB et transmet la liste des produits la JSP qui peut ensuite y acc der gr ce la balise jsp useBean La balise forEach it re la liste d objets La balise out affiche la valeur retourn e par l expression product name JSTL Les balises personnalis es JSTL poss de une API qui permet de cr er ses pro pres balises Custom Tags crites en Java et d crites en XML elles sont ensuite regroup es dans une biblioth que taglib pour tre r utilis es dans des JSP Cette extension de la technologie JSP est apparue partir de la version 1 1 de la sp cification 167 7 Interface web Les Cahiers du Programmeur Java EE 5 Outils Les frameworks web Struts est un des premiers frameworks Open Source pour d velopper des applications web bas sur le d coupage MVC gt http struts apache org Spring MVC est le composant de navigation web du framework Spring Son concept d inversion de contr le loC permet notamment de construire une architecture web avec des couches ind pen dantes les unes des autres gt http Awww springframework org docs reference mvc html Tapestry es
475. ue barkbank home resources gt name barkbank web inf dir value barkbank home web inf gt name barkbank generated src dir value barkbank home generated gt name barkbank classes dir value barkbank home classes production gt name petex build dir value petex home build gt name petex src dir value petex home src gt name petex web dir value petex home resources gt name petex web inf dir value petex home web inf gt name petex generated src dir value petex home generated gt name petex classes dir value petex home classes production gt name yaps client jar value yaps build dir application name jar gt name yaps utility jar value yaps build dir 1ib utility jar gt name yaps ws jar value yaps build dir 1ib ws interface jar gt name yaps entity jar value yaps build dir 1ib entity jar gt name yaps mdb jar value yaps build dir mdb jar gt name yaps stateless jar value yaps build dir stateless jar gt name yaps stateful jar value yaps build dir stateful jar gt name yaps war value yaps build dir application name war gt name yaps ear value yaps build dir application name ear gt name barkbank war value barkbank build dir barkbank war gt name petex war value petex build dir petex war gt lt property environment env gt 4 Variables d environnement et uti
476. ue vous n ayez pas vous soucier des classes g n r es il est int ressant de voir un extrait de leur contenu Classe g n r e correspondant aux param tres XmlRootElement name ValidateCard public class ValidateCreditCard XmlElement name creditCardNumber private String creditCardNumber XmlElement name creditCardType private String creditCardType XmlElement name expiryDate private String expiryDate Classe g n r e correspondant aux valeurs de retour XmIRootElement public class ValidateCreditCardResponse Xm1Element name cardStatus private String _return G n rer les artefacts clients BarkBank a d velopp son service web g n r ses artefacts serveurs et a d ploy le tout sur son serveur une URL donn e Maintenant pour que YAPS puisse acc der ce service il lui faut g n rer les artefacts c t client Cette op ration se fait via l utilitaire wsimport Celui ci prend en param tres l URL du WSDL du service web partir du WSDL wsimport g n re les l ments suivants ValidationService est la classe principale qui est utilis e dans le code de l application YAPS Pet Store Celle ci retourne l interface Validation qui poss de la m me signature que le service web e Une fabrique ObjectFactory pour cr er les deux m mes classes ValidateCard et ValidateCardResponse Gr ce aux annotations JAXB ces classes g n rent les messages XML Le di
477. un ou plusieurs emplacements physiques Le diagramme de d ploiement ci apr s nous montre les machines physi ques utilis es Pour l application proprement parl il n y a dans notre cas qu un seul serveur physique Mais nous aurions pu subdiviser Les autres machines correspondent aux postes des internautes des employ s et des partenaires externes lt lt executionEnvironment gt gt Serveur d application lt lt exeoutionEnvironment gt gt lt lt exe cutionEnvironment gt gt lt lt com poner 75 Base de donn es Le serveur physique comporte une base de donn es et un serveur d applications Ce dernier est compos d un conteneur de servlets et d un conteneur d EJB l int rieur de chaque n ud cube on peut voir les composants qui sont d ploy s Pour la partie web on retrouve les JSP JSF et JSTL alors que le conteneur d EJB h berge les stateless stateful MDB et entity beans Les services web sont d ploy s sur les serveurs des partenaires En r sum Ce chapitre nous a pr sent les diff rents langages ainsi que la plate forme Java EE 5 avec lesquels sera d velopp e l application YAPS Pet Store L architecture en couches a t d taill e l aide de dia grammes de paquetages et de d ploiement Nous avons d sormais d fi nies et recens es les technologies et sp cifications qui seront utilis es dans les diff rentes couches applicatives UML Le diagramme de d ploieme
478. une commande Watch orders Affiche en temps r el les commandes contenant des reptiles Look amp Feel Metal Change l aspect de l application en Metal Motif Change l aspect de l application en Motif Windows Change l aspect de l application en Windows 146 Ces menus affichent principalement deux types d crans e les listes permettant aux employ s de consulter la totalit des l ments du syst me e les crans de cr ation de mise jour de recherche et de suppression ne manipulant qu un seul l ment la fois La gestion des clients Les employ s peuvent consulter la liste des clients en cliquant sur le menu List customers Cette liste comporte un bandeau de boutons permettant une action sur le client s lectionn Ainsi en cliquant sur une ligne de la liste puis sur le bouton View un nouvel cran s affiche contenant les infor mations du client Appuyez sur Create et un cran vierge s affichera vous demandant de saisir les coordonn es d un nouveau client etc Pet Store File Customer Catalog Order Look amp Feel A Custurner Create 1 customer 3 Delete Address Strect 1 Street 2 City Customer Create customer 3 Read onty Customer 3 Delete Customer 3 Read only Identifier 3 FirstName Steve LastName Jobs Date uf birth 30 11 1964 Age 41 Telephone 549 15715 Email steve jobs apple com identification Lugin jub Password Address Street 1 154 Star
479. ur Web Conteneur EJB JSP Serviet eve 2 gt SE 8 Las 2 SISISIzlo lel3lelemle S Slza Sizicici Yio a D 2 Q re o 5 818 e AAA Beis lala x z e Q oO c Q ol Sis 3 l Java SE Java SE HTTP HTTP SSL SSL Conteneur client Application cliente en wo gt Conteneur a MEIG a d applet a lt e 9 Fla S 5 2 H HAAGEE w Applet SAAJ S a 2 Basic Java SE onn es Figure 2 3 L architecture de Java EE 5 31 2 Architecture de l application Les Cahiers du Programmeur Java EE 5 4 JCP Java Community Process processus utilis par Sun et de nombreux partenaires pour coordonner l volution du langage Java et des technologies associ es PRECISION Conteneur client Le conteneur client ou Application Client Con tainer ACC apporte aux applications Java SE par exemple Swing des services de s curit de nommage d injection PRECISION J2EE JEE J2SE JSE Java et sa plate forme entreprise ont pendant longtemps t appel s J2SE et J2EE respective ment Depuis la version 5 le chiffre 2 a disparu pour faciliter la compr hension de la version uti lis e Ce livre utilisera donc les nouveaux sigles JSE Java SE et JEE Java EE Le terme J2EE sera uti lis pour d signer l ancienne sp cification JPA Java Persistence API est pr sent au chapitre 4 Cette API est utilis e pour d velopper les objets m tier de l applica
480. ur contenant ses propres fichiers de configuration On peut ensuite y d ployer plusieurs applications TELECHARGER YAPS Pet Store T l chargez le code de l application d com pressez le fichier dans un r pertoire et positionnez la variable PETSTORE_HOME gt http www antoniogoncalves org 56 domaine sp cifique YAPS Pet Store que nous nommerons petstore Pour cela tapez la commande suivante asadmin create domain adminport 8282 adminuser admin savemasterpassword true instanceport 8080 petstore L utilitaire asadmin vous demande alors de saisir un mot de passe pour l administrateur et un mot de passe pour le master Pour simplifier l administration de GlassFish utiliser adminpwd pour l administrateur et masterpwd pour le master MUTUALAUTH ADMIN th profile developer as specified on command line or environment ald be JKS Cela a pour effet de cr er un domaine intitul petstore qui coute sur le port 8080 Le port d administration est le 8282 Vous trouverez donc le nouveau sous r pertoire GLASSFISH_HOME domains petstore La commande asadmin create domain que nous venons utiliser est la seule qui ne soit pas encapsul e dans une t che Ant Pour les com mandes qui suivent vous devez t l charger le code de l application et utiliser le fichier admin xm1 D marrez l instance petstore l aide de la commande PETSTORE_HOME ant f admin xml start domain Assurez vous
481. ur g n rer les artefacts client pour l application YAPS Pet Store il est imp ratif que les services web soient d ploy s Ensuite il suffit d ex cuter la t che yaps build qui se chargera de g n rer les artefacts et de packager la totalit des classes dans le fichier petstore ear Les artefacts des deux services web se trouvent dans le fichier ws interface jar quise trouve dans le sous r pertoire 1ib D ployer Comme toujours pour le d ploiement il faut s assurer que le serveur GlassFish et la base de donn es Derby soient d marr s Si ce n est pas le cas utilisez les t ches Ant d administration ant f admin xml start domain ant f admin xml start db Chaque application est packag e dans un fichier d archive diff rent et doit tre d ploy e s par ment Pour cela utilisez les t ches Ant petex deploy barkbank deploy et yaps deploy Vous pouvez ensuite acc der individuellement chacune d elle en utilisant des URL diff rentes http localhost 8080 petstore http 1ocalhost 8080 barkbank et http localhost 8080 petex Tester les services web avec GlassFish Une fois les applications d ploy es vous pouvez utiliser le m canisme de GlassFish pour tester les services web Par exemple pour tester le service de validation de BarkBank il suffit de vous rendre l adresse suivante http localhost 8080 barkbank ValidationService Tester ValidationService Web Service Tester Mozilla Firefox
482. ur retrouver ces objets l application doit conna tre les param tres d acc s au service JNDI Ces param tres sont propres chaque serveur d applications et peuvent soit tre mis dans un fichier externe jndi properties soit directement dans le code Param tres d acc s au service JNDI de GlassFish public class CategoryCrudFrame extends JInternalFrame Caz public void findActionPerformed EventObject evt Properties props new Properties props setProperty java naming factory initial 2 com sun enterprise naming SerialInitContextFactory props setProperty java naming factory url pkgs com sun enterprise naming props setProperty java naming factory state com sun corba ee impl presentation rmi JNDIStateFactoryImpl props setProperty java naming provider url localhost Context initalContext new InitialContext props CatalogRemote catalogRemote CatalogRemote initalContext lookup ejb stateless Catalog O Ces Ce code cr e un objet Properties dans lequel on affecte des valeurs sp cifiques au serveur GlassFish afin d acc der son annuaire JNDI Ces propri t s sont ensuite pass es dans le constructeur du contexte ini tial et permettent de retrouver l objet recherch Application Client Container Pour expliquer l Application Client Container ACC il faut conna tre le m canisme d injection ou pattern loC Inversion of Control Si ce n e
483. urce le conteneur ou l application Ressource partageable ou non gt boolean shareable default true Cet attribut repr sente le nom donn la res gt String mappedName default source l int rieur du conteneur Il est sp cifique chaque serveur d applications et peut donc ne pas tre portable Description de la ressource gt String description default Destinations JMS d finit deux types de destinations correspondant aux deux modes d envoi des messages e Le mode point point Point to Point utilise des files d attente javax jms Queue pour communiquer Ce mode un metteur un r cepteur s apparente l envoi d un e mail e Le mode publication abonnement Publish Subscribe utilise des sujets javax jms Topic pour changer des messages Ce mode un metteur multiples r cepteurs correspond par exemple une sous cription aupr s d un serveur de news Par d faut seuls les r cepteurs connect s au Topic sont alert s de l arriv e du message Pour que les messages soient conserv s pour les r cepteurs d connect s ils doi vent avoir t d clar s comme durables 266 Chaque mode utilise une interface diff rente pour envoyer des messages javax jms QueueSender dans le mode point point et javax jms TopicPublisher pour le mode publication abonnement Toutes deux h ritent de la super interface javax jms MessageProducer Pour r f rencer un Topi
484. urce Name WAP Wireless Application Protocol WAR Web ARchive WML Wireless Markup Language WSDL Web Service Description Language XML eXtended Markup Language YAPS Yet Another PetStore 313 C Sigles et acronymes EJB 2 Ours Base de donn es MySQL MySQL est un serveur de base de donn es rela tionnelle multithread multi utilisateurs et robuste Il dispose de deux licences Open Source sous les termes de la licence GNU General Public License ou alors une licence commerciale achet e aupr s de MySQL AB gt http www mysql com Outils Serveur d applications JBoss JBoss est un serveur d applications Open Source certifi J2EE Historiquement sp cialis pour les EJB son architecture modulaire lui permet de r pondre aux autres sp cifications J2EE JBoss Server est le conteneur d EJB JBossMQ g re les messages JMS JBoss MX la messagerie lectro nique JBoss TX les transactions JTA JTS JBoss SX la s curit JBoss CX la connectivit JCA et JBossCMP la persistance CMP Pour les JSP ser vlets JBoss int gre Tomcat gt http www jboss com Java EE 5 est plus simple que J2EE 1 4 Voila une phrase qui revient assez souvent dans ce livre Pour vous le prouver cette annexe se focalise sur les EJB et se propose de vous expliquer comment d velopper un sta teless bean et un entity bean en version 2 1 Nous prendrons deux exem ples extr mement simples de type Hello World
485. us a pr sent les outils utilis s pour le d veloppement de l application YAPS Pet Store c est dire Ant le JDK le serveur d applications GlassFish et la base de donn es Derby Nous les avons install s puis configur s pour r pondre a nos besoins techniques Les d veloppements peuvent donc commencer 63 3 Outils et installation Objets persistants Nous commencerons les d veloppements par la couche de persistance Ce chapitre pr sente bri vement ce concept avant de se concentrer sur JPA Java Persistence API Il d crit les annotations l mentaires du mapping objet relationnel et les annotations avanc es relations jointures cascades etc A partir de l tude de cas abord e dans le premier chapitre nous d finirons et impl menterons les entity beans de l application YAPS Pet Store v o da de CS AD Ne a SOMMAIRE Couche de persistance JPA et les entity beans Cycle de vie des entity beans Mapping objet relationnel Les relations 0 1 1 1 et 1 n Les objets persistants de l application Sch ma de la base de donn es MOTS CLES JDBC JPA Entity bean Annotations Relations Mapping O R DDL Les Cahiers du Programmeur Java EE 5 4 NM La machine virtuelle Java est une surcouche logi cielle sp cifique chaque syst me d exploitation pour interpr ter le code Java 4 SQL Structured Query Language SQL traduisez lan gage structur de requ tes est un lang
486. utes ces fonctionnalit s 208 1 lt lt control gt gt CatalogController jsf lt lt control gt gt AccourtCortroller Figure 7 21 Le client web dans l architecture globale de l application Ex cuter l application Dans le pr c dent chapitre Ex cution de l application nous avons d ploy les entity et les stateless beans dans le conteneur d EJB et ex cut linter face Swing des employ s D sormais il est galement n cessaire de d ployer l application web et de l utiliser partir d un navigateur La compilation des classes se fait toujours par l ex cution de la t che Ant yaps compile Le packaging de l application yaps build est enrichi pour pouvoir rajouter une application web on parle souvent de webapp l archive entreprise ear Packager Les applications web sont packag es dans des fichiers d archive appel s archives web et qui portent une extension war Web Application Archive Ces archives permettent de regrouper tous les l ments d une application web que ce soit c t traitements managed bean JSF servlets classes java ou c t pr sentation pages HTML JSP images son etc Cette extension du format JAR sp cialement d di e aux applications web a t introduite dans les sp cifications 2 2 des servlets C est un format ind pendant de toute plate forme et exploitable par tous les conteneurs web qui respectent cette version de sp cificat
487. utiliser trois approches pour g rer le map ping entre objets et base de donn es La premiere consiste partir des entity beans pour g n rer le sch ma de la base ce que nous faisons dans cet ouvrage Cette option n est possible que lorsque le projet n a pas de base de donn es existante et qu il est de petite taille En effet dans la plupart des gros projets il y a un DBA Database administrator Administrateur de base de donn es qui contr le que la structure de la base r pond aux con traintes de performances exig es II faut alors adapter le mapping La deuxi me consiste g n rer les objets entity beans partir d une base de donn es existante On se retrouve alors avec un mod le qui se cale tr s bien sur les donn es mais qui n a plus grand chose d objet pas d abstraction parfois m me pas d h ritage La troisi me approche qui est la plus adopt e consiste ne rien g n rer mais utiliser la puissance des annotations pour caler un mod le objet sur un mod le relationnel Chaque monde a ses avan tages et ses contraintes ils doivent s influencer le moins possible et les outils de mapping sont justement l pour a 73 Les Cahiers du Programmeur Java EE 5 Cette annotation s applique une m thode ou un attribut Trois types de date possibles DATE TIME et TIMESTAMP valeur par d faut REMARQUE Mot cl Java transient Avant l apparition des annotations Java introdui sa
488. uve dans src com barkbank validator alors que les artefacts sont g n r s dans generated com barkbank validator jaxws Il en est de m me pour PetEx ES BarkBank ted ay com barkbank validator jaxws Ty petex transport jaxws Da ValidateCreditCard L ValidateCreditCardResponse rltems x DeliveryServi di X DeliveryService_schemal xsd X ValidationService wsdl ValidationService_schemat xsd l com barkbank validator L amp Validation Figure 9 8 Service web de BarkBank Figure 9 9 Service web de PetEx L application YAPS Pet Store utilise l outil wsimport pour g n rer les artefacts c t client des deux services web Ces classes se trouvent dans le r pertoire generated Architecture Le diagramme suivant nous montre comment les services web externes de BarkBank et PetEx s ins rent dans l architecture Chaque service est invoqu par un type de composant diff rent de notre application C est un managed bean ShoppingCartController qui invoque le service de v rification de cartes alors que c est un stateless bean OrderBean qui se charge d avertir le transporteur figure 9 11 Ex cuter l application Pour simuler la r alit des applications distribu es on aurait pu cr er une instance GlassFish diff rente pour y d ployer les applications de BarkBank PetEx et YAPS Pet Store Il aurait m me m me t possible de d ployer chaque application
489. vant entity com yaps petstore id Long Address login String s id Long password String street1 String firstname String street2 String lastname String aty String telephone String state String email String zipcode String dateO fBirth Date Stri age Integer neo Figure 4 5 Diagramme de classes du client Un client poss de un identifiant id et un login unique Grace ce login et son mot de passe password il peut se connecter au syst me UML Attribut d riv 2 im Fa h 4 Ses coordonn es sont constitu es d un nom lastname pr nom Remarquez le caract re devant l attribut age firstname num ro de t l phone adresse e mail date de naissance En UML il signifie que l l ment attribut ou dateOfBirth et une adresse personnelle optionnelle d o la cardinalit m thode est d riv c est dire qu il est calcul partir d autres attributs Dans le cas du client l ge 0 1 Cette adresse est d crite par la classe Address et comporte les attri reS arh est calcul a partir de sa date de naissance buts rue Street1 Street2 ville city tat state code postal zipcode et pays de r sidence country Client Lentity bean Customer est une classe riche en informations Outre ses attributs cet entity bean utilise plusieurs annotations de callback pour valider ses donn es mais aussi pour calculer l ge du client Il
490. ver artifacts gt lt antcall target barkbank generate server artifacts gt lt antcall target petex generate server artifacts gt lt target gt lt target name barkbank generate server artifacts depends barkbank compi le gt lt echo message Generates the BarkBank artifacts gt lt exec executable wsgen failonerror true gt lt arg line cp barkbank classes dir gt lt arg line d barkbank classes dir gt lt arg line keep gt lt arg line wsd1 gt lt arg line r barkbank generated src dir gt lt arg line s barkbank generated src dir gt lt arg line com barkbank validator Validation gt lt exec gt lt target gt lt target name petex generate server artifacts depends petex compile gt lt echo message Generates the Petex artifacts gt lt exec executable wsgen failonerror true gt lt arg line cp petex classes dir gt lt arg line d petex classes dir gt lt arg line keep gt lt arg line wsd1 gt lt arg line r petex generated src dir gt lt arg line s petex generated src dir gt lt arg line com petex transport Delivery gt lt exec gt lt target gt lt target name generate client artifacts gt lt antcall target barkbank generate client artifacts gt lt antcall target petex generate client artifacts gt lt target gt lt target name barkbank generate client artifacts
491. voy va tre re u par plusieurs clients Le message ne dispara t du Topic que lorsque tous les abonn s l ont lu et acquitt 267 10 Traitements asynchrones Les Cahiers du Programmeur Java EE 5 Figure 10 3 Mode publication abonnement TRANSACTION JMS Dans le cas d une session transactionnelle connection createSession true l envoi de messages n est effectivement r alis qu au moment de l ex cution du commit de la transaction 268 Producteur Envoyer les messages Voyons maintenant comment utiliser tous ces concepts pour publier un message dans un Topic Comme nous l avons vu la fabrique de con nexions et la destination doivent tre connues par les clients JMS Pour cela nous utilisons l annotation javax annotation Resource qui as s FN la 21 permet d injecter la r f rence de la fabrique JMS que nous avons cr e dans GlassFish ainsi que la destination jms topic order Une fois la r f rence de la ConnectionFactory obtenue on se connecte au provider JMS via l objet javax jms Connection partir de cette connexion on obtient une session Une Session est un contexte tran sactionnel utilis pour grouper un ensemble d envois de messages ou de r ception de messages dans une unit de travail Comme avec les bases de donn es une session transactionnelle mest valid e qu apr s appel implicite ou explicite d un ordre commit A partir de la session on cr e un Me
492. vrage un site de commerce lectronique sp cialis dans la vente d animaux domestiques Afin de d crire les besoins de la soci t YAPS nous utiliserons des diagrammes de cas d utilisation et d activit UML ainsi que des maquettes d crans Ne OR ALERT a e a SOMMAIRE Pr sentation de la soci t YAPS Application YAPS Pet Store Acheter des animaux en ligne Site de commerce lectronique Expression des besoins Cas d utilisation et acteurs du syst me MOTS CL S UML Cas d utilisation Acteurs du syst me Diagramme d activit Maquettes d crans Java Pet Store Les Cahiers du Programmeur Java EE 5 TELECHARGER YAPS Pet Store Retrouvez le site YAPS PetStore l adresse suivante http www antoniogoncalves org UML Les cr ateurs du langage James Rumbaugh Grady Booch et Ivar Jacobs sont les cr ateurs du langage UML Cet ouvrage repose sur l analyse du syst me d information et plus particu li rement du syst me informatique de l entreprise fictive YAPS Cette soci t am ricaine vend des animaux de compagnie Elle continue d exercer son m tier telle quelle le faisait ses d buts c est dire qu elle r pertorie ses clients et ses articles sur des fiches de papier bristol re oit les commandes par fax les ch ques par courrier puis envoie le bon de com mande au client Une fois le ch que encaiss par la banque BarkBank elle utilise la soci t de transport PetE
493. x annotation PreDestroy Apr s avoir instanci un message driven bean le conteneur ex cute les m thodes annot es par PostConstruct Dans le cas o le conteneur supprime l EJB de la m moire les m thodes annot es PreDestroy sont appel es JavaMail Lorsque le bon de commande est cr le syst me envoie un e mail r ca pitulatif au client JavaMail est l API qui nous permet d utiliser le cour rier lectronique Le courrier lectronique repose sur le concept de clients et de serveurs Les clients de mail tel que Outlook Messenger Eudora etc s appuient sur un serveur de messagerie pour obtenir et envoyer des e mails Ces changes sont normalis s par des protocoles particuliers SMTP POP3 etc Les principaux protocoles de messagerie SMTP Simple Mail Transport Protocole protocole d fini par la recomman dation RFC 821 permet l envoi d e mails vers un serveur POP3 Post Office Protocole protocole d fini par la recommandation RFC 1939 permet la r ception d e mails Protocole tr s populaire sur Internet il d finit une boite aux lettres unique pour chaque utilisateur IMAP Internet Message Acces Procol protocole d fini par la recommanda tion RFC 2060 permet la r ception d e mails Ce protocole est plus com plexe car il apporte des fonctionnalit s suppl mentaires plusieurs r pertoires par utilisateur partage de r pertoires entre plusieurs utilisa teurs maintient des messages sur le serv
494. x nouveaux mod les conomiques logiciel libre par exemple Mais aussi les personnes de la galaxie informatique qui on demande de tout savoir sans toujours comprendre que la ma trise de tant de concepts pose un vrai probl me de comp tences et de formations Le Conservatoire National des Arts et M tiers est l un des interlocuteurs de ces personnes d sireuses de voir leurs comp tences voluer de fa on coh rente avec les offres de solutions technologiques et d emplois C est dans le cadre de cette honorable et toujours jeune institution du Cnam que j ai eu la chance de conna tre Antonio Goncalves C est ensemble que nous nous sommes pos s la question de notre contribution ce rapport difficile entre l volution de la technologie et l volution des comp tences des professionnels qui viennent nous entendre sur ces sujets Les Cahiers du Programmeur Java EE 5 gt http jfod cnam fr Vill Autant vous dire que le boulot n est pas de tout repos Depuis quelques ann es c est au plus tous les deux ans que nous devons nous remettre en cause et changer non seulement de solutions mais de discours Nos audi teurs qui sont des professionnels sont d ailleurs les premiers 4 nous interpeller pour nous signaler que telle ou telle nouvelle solution s impose au march et donc aux acteurs que nous sommes Il arrive alors que ce soit des anciens auditeurs devenus des architectes Java EE avertis qui passionn s
495. x pour acheminer les animaux vers leurs nouveaux propri taires YAPS est depuis toujours implant e dans le sud de la Californie o sont domicili s ses principaux clients R cemment elle a ouvert son march d autres tats am ricains ainsi qu l tranger YAPS n arrive plus g rer manuellement cette expansion et souhaite cr er un syst me informatique pour lui permettre de faire face sa r cente croissance Elle attend de celui ci qu il lui permette de vendre ses animaux en ligne de g rer son catalogue d articles et sa base de donn es de clients De plus ses partenaires la banque BarkBank et la soci t de transport PetEx souhaitent avoir la possibilit d changer des donn es aux formats lectroniques via Internet Ce syst me informatique est baptis YAPS Pet Store Il doit r pondre certains besoins en termes de performance et de robustesse comme la haute disponibilit puisque le site doit tre accessible 24h 24 7j 7 et supporter un nombre lev d internautes En effet bien que pr sent dans le monde entier la majeure partie des clients de YAPS se trouve aux tats Unis Il faut donc pr voir une hausse des acc s au sys t me durant la journ e Expression des besoins Pour exprimer les besoins de la soci t YAPS nous allons utiliser le for malisme UML des cas d utilisation Ces derniers ont t d velopp s par Ivar Jacobson bien avant l apparition d UML Unified Modeling Lan guage
496. x sont bien diff rents des Pojo annot s par JPA Ils utilisent le syst me d interface de fabrique qui rappelle l entity manager et sont en r alit des classes abstraites sans attributs De plus les informations de mapping sont parpill es dans plu sieurs fichiers XML ce qui rend les ventuelles erreurs difficiles 4 trouver Un exemple de stateless bean Pour le stateless bean que diriez vous d un composant qui retourne la chaine de caract re Hello Petstore ainsi que la date du jour Pour d velopper ce stateless session bean 2 x il faut deux interfaces une classe et un descripteur de d ploiement Une premi re interface de fabrique permet la construction factory d un composant EJB Dans notre cas il s agit d une interface distante tant donn qu EJBHome h rite de l interface java rmi Remote Le nom d une m thode de cr ation est obligatoirement create Home interface du stateless bean public interface HelloHome extends EJBHome Hello create throws RemoteException CreateException 2 L interface m tier permet de d finir les services que propose EJB c est dire les m thodes m tiers qu expose le composant dans notre cas les deux m thodes sayHe1100 et today Notez que l invocation de ces m thodes peut chouer pour des raisons li es au r seau RemoteException Interface m tier du stateless bean public interface Hello extends EJBObject String sayHello t
497. xtrait du CatalogController public class CatalogController EJB private CatalogLocal catalogBean private String keyword private Category category private Product product private Item item private List lt Product gt products private List lt Item gt items public String doFindProducts category catalogBean findCategory getParamIdC categorylId products category getProducts return products displayed public String doFindItems product catalogBean findProduct getParamId productId items product getItemsQ return items displayed public String doFindItem item catalogBean findItem getParamId itemId return item displayed public String doSearch items catalogBean searchItems keyword return items found Getters amp setters des attributs Vous remarquerez plusieurs reprises l appel la m thode getParamId Celle ci permet de r cup rer un param tre pass par la page JSP Par exemple lorsqu on clique sur un lien hypertexte et que l on veut passer un param tre au managed bean on utilise la balise lt f param gt Dans l exemple suivant on affecte la valeur 5 au param tre catagoryId Lien hypertexte utilisant la balise lt f param gt lt h commandLink action catalog doFindProducts gt lt h outputText value Birds gt lt f param name categoryId value 5 gt lt h commandLink gt Lorsqu on
498. y Class targetEntity default void class CascadeType cascade default FetchType fetch default FetchType LAZY String mappedBy default Code de l annotation javax persistence ManyToOne package javax persistence Target METHOD FIELD Retention RUNTIME public interface ManyToOne Class targetEntity default void class CascadeType cascade default FetchType fetch default FetchType EAGER boolean optional default true Relation unidirectionnelle 1 n Les relations unidirectionnelles 1 n sont particuli res En effet JPA ne permet pas l utilisation des cl s trang res pour mapper cette relation mais uniquement le syst me de table de jointure Par d faut le nom de cette table interm diaire est compos du nom des deux entity beans s par s par le caract re _ Une fois de plus les annotations JPA permet tent de red finir ces valeurs par d faut en utilisant JoinTable Prenons l exemple d un bon de commande Un bon de commande Order est compos de plusieurs lignes de commande OrderLine La relation est donc multiple et la navigation se fait uniquement dans le sens Order vers OrderLine Ci apr s le code de l entity bean Order avec une relation unidirectionnelle 1 n vers OrderLine Entity bean Order avec l annotation JoinTable Entity 4 Table name t_order public class Order Gas OneToMany 4 JoinTable name t_order_order_line ord
499. y gt gt PetstoreF rame lt lt Delegate gt gt Catalog elegate lt lt Delegate gt gt gt CustomerDelegate lt lt Delegate gt gt OrderD elegate Pi lt lt utility gt gt l ServiceLocator 5 lt use gt gt LS SSeS She ee eS Architecture Le diagramme de composants suivant nous montre comment s ins rent les managed beans et l application web La plomberie interne de JSF comme le contr leur n est pas d taill e dans ce diagramme Le navigateur est donc repr sent comme dialoguant directement avec les managed beans Le client Swing utilise les interfaces distantes des stateless beans alors que les managed beans invoque les m thodes des interfaces locales La couche des traitements manipule les donn es persistantes au travers d entity beans Quant la couche de pr sentation elle en affiche le con tenu dans des pages JSP lt lt entity gt gt Category lt lt entity gt gt a lt lt entity gt gt Product Item lt lt entity gt gt Address lt lt com ponent gt gt a CustomerBean lt lt component gt gt a OrderBean lt lt entity gt gt CreditCard Wes Serveur et conteneur Pour mettre a disposition des fichiers pages HTML statiques images vid o et g rer les requ tes HTTP on doit utiliser un serveur web Pour ex cuter les servlets les JSP les taglibs JSTL ou JSF il faut un conteneur web GlassFish fournit to
500. ype de composant dans notre cas un composant session sans tat Fichier ejb jar xml lt ejb jar gt lt enterprise beans gt lt session gt lt display name gt Hel 1oSB lt display name gt lt ejb name gt Hel loBean lt ejb name gt lt home gt Hel 1 oHome lt home gt lt remote gt Hello lt remote gt lt ejb class gt HelloBean lt ejb class gt Un EJB stateless 2 x h rite de javax ejb SessionBean Constructeur Les m thodes m tier Les m thodes callback Nom de l EJB Nom de l interface de fabrique de l interface m tier et de la classe d impl mentation 321 D EJB 2 Les Cahiers du Programmeur Java EE 5 L EJB est stateless et la d marcation des transac tions est assur e par le conteneur La politique transactionnelle utilis e pour toutes les m thodes de ce session bean est Required Nom JNDI du stateless session bean Propri t s pour acc der l annuaire JNDI de JBoss 322 gt lt session type gt Stateless lt session type gt lt transaction type gt Container lt transaction type gt lt session gt lt assembly descriptor gt lt container transaction gt lt method gt lt ejb name gt HelloBean lt ejb name gt lt method name gt lt method name gt lt method gt lt trans attribute gt Required lt trans attribute gt O lt container transaction gt lt assembly descriptor gt lt enterprise beans gt l

Download Pdf Manuals

image

Related Search

Related Contents

MSDS - シャープ化学工業  HP® LASERJET SERIE P1505  PowerDsine LX2206 User's Manual  Nr.: 01018 BG  Cub Cadet 1512 (882) User's Manual  Shorai FAQ - Vancouver Battery  

Copyright © All rights reserved.
Failed to retrieve file