![]() |
![]() |
TP3 2016-2017 JSF2/EJB : Ecriture d'un gestionnaire de comptes bancairesDe $1IntroductionDans ce TP, contrairement aux TPs précédents, nous allons écrire une application de gestion de comptes bancaires, mais sans partir de tables pré-existantes. Vous utiliserez une entité CompteBancaire et un session bean GestionnaireDeCompteBancaires. Le TP comporte également l'écriture de pages JSF et de Backing Beans pour accèder à ses comptes, déposer ou retirer de l'argent, transférer de l'argent d'un compte bancaire à un autre, chercher des comptes... Vous travaillerez sur une nouvelle base de données ! Afin de ne pas "casser" celle qui est livrée en exemple (jdbc/sample...) Création d'une base de donnée "Banque"Netbeans comprend un o Donnez ensuite un nom à votre base. Vous DEVEZ OBLIGATOIREMENT donner un login/password. Pour les M2 Nice : NE CHOISISSEZ PAS LE MEME NOM QUE MOI, Prenez un nom qui contient vos noms de famille ou de binome car ce TP sera à me rendre et il sera noté ! Comme j'importerai vos bases de données, elles doivent toutes avoir un nom différent ! Pas d'espace ou de caractères bizarres dans le nom ! Par ex : "BanqueTotoTata" avec Toto et Tata nom du binome. Votre base doit apparaître dans la liste "Java DB". Faites clic droit/Se connecter Vous devriez voir votre base dans la liste, et vous devriez pouvoir commencer à administrer votre base:. Ne faites rien pour le moment, car dans ce projet les tables vont êtres crées à partir des classes Java des entity beans ! Ecriture d'une entité CompteBancaireVous allez créer un nouveau projet, à la manière du TP1. Donnez-lui un nom qui comporte votre nom de binome ! Par exemple "TP3BanqueTitiTata" Au lieu de créer un entity bean à partir d'une table (Classe entité provenant de la base de données...), vous ferez une simple création d'entité (Classe entité...). Dans la création de la "Persistence Unit", vous indiquerez bien sur la nouvelle source de données que vous venez de créer. Choisissez bien "new data source" dans le menu déroulant "Data Source", cette option indique que la base est nouvelle (qu'elle n'est pas déjà connue par le serveur comme sample du TP1) et que vous comptez la déployer avec l'application. Dans ce cas, lors du premier déploiement, glassfish "connectera" la base à partir du fichier glassfish-resources.xml qui va être généré dans votre application et qui décrit cette connexion. Vérifier qu'un fichier glassfish-resources.xml (avant il s'appelait "sun-ressource.xml" avec glassfish3/netbeans 6.9) est apparu dans l'arbre du projet ejb, sous "server resources". C'est ce fichier qui va permettre à glassfish de se connecter à la base de données, qu'il ne connaissait pas avant. Regardez le source de ce fichier ! NOTE: avec Netbeans 8.0.2 il y a un bug, renommez le fichier Dans le code source de l'entité, vérifier qu'une propriété est le numéro d'identification (la clé primaire, déclaré par l'annotation @Id), qui est en mode auto-incrément: (déclaré par l'annotation @GeneratedValue(strategy=GenerationType.AUTO) Modifier l'entité CompteBancaire afin que chaque compte bancaire possède :
Note : vous pouvez utiliser le menu "insert code/add property" pour générer en même temps les get/set. Comme dans le cours, ajouter une méthode pour retirer de l'argent, pour en ajouter et pour consulter le solde, ainsi qu'un constructeur prenant en paramètre le nom du propriétaire et le solde initial :
public CompteBancaire(String nom, int solde) { this.nom = nom; this.solde = solde; } public void deposer(int montant) { solde += montant; } public int retirer(int montant) { if (montant < solde) { solde -= montant; return montant; } else { return 0; } } Ce n'est pas grave si il n'y a pas de table pour les comptes bancaires, vous verrez que le serveur la créera automatiquement lors du premier déploiement du bean CompteBancaire. Compilez. Vérifiez qu'il n'y a pas d'erreurs. Ecriture d'un session bean façade : GestionnaireDeCompteBancaireVous allez maintenant écrire un session bean GestionnaireDeCompteBancaire, ce sera un session bean stateless. Ce session bean va proposer pour le moment deux fonctionalités (vous pouvez vous inspirer du TP 1 pour les implémenter) :
Vous ajouterez une méthode creerComptesTest() qui va créer quatre comptes, pour John, Paul, Georges et Ringo, avec les sommes suivantes. Ne faites pas attentions aux numéros de comptes, vous n'avez pas à les préciser puisque vous êtes en clé primaire générée automatiquement. public void creerComptesTest() { creerCompte(new CompteBancaire("John Lennon", 150000)); creerCompte(new CompteBancaire("Paul McCartney", 950000)); creerCompte(new CompteBancaire("Ringo Starr", 20000)); creerCompte(new CompteBancaire("Georges Harrisson", 100000)); }
Ecriture d'une page JSF et du backing bean associéEn vous inspirant de ce qui a été fait dans les précédents TPs, vous implémenterez les fonctionnalités suivantes :
Dans un second temps, on modifiera le tableau pour ne pas "connaitre à l'avance tous les comptes bancaires", mais en utilisant une pagination "intelligente" (lazy loading dans la doc PrimeFaces). En d'autres termes, on ne requêtera les comptes que 20 par 20 ou 10 par 10 et chaque fois que l'on change de page, on requêtera les 10 ou 20 comptes suivants. En gros, au lieu d'avoir une méthode getAllComptes() dans le gestionnaire de comptes bancaires, on aura une méthode List<CompteBancaire> getComptes(int start, int nombreDeComptes)... Bien entendu, vous utiliserez un Backing Bean pour les traitements et vous ajouterez dans le session bean GestionnaireDeComptesBancaire les méthodes nécessaires pour transférer, déposer, retirer de l'argent, chercher un compte etc. Vous essaierez également des transferts impossible et voir comment le système se comporte, peut-on se retrouver avec les données dans un état incohérent Dans le prochain TP nous allons utiliser des relations pour associer aux comptes bancaires des clients (un client pourra avoir plusieurs comptes) et des opérations bancaires (débits, dépôts, transferts, création du compte, etc) Il s'agit d'un long TP qui va durer plusieurs séances... et qui sera à rendre. BIEN QU'ON FOURNISSE DES CORRECTIONS CI-DESSOUS, vous pouvez vous en inspirer, mais pas faire du copier/coller. EMSI Casa 2016: TP3 pas fini fait en cours avec video de live codingJeudi 29/10 début du TP3
Vendredi 30: fin TP3 + TP4 + Lazy loading + Ajax + messages + initBD au déploiement + validation/Exceptions + relations
Note: pour faire marcher ce projet chez vous:
Vieille Correction du TP3Ces corrections n'intègrent pas le Lazy Loading de la datatable.
Correction faite par des élèves, incluant le Lazy Loading. |
Powered by MindTouch Deki Open Source Edition v.8.08 |