![]() |
![]() |
Accueil > Intranet Michel Buffa > Cours composants distribués pour l'entreprise 2014-2015 > TP3 EJB/JSF/JPA 2014-2015 gestion de comptes bancaires
TP3 EJB/JSF/JPA 2014-2015 gestion 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 ! Ajout de la base de données banque dans GlassfishIl devrait être possible de configurer le projet pour que la base de données soit "déployée" en même temps que le projet que nous allons réaliser. En raison d'un bug de Netbeans 8.1 et/ou de Glassfish, cette technique ne fonctionne pas. Nous allons donc ajouter "manuellement" la base de données à GlassFish en utilisant sa console d'administration. Il existe d'autres possibilités dont on parlera en cours (en configurant la base dans des annotations de code, en ajoutant la base via la ligne de commande, en utilisant Maven).
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 la base de données que vous avez créée. 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", 150_000)); creerCompte(new CompteBancaire("Paul McCartney", 950_000)); creerCompte(new CompteBancaire("Ringo Starr", 20_000)); creerCompte(new CompteBancaire("Georges Harrisson", 100_000)); }
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.
Mots clés:
|
Powered by MindTouch Deki Open Source Edition v.8.08 |