T M E 6 A p p l i c a t i o n d e v e n t e e n l i g n e 1 Implémentation des bases de données clients et produits L'objet des TME 6 et 7 est d'implémenter une application de vente de produits en ligne à l'aide des EJB. Cette application s'appuie sur deux bases de données : la base de ses clients et la base de ses produits. La première stocke les coordonnées des clients ainsi que la somme des montants d'achats qu'ils ont effectué sur le site. La seconde stocke la liste des produits accompagnés de leur description et de leur quantité en stock. La gestion de chacune de ces bases sera effectuée à l'aide d'un couple : session bean, entity bean, à la manière de l'application HelloFortune. L'entity bean permet l'accès à la base de données, le session bean contient les procédures métier de gestion de celle ci : ajout, suppression, etc... d'élément. 1. E N T I T Y B E A N S Il faut noter que les entity beans utilisés seront CMP comme dans le cas de l'exemple HelloFortune. Dans un premier temps, les clés primaires ne seront pas autogénérées. Par contre dans un second temps, une fois que les deux bases de données et leurs beans entity et session auront été testés, il faudra modifier l'application pour que les clés des bases de données soient autogénérées. Pour que les clés primaires soient auto générées il faut modifier les entity beans et le fichier descripteur de déploiement comme décrit à la fin du document TD TME 5 : modifier les méthodes de création du bean, modifier le descripteur ejb jar.xml, fournir le fichier jbosscmp jdbc.xml, qui décrit le mapping entre entity bean et champs de la base de données, correctement initialisé à l'aide des descriptions des tables qui sont données par la suite Par ailleurs, chaque instance d'entity bean correspond à un enregistrement dans une base de données. Pour supprimer cet enregistrement il faut appeler la méthode «remove» de l'entity bean. Par exemple dans le cas de l'entity bean Fortune : // récupération d'un enregistrement dans la base 1/6
Fortune fortune = home.findbyprimarykey (1); // suppression d'un enregistrement dans la base fortune.remove(); 2. B A S E D E D O N N É E S C L I E N T S La base de données client correspond à une table dans la base de données par défaut dans laquelle travaille Jboss. Cette table a la structure suivante : nom de la table : clients Nom du champs index nom prénom email montant INTEGER DOUBLE Type SQL La clé primaire de la base est le champ «index». Le montant correspond à la somme que le client a déjà dépensé sur le site lors de précédents achats, plus il est élevé plus le client a droit à des avantages. Dans le cas où la clé est autogénérée, le nom de la table et celui des champs ainsi que leurs types SQL sert à compléter le fichier jbosscmp jdbc.xml qui effectue le mapping entre l'entity bean et la base de données. On s'inspirera du fichier jbosscmp jdbc.xml donné dans l'énoncé du TD 5 (dernière partie : clé auto générée). Le nom de l'ejb est donné dans le paragraphe qui suit. Le nom des champs («field») est le même que celui de colonnes («column»). Entity Bean L'entity bean sera nommé ClientBean, son interface d'accès Client et son interface home ClientHome. L'interface Client sera la suivante : public interface Client extends EJBObject public Integer getindex () 2/6
public String getnom() public String getprenom() public String getemail() public Double getmontant() public void setmontant (Double nouveaumontant) L'interface ClientHome sera la suivante : public interface ClientHome extends EJBHome public Client create (Integer index, String nom, String prenom, String email, Double montant) throws CreateException, RemoteException; public Client findbyprimarykey (Integer index) public Collection findbynomprenom (String nom, String prenom) la méthode create prend un montant, bien que en théorie nul, puisque le client est créé et donc nouveau. En effet on pourrait, dans le cas d'un parrainage par exemple, donner des «points d'avance» à un nouveau client. On développera aussi les interfaces locales de l'entity bean ClientBean. Dans le fichier de description de déploiement ejb jar.xml : les champs du bean auront les noms des champs de la table l'abstract schéma aura le nom de la table On pourra tester l'entity bean Client à l'aide d'un programme de test proche de celui de l'entity bean Fortune, sauf qu'il faudra créer à l'aide de l'interface ClientHome des enregistrements dans la base de données avant de faire des recherches. En effet la base de données n'est plus créée à l'aide des scripts SQL vus dans le cas ou la clé n'est pas générée automatiquement. Session Bean Le session bean est nommé GestionClient, il doit permettre de gérer la base des clients. Son interface est la suivante : public interface GestionClient extends EJBObject public void addclient (String nom, String prenom, String email, Double montantinitial) 3/6
public void delclient (Client client) public Client getclient (String nom, String prenom) L'interface GestionClientHome est du même type que celle HelloHome ne contenant que la méthode de création du bean. Le programme du test de GestionClient du session pourra s'inspirer de celui de test du bean Hello. On développera aussi les interfaces locales du bean GestionClientBean. On développera un programme de test utilisant les 3 méthodes du session bean. 3. B A S E D E D O N N É E S P R O D U I T S La base de données des produits est gérée de la même manière que celle des clients. Un entity bean donne accès à la base tandis que le session bean encapsule les procédures métier de gestion. La base de données des produits correspond à la table suivante dans la base de données par défaut dans laquelle travaille Jboss : nom de la table : produits Nom du champs codeproduit nom couleur stock prix INTEGER INTEGER DOUBLE Type SQL La clé primaire de cette table est le champ codeproduit. Une deuxième entrée «<entity>» doit être ajoutée au fichier jbosscmp jdbc.xml, de la même manière que pour les données des clients, en suivant la description de la table fournie. Entity Bean L'entity bean donnant accès à la base de produits est nommé ProduitBean, son interface métier se nomme Produit et son interface home ProduitHome. Elles contiennent les méthodes 4/6
suivantes : interface Produit : public interface Produit extends EJBObject public Integer getcodeproduit () public String getnom() public String getcouleur() public Double getprix() public void setprix(double prix) public Integer getstock () public void setstock (Integer stock) interface ProduitHome : public interface ProduitHome extends EJBHome public Produit create (Integer codeproduit, String nom, String couleur, Double prix, Integer stock) throws CreateException, RemoteException; public Produit findbyprimarykey (Integer) public Collection findbynomcouleur (String nom, String couleur) On développera aussi les interfaces locales de l'entity bean ProduitBean. Session Bean Le session bean de gestion des produits est nommé : GestionProduitBean. Son interface métier est GestionProduit et son interface Home, GestionProduitHome. Interface GestionProduit : public interface GestionProduit public void addproduit (String nom, String couleur, Double prix, Integer stock) public void delproduit (Produit produit) public Produit trouveproduit (String nom, String couleur) public Collection listeproduitsenstock () 5/6
La méthode «listeproduitsenstock()» retourne la liste des produits dont le stock n'est pas nul. On développera aussi les interfaces locales du session bean GestionProduitBean. On développera un programme de test utilisant les 4 méthodes du session bean. 6/6