TP2 EJB : Ecriture d`un gestionnaire de comptes bancaire

Transcription

TP2 EJB : Ecriture d`un gestionnaire de comptes bancaire
TP2 EJB : Ecriture d'un gestionnaire de comptes
bancaire
1. Introduction
2. Création d'une base de donnée "Banque"
3. Ecriture d'un entity bean CompteBancaire
4. Ecriture d'un session bean façade : GestionnaireDeCompteBancaire
5. Ecriture d'une servlet comptes et de jsps associées
5.1. Rappels:
5.2. Travail à effectuer:
6. Ajout de nouvelles fonctionalités
Introduction
Dans ce TP, contrairement au TP1, nous allons écrire une application de gestion de comptes bancaires,
mais sans partir de tables pré-existantes. Vous utiliserez un entity bean CompteBancaire et un session
bean GestionnaireDeCompteBancaires. Le TP comporte également l'écriture de servlets et de pages jsp
pour se connecter, s'identifier, accèder à ses comptes, transférer de l'argent.
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 util basique de gestion de SGBD. A partir de l'onglet "services" vous allez
ajouter une nouvelle base à la base de données Derby. Ainsi vous n'aurez plus de soucis quant à la
création de nouvelles tables, etc.
Donnez ensuite un nom à votre base. Vous DEVEZ OBLIGATOIREMENT donner un login/password.
1
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 !
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'un entity bean CompteBancaire
Vous allez créer un nouveau projet, à la manière du TP1. Donnez-lui un nom qui comporte votre
nom de binome !
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'entity bean (Classe entité...).
- donnez-lui le nom CompteBancaire, et spécifiez un package
- cochez Create Persistence Unit
2
Dans la création de la "Persistence Unit", vous indiquerez bien sur la nouvelle source de données que
vous venez de créer :
Vérifier qu'un fichier sun-resource.xml est apparu dans l'arbre du projet ejb, sous "server
resources".
Dans le code source de l'entity bean, 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'entity bean CompteBancaire afin que chaque compte bancaire possède :
• Le nom du propriétaire,
• Le solde du compte.
Comme dans le cours, ajouter une méthode pour initialiser le compte, pour retirer de l'argent,
pour en ajouter et pour consulter le solde.
3
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 : GestionnaireDeCompteBancaire
Vous allez maintenant écrire un session bean GestionnaireDeCompteBancaire, ce sera un session bean
stateless. Ce session bean va proposer pour le moment deux fonctionalités :
• créer un compte bancaire,
• afficher la liste des comptes bancaires
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 creerComptesDetest() {
creerCompte("John Lennon", 150000);
creerCompte("Paul Mac Cartney", 950000);
creerCompte("Ringo Starr", 20000);
creerCompte("Georges Harrisson", 100000);
}
Ecriture d'une servlet comptes et de jsps associées
Rappels:
1. normalement une servlet ne doit pas faire d'affichage HTML, elle sous-traite ce travail à une page jsp,
on utilise pour cela un requestForwarder. Si on veut passer des paramètres d'une servlet vers une jsp
on peut soit les ajouter dans la requête HTTP avant de forwarder vers la jsp, soit dans la session (dans
ce cas, on pourra conserver ce paramètre au travers d'une chaine de forward).
2. Une JSP ne doit pas faire de java, on utilise du XHTML ou des tags de la librairie JSTL pour itérer sur
une collection par exemple.
Inspirez vous de ces deux bouts de code issus du TP1 :
• servletTest.java
4
package tp1;
import
import
import
import
import
import
import
import
import
java.io.IOException;
java.util.Collection;
javax.ejb.EJB;
javax.servlet.RequestDispatcher;
javax.servlet.ServletException;
javax.servlet.annotation.WebServlet;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
@WebServlet(name="ServletTest", urlPatterns={"/ServletTest"})
public class ServletTest extends HttpServlet {
@EJB
private HelloWorldLocal helloWorld;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse
throws ServletException, IOException {
String name = request.getParameter("insert");
if(name!=null) {
helloWorld.addManufacturer(name);
}
Collection manufacturers = helloWorld.getAllManufacturers();
request.setAttribute("Manufacturers", manufacturers);
RequestDispatcher dp = request.getRequestDispatcher("DisplayManufacture
dp.forward(request, response);
}
.....
protected void doGet(HttpServletRequest request, HttpServletResponse response
......
5
protected void doPost(HttpServletRequest request, HttpServletResponse respons
}
• displayManufacturers.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>List of Manufacturers</h1>
<ul>
<c:forEach var="u" items="${requestScope['Manufacturers']}">
<li>${u.name}</li>
</c:forEach>
</ul>
</body>
</html>
Vous devrez utiliser ce type de conception pour votre application, fini les jsps et les servlets sauvages !
Travail à effectuer:
• Ecrire une page JSP d'accueil, intitulée creerComptesTest.jsp
• Cette page contient un lien : "créer compte tests et voir les comptes". Quand on clique dessus
les comptes sont créés puis la page afficheurDeComptes.jsp affiche la collection des comptes
dans un tableau HTML. Entre les deux, on est passé par la servlet suivante (que vous devez
aussi écrire),
• Ecrire une servlet comptes qui parle à l'ejb GestionDeCompteBancaire
6
• les méthodes creerComptesTest() et getAllComptes() de cette servlet sous-traitent le travail à
l'EJB session, récupèrent les comptes en question et forwardent le résultat à la page jsp
afficheurDeComptes.jsp
• Compilez, testez ! Regardez au fur et à mesure l'état des data dans la table des comptes bancaires.
Ajout de nouvelles fonctionalités
Vous allez maintenant écrire ce qu'il faut pour proposer le transfert d'argent d'un compte bancaire à
l'autre.
• Ecrire une page jsp transfertComptes.jsp qui parle à la servlet comptes et qui propose de chosir deux
comptes, d'indiquer la somme à transférer et effectuer le transfert.
• 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
• Si vous avez terminé ce travail, complètez le TP en vous inspirant des pages des banques en ligne
réelle pour la gestion des comptes.
Récupéré depuis "http://miageprojet2.unice.fr/index.php?title=Intranet_de_Michel_Buffa/
Cours_composants_distribu%C3%A9s_pour_l%27entreprise_%2F%2F_EJB_2009/
TP2_EJB_:_Ecriture_d%27un_gestionnaire_de_comptes_bancaire"
7