Application web de gestion de comptes en banques

Documents pareils
Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Compte Rendu d intégration d application

Java DataBaseConnectivity

Introduction à JDBC. Accès aux bases de données en Java

CREATION WEB DYNAMIQUE

Bases de données relationnelles

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Cours: Administration d'une Base de Données

PHP 5. La base de données MySql. A. Belaïd 1

contact@nqicorp.com - Web :

I4 : Bases de Données

Création d une application JEE

PHP 4 PARTIE : BASE DE DONNEES

Bases de Données relationnelles et leurs systèmes de Gestion

OpenPaaS Le réseau social d'entreprise

Refonte front-office / back-office - Architecture & Conception -

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

PROJET 1 : BASE DE DONNÉES REPARTIES

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Formation en Logiciels Libres. Fiche d inscription

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

SITE WEB E-COMMERCE ET VENTE A DISTANCE

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Notes de cours : bases de données distribuées et repliquées

I. MySQL : Serveur et SGBD

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

1/ Présentation de SQL Server :

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Programmation d application Bases de données avec Java

Compte-rendu de projet de Système de gestion de base de données

A QUOI SERVENT LES BASES DE DONNÉES?

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Pratique et administration des systèmes

Gestion du service des enseignements

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

TP réseau Android. Bidouilles Tomcat. a) Installer tomcat : il suffit de dézipper l'archive apache-tomcat windowsx64.zip.

SIO Page 1 de 5. Applications Web dynamiques. Prof. : Dzenan Ridjanovic Assistant : Vincent Dussault

Compétences Business Objects

AGRÉGATION «ÉCONOMIE ET GESTION»

NF26 Data warehouse et Outils Décisionnels Printemps 2010

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Département Génie Informatique

Olivier Mondet

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Authentification avec CAS sous PRONOTE.net Version du lundi 19 septembre 2011

Bases de données Page 1 de 11. Bases de données. Prof. : Dzenan Ridjanovic

1 Position du problème

1. Base de données SQLite

Etude de l ENT de l Université de Paris 5. Recommandations des experts suite à la journée du 29 octobre 2009

CQP Développeur Nouvelles Technologies (DNT)

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

1. Installation d'un serveur d'application JBoss:

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Outil de planification en ligne pour des créations de rendez-vous ou de sondage

Qu'est-ce que le BPM?

TP Programmation Java / JDBC / Oracle

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Les frameworks au coeur des applications web

Bases de données et sites WEB

Authentification et contrôle d'accès dans les applications web

Bases de Données Avancées

Diagramme de déploiement

SQL Historique

Diagramme de classes

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

Création et Gestion des tables

Stockage du fichier dans une table mysql:

TD/TP PAC - Programmation n 3

III. Contexte. Objectifs. Philippe HOUE, Ecole des Mines de Nantes

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Module BD et sites WEB

Etude de cas : PGE JEE V2

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

contact@nqicorp.com - Web :

Introduction aux Bases de Données

A QUOI SERVENT LES BASES DE DONNÉES?

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

Cours Bases de données 2ème année IUT

BOUCHARD Nicolas. GENTILE Pierre

Auto-évaluation Aperçu de l architecture Java EE

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Le Langage De Description De Données(LDD)

Web Tier : déploiement de servlets

Transcription:

Application web de gestion de comptes en banques Objectif Réaliser une application Web permettant à un client de gérer ses comptes en banque Diagramme de cas d'utilisation 1 Les cas d'utilisation Connexion au système L'utilisateur fourni son code client (entier, identifiant unique) et son mot de passe Si le ces informations sont correctes il est accède à une page listant l'ensemble de ses comptes Sinon, il reste sur la page de login et un message d'erreur est affiché Lister ses comptes L'utilisateur est connecté La liste des comptes accessibles au client apparaît Pour chaque compte on a : Le numéro du compte (entier identifiant) L'intitulé (livret A, compte Dépôt,.) Le nom du titulaire du compte Le solde du compte 2

Les cas d'utilisation Effectuer un transfert L'utilisateur est connecté L'utilisateur sélectionne un compte de départ, un compte d'arrivée L'utilisateur fournit le montant à transférer L'utilisateur demande le transfert (possible que si les données nécessaires au transfert ont été fournies) Le transfert est effectué Il n'est possible que si le montant du transfert respecte le débit maximum autorisé et le découvert maximum autorisé pour le compte à débiter. En cas d'impossibilité un message le signale à l'utilisateur Deconnexion L'utilisateur quitte le système, il doit repasser par la phase de connexion pour lister ses comptes où effectuer un virement 3 Interface et fonctionnement de l'application Page d'accueil Retour à la page de login en indiquant la cause de l'échec 1 Page liste des comptes Permet de sélectionner le compte source et le compte destination et le montant du transfert 1 2 Page pour effectuer un transfert Page affichage des résultats du transfert Réalisation du transfert échec Authentification de l'utilisateur ok Affiche la liste des comptes accessibles par le client Déconnexion 2 L'utilisateur n'a plus accès à l'application à moins de repasser par la phase d'authentification Page de déconnexion Annexe 3 : interface de l'application Banque IMA on line 1 2 Page indiquant si le transfert a réussi ou non Et en cas d'échec la raison de ce dernier 4

Composants Java de l'application présentation métier Accès aux données Navigateur Servlets Client ClientDAO Pages JSP Compte CompteDAO Serveur d'application Java JDBC SGBD Relationnel Les objets DAO (Data Access Object) isolent tout le code lié à la persistance des données Quand l'application a besoin d'effectuer une opération lié à la persistance elle fait appel à un objet DAO L'interface des objets DAO est indépendante du support de persistance Le reste de l'application utilise les DAO uniquement au travers de leur interface abstraite Par exemple si on change d'implémentation de DAO pour passer d'une base Oracle à des fichiers XML le reste de l'application demeure inchangé. Chaque classe d'objet métier a son propre type de DAO (ClientDAO, CompteDAO) Le même objet DAO peut être utilisé pour les objets d'une même classe d'objet métier 5 Travail à faire Définir la couche métier Les classes Java Client et Compte Définir la couche persistante Les tables de la base de données Définir la couche DAO Opérations CRUD (Create, Retrieve, Update, Delete) liées aux objets métier 6

Modèle conceptuel des données 7 Traduction en modèle relationnel CLIENTS CODE_CLIENT NOM PRENOM ADRESSE... 1234 DUPONT JEAN 12 RUE MACHIN GRENOBLE 1567 DURAND ANNE 2 IMPASSE TRUC ANNECY COMPTES PK PK FK NUMERO SOLDE DEBITMAX DECOUVERTMAX INTITULE TITULAIRE 56787 2567,90 1000 500 COMPTE DEPOT 1234 57890-107,50 1500 1000 COMPTE DEPOT 1567 47891 3000,50 1500 1000 COMPTE DEPOT 1567... PROCURATIONS FK FK CODE_CLIENT NUMERO 1234 57891 1567 56787 1234 47891... 8

Traduction en modèle relationnel Une autre modélisation possible. PK CLIENTS PK COMPTES FK CODE_CLIENT NOM PRENOM ADRESSE NUMERO SOLDE DEBITMAX DECOUVERTMAX INTITULE TITULAIRE 1234 DUPONT JEAN 12 RUE MACHIN GRENOBLE 56787 2567,90 1000 500 COMPTE DEPOT 1234 1567 DURAND ANNE 2 IMPASSE TRUC ANNECY 57890-107,50 1500 1000 COMPTE DEPOT 1567... 47891 3000,50 1500 1000 COMPTE DEPOT 1567... ACCES_COMPTES FK FK CODE_CLIENT NUMERO 1234 56787 V 1234 57891 1567 56787 1234 47891... TITULAIRE F F F Mais la première semble plus facile pour garantir la contrainte qu'un compte à un titulaire et un seul première solution retenue 9 Code SQL de création de la base CREATE TABLE CLIENTS (CODE_CLIENT INTEGER NOT NULL, NOM VARCHAR2(32) NOT NULL, PRENOM VARCHAR2(32) NOT NULL, ADRESSE VARCHAR2(50), PASSWD VARCHAR2(8), PRIMARY KEY (CODE_CLIENT)); CREATE TABLE COMPTES (NUMERO INTEGER NOT NULL, SOLDE FLOAT NOT NULL, DEBITMAX FLOAT NOT NULL, DECOUVERTMAX FLOAT NOT NULL, INTITULE VARCHAR2(32) NOT NULL, TITULAIRE FLOAT NOT NULL, PRIMARY KEY (NUMERO)); ALTER TABLE COMPTES ADD FOREIGN KEY (TITULAIRE) REFERENCES CLIENTS(CODE_CLIENT); CREATE TABLE PROCURATIONS (CODE_CLIENT INTEGER NOT NULL, NUMERO INTEGER NOT NULL); ALTER TABLE PROCURATIONS ADD FOREIGN KEY (CODE_CLIENT) REFERENCES CLIENTS(CODE_CLIENT); ALTER TABLE PROCURATIONS ADD FOREIGN KEY (NUMERO) REFERENCES COMPTES(NUMERO); INSERT INTO CLIENTS (CODE_CLIENT, NOM, PRENOM, ADRESSE, PASSWD) VALUES ('1003', 'LEHERO', 'Toto', '234 Rue Machin GRENOBLE', 'toto1003'); INSERT INTO CLIENTS (CODE_CLIENT, NOM, PRENOM, ADRESSE, PASSWD) VALUES ('1001', 'DUPOND', 'Jean', '23 Rue du Lac GRENOBLE', 'toto1001'); INSERT INTO CLIENTS (CODE_CLIENT, NOM, PRENOM, ADRESSE, PASSWD) VALUES ('1002', 'DURAND', 'Sophie', NULL, 'toto1002'); INSERT INTO COMPTES (NUMERO, SOLDE, DEBITMAX, DECOUVERTMAX, INTITULE, TITULAIRE) VALUES ('5203', '2320', '1000', '1000', 'Compte de dépot', '1002'); INSERT INTO COMPTES (NUMERO, SOLDE, DEBITMAX, DECOUVERTMAX, INTITULE, TITULAIRE) VALUES ('5204', '2199', '1000', '500', 'Livret A', '1002'); INSERT INTO COMPTES (NUMERO, SOLDE, DEBITMAX, DECOUVERTMAX, INTITULE, TITULAIRE) VALUES ('5205', '5500', '1000', '1000', 'Compte de dépot', '1003'); INSERT INTO COMPTES (NUMERO, SOLDE, DEBITMAX, DECOUVERTMAX, INTITULE, TITULAIRE) VALUES ('5201', '1600', '500', '500', 'Compte de dépot', '1001'); INSERT INTO COMPTES (NUMERO, SOLDE, DEBITMAX, DECOUVERTMAX, INTITULE, TITULAIRE) VALUES ('5202', '3100', '1000', '700', 'Livret A', '1001'); INSERT INTO PROCURATIONS (CODE_CLIENT, NUMERO) VALUES ('1002', '5202'); INSERT INTO PROCURATIONS (CODE_CLIENT, NUMERO) VALUES ('1001', '5204'); INSERT INTO PROCURATIONS (CODE_CLIENT, NUMERO) VALUES ('1001', '5205'); 10

Objets métier : la classe Compte Modélisation sans tenir compte l'association avec Client Accesseurs et modifieurs (getters et setters) Opérations "métier" Certaines opérations peuvent lever des exceptions. Définition d'une classe d'exception sur les comptes 11 Objets métier : la classe Compte Prise en compte de l'association avec Client Ajout d'un attribut? private Client titulaire Ajout d'un paramètres au constructeur? Client titulaire Ajout d'un accesseur? Client gettitulaire() Quand un Compte est chargé son titulaire doit-il être chargé? Quand un Client est chargé tous les Comptes auxquels il a accès doiventils être chargés? Risque de créer en cascade beaucoup d'objets inutiles 12

Objets métier : la classe Compte Prise en compte de l'association avec Client Ne pas conserver l'association Compte Client au niveau du modèle objet Ajout de deux attributs private int idtitulaire private String nomtitulaire Ajout de deux paramètres au constructeur int idtitulaire String nomtitulaire Ajout de deux accesseurs int getidtitulaire() String getnomtitulaire() 13 Objets métier : la classe Client 14

Objet DAO pour les Comptes Définir une interface ICompteDAO On pourra avoir ensuite plusieurs implémentations OracleCompteDAO pourr SGB Oracle MySQLCompteDAO pour SGBD MySQL Le code qui utilise les objets DAO utilise l'interface il ne dépend pas des implémentations 15 Objet DAO pour les Comptes interface ICompteDAO opérations CRUD (Create, Retrieve, Update, Delete) pour l'application Banque IMA seules des opérations Retrieve et Update sont nécessaires charger un compte à partir de son numéro public Compte retreive(int numero) enregistrer le solde d'un compte public Compte updatesolde(compte cpt) 16

Objet DAO pour les Comptes interface ICompteDAO les méthodes du DAO effectuent des entrées/sorties (dans notre cas accès à la BD) elles peuvent donc lancer des exceptions (SQLException) public Compte retreive(int numero) throws SQLEXception? public Compte updatesolde(compte cpt) throws SQLEXception? pas une bonne idée : si on veut pouvoir changer facilement de DAO il ne faut pas lier les exceptions à un type de DAO particulier 17 Objet DAO pour les Comptes interface ICompteDAO création d'une classe d'exception indépendante du type de DAO (DAOException) les méthodes d'implémentation des DAO attrapent les exceptions particulières (par exemple SQLException) et relancent des DAOException les exceptions d'origine sont chaînées aux DAOException 18

Objet DAO pour les Comptes Gestion des connexions JDBC Un attribut connexion créé (et donc ouvert) à la création de l'objet DAO? Possibles problèmes de timeout. La connexion peut être fermée automatiquement. Risques d'incohérences si multithreading (par exemple si il y a des transactions). Une connexion ouverte au début de chaque méthode du DAO et fermée à la fin de chaque méthode? Ouverture d'une connexion opération très coûteuse. Une solution : utilisation d'un pool de connexions. 19 Objet DAO pour les Comptes La classe d'implémentation aura un attribut DataSource que cette méthode permet d'initialiser 20

Objet DAO pour les Comptes interface ICompteDAO suite 21 L'API des objets DAO API publique package bima.dao implémentation privée package bima.dao.oracle 22

L'API des objets DAO Fabrique abstraite package bima.dao implémentations packages bima.dao.oracle et bima.dao.mysql 23 La DataSource javax.sql.datasource est une interface. Pas d'implémentation dans JSE typiquement gérée et crée par un conteneur d'application JEE (exemple conteneur web TOMCAT) Comment faire pour tester simplement nos DAO sans déployer un serveur d'application? utilisation d'une classe simulant une DataSource (c.a.d. qui implémente l'interface javax.sql.datasource) classe DataSourceDeTest 24

Travail à effectuer Réalisez une classe OracleCompteDAO qui implémente l'interface ICompteDAO Testez cette classe réfléchir sur la manière de procéder pour la tester Si du temps réfléchir aux problèmes soulevés par l'opération de Transfert? l'api ICompteDAO est-elle adaptée pour celle-ci? Quel enrichissement proposez vous? Implémenter et tester votre nouvelle API. 25 Travail a effectuer Une fois votre classe CompteDAO testée indépendamment la tester dans un serveur Tomcat 1) Créer une application Web sous NetBeans 26

Travail a effectuer 2) configurer cette application de manière à ce qu'elle définisse une source de données JDBC (javax.sql.datasource) qui sera gérée par Tomcat <Context path="/bima"> <Context path="/bima"> <Resource name="jdbc/bima" <Resource name="jdbc/bima" auth="container" auth="container" type="javax.sql.datasource" type="javax.sql.datasource" maxactive="10" maxactive="10" maxidle="3" maxidle="3" maxwait="10000" maxwait="10000" username="genoud" username="genoud" password="xxxxxxx" password="xxxxxxx" driverclassname="oracle.jdbc.oracledriver" driverclassname="oracle.jdbc.oracledriver" url="jdbc:oracle:thin:@hopper.e.ujf-grenoble.fr:1521:ufrima"/> url="jdbc:oracle:thin:@hopper.e.ujf-grenoble.fr:1521:ufrima"/> </Context> </Context> Pour en savoir plus voir le document... <servlet-mapping>... </servlet-mapping> <resource-ref> <res-ref-name>jdbc/bima</res-ref-name> <res-type>javax.sql.datasource</res-type> <res-auth>container</res-auth> </resource-ref>... http://www.inrialpes.fr/helix/people/genoud/ensjava/cours/supportspdf/datasource_2pp.pdf 27 Travail a effectuer 2) dans cette application créer une servlet 28

Travail à effectuer modifier le code de la servlet de manière à ce que : à son initialisation elle récupère dans un variable d'instance la référence de la data source correspondant à votre base de données pour la banque IMA. dans sa méthode de traitement de la requête HTTP elle récupère un paramètre : un numéro de compte en banque elle construit à l'aide de la classe OracleCompteDAO un objet Compte correspondant au numéro récupéré dans la requête HTTP elle renvoie une page HTML présentant les différentes infos liées à ce compte 29 L'application BIMA_V0 POST numero_compte=5201 1 3 CompteServlet 2 Compte création d'un objet Compte à partir des données contenues dans la base construction et renvoi d'un page HTML à partir des données de l'objet Compte 30

Structure du projet BIMA_V0 pages HTML (statiques) correspondant à une maquette de l'application fichiers de configuration de l'application Web package bima.dao : classes et interfaces publiques pour les DAO package bima.dao.mysql : implémentation (privée) des DAO pour une base MySQL (non terminée) package bima.dao.oracle : implémentation (privée) des DAO pour une base Oracle package bima.model : objets "métier" pour les Clients et Comtpes package bima.servlets : servlets de l'application Web 31 Enrichissement de BIMA_V0 Page d'accueil Retour à la page de login en indiquant la cause de l'échec 1 Page liste des comptes échec Authentification de l'utilisateur ok Affiche la liste des comptes accessibles par le client <JSP > accueil.html redirection vers la page d'accueil redirection vers la page d'accueil POST client_id="5000" passwd="monmotdepasse" échec 1 Authentification de l'utilisateur LoginServlet.java Récupérer les paramètres Récupérer les paramètres de la requête de la requête 2 ok 3 redirection vers listecomptes.jsp redirection vers listecomptes.jsp Création à partir de client_id et passwd Création à partir de client_id et passwd d'un objet Client d'un objet Client Enregistrement de ce Client dans la session Enregistrement de ce Client dans la session Client <JSP > listecomptes.jsp 32

Enrichissement de BIMA_V0 Déconnexion LogoutServlet L'utilisateur n'a plus accès à l'application à moins de repasser par la phase d'authentification Rediriger vers la page Bye.jsp en plaçant le nom et Rediriger vers la page Bye.jsp en plaçant le nom et prénom de l'utilisateur comme attributs de la prénom de l'utilisateur comme attributs de la requête requête Terminer la session Terminer la session nom="dupont" prenom="jean" Page de déconnexion <JSP > Bye.jsp 33 Enrichir l'application Web récupérer la maquette HTML de l'application mettre en œuvre le début de l'application login et accès à liste des comptes du client 34