À : NAPIERVEAU LTÉE, personne morale légalement constituée ...
Gestion du budget familial, liste de marché en fonction...
Transcript of Gestion du budget familial, liste de marché en fonction...
Gestion du budget familial, liste de marché en fonction des recettes 2008
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 1
Gestion du budget familial, liste de marché en fonction des recettes 2008
GESTION DU BUDGET FAMILIALLISTE DE MARCHE EN FONCTION DES
RECETTES
PROJET DE SPECIALITE
KOLLE KOUO MOUDIKI Jean Hervé
Etablissement: ISTDI
Département : CS2I
Filière : Développement logiciel
Mots-clé : Java, J2EE, MySQL, JBOSS, JPA, DAO, DVO, EJB, Eclipse
Date dépôt : 23 Juin 2008
Superviseur : M. Lorince TAWAMBA
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 2
Gestion du budget familial, liste de marché en fonction des recettes 2008
SOMMAIRE
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 3
Gestion du budget familial, liste de marché en fonction des recettes 2008
INTRODUCTION
Dans la vie, il est évidant que les problèmes que nous rencontrons sont proportionnels
à notre niveau de vie ; cependant la manière de les résoudre peut etre commune : la mise en
place d’un processus de résolution de problèmes. Ainsi, afin de résoudre le problème des
familles qui ne tiennent pas les deux bouts avec leur revenu (grand ou petit), nous leur
proposons une application de gestion du budget familial. La suite de ce document présente
premièrement le projet, puis le processus de réalisation de ce dernier.
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 4
Gestion du budget familial, liste de marché en fonction des recettes 2008
I. PRESENTATION DU PROJET
1. ROLE DE L’APPLICATION
« Si tu ne peux pas le mesurer tu ne peux pas le contrôler, si tu ne peux pas le
contrôler tu ne peux pas le gérer, si tu ne peux pas le gérer tu ne peux pas l’améliorer »,
Harrington. Notre application se doit d’aider les familles dans l’optimisation de leurs
dépenses quotidiennes par rapport à leur revenu mensuel.
2. FONCTIONNALITES CLES
Les fonctionnalités principales sont les suivantes :
- Création des utilisateurs
- Identification des utilisateurs
- Définition du budget mensuel
- Répartition du budget mensuel par catégorie de dépense
- Enregistrement des dépenses quotidiennes
- Composition de recette de cuisine
- Affichage d’une liste de marché en fonction des recettes de cuisine choisies
3. INNOVATION
Il existe sur le marché des applications de gestion semblables à la notre, cependant
nous offrons la possibilité d’obtenir la liste de marché en fonction des recettes de cuisine
sélectionnées, fonctionnalité qui agrandie la polyvalence de l’application car, elle peut aussi
bien fonctionner dans un restaurant, voire dans un hôtel
4. PUBLIC VISE
Le public visé par l’application de gestion du budget familial est premièrement
l’ensemble des familles Camerounaises, puis celles de notre chère planète
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 5
Gestion du budget familial, liste de marché en fonction des recettes 2008
5. CONTEXTE
Cette application est développée dans le cadre du projet de spécialité de la filière
« Développement logiciel » du CS2I Cameroun (ISTDI) et, pour le développeur, dans le cadre
de l’apprentissage et de la maîtrise du développement d’applications entreprises respectant le
standard J2EE(Java 2 Enterprise Edition)
6. OBJECTIFS
Deux objectifs sont à atteindre pour ce projet : le principal est la maîtrise pratique du
standard J2EE, et l’autre est de fournir une application pour les utilisateurs.
7. VERSION
Il s’agit de la première implémentation, aucune amélioration ou version n’a encore vue
le jour.
8. PLANNING
Le planning utilisé dans la réalisation du projet est le suivant
1 Définition des spécifications de l’application2 Conception du modèle de données 3 Mise en place de l’architecture logicielle4 Installation des serveurs : serveur de base de données et
serveur d’application5 Développement des composants métiers (EJB) 6 Déploiement et test7 Début de création des interfaces client8 Finalisation du rapport
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 6
Gestion du budget familial, liste de marché en fonction des recettes 2008
II. DEVELOPPEMENT
Cette section présente premièrement le standard J2EE utilisé dans notre projet, puis,
brièvement, les étapes de développement de l’application.
1. PRESENTATION DU STANDARD J2EE UTILISE : JAVA EE 5
Java 2 Enterprise Edition (J2EE) est une plateforme de développement et un ensemble
de spécifications pour le développement d’applications entreprise multi-tiers. Les versions de
J2EE sont depuis 1997 passées de 1.0 à J2EE 1.4 en 2003, et J EE 5 aujourd’hui, cependant
nous avons porté notre choix sur JEE5 car il permet la gestion facile de la persistance.
EJB3 (Enterprise Java Bean 3) fait parti de JEE5 ; né en Mai 2006, c’est une
spécification d’un cadre pour l’utilisation de composants métiers réutilisables par les serveurs
d’applications Java.
JPA (Java Persistance API) est la partie de la spécification EJB3 qui concerne la
persistance des composants dans une base de données relationnelle. JPA s’applique aussi sur
les applications Java qui s’exécutent en dehors des serveurs d’application.
a) DEFINITION D’UNE APPLICATION ENTREPRISE
Les entreprises présentent généralement les besoins suivants : le partage
d’informations, la gestion et le suivi de ses ressources, la planification, la gestion de sa
clientèle … Une application entreprise est l’ensemble des applications qui participent au
support des besoins ci-dessus.
b) COMPOSITION D’UNE APPLICATION ENTREPRISE
Une application entreprise est constituée des éléments suivants :
- Un client : dont le rôle principal est de présenter les données issues du serveur
- Un serveur d’application : qui contient EJB (les composants métiers) tout en les
gérant
- Les EJB : responsables de la logique applicative ; les EJB représentent le cœur du
serveur J2EE.
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 7
Gestion du budget familial, liste de marché en fonction des recettes 2008
- Une base de données : pour la persistance des données.
2. ANALYSE ET CONCEPTION
Tout au long de cette étape, nous nous sommes servis du langage de modélisation
UML (Unified Modeling Language) qui, à travers les cas d’utilisations jusqu’au diagramme
de classe, nous a permis de mettre en place les tables de notre base de données.
a) FONCTIONNALITES ATTENDUES
Le diagramme de cas d’utilisations suivant illustre les fonctionnalités attendues.
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 8
Gestion du budget familial, liste de marché en fonction des recettes 2008
b) ARCHITECTURE DE L’APPLICATION
Le schéma suivant présente l’architecture utilisée dans notre projet.
Le client est représenté par le navigateur web qui affichera des pages JSP (JavaServer
Pages) .
Les JSP sont des scripts insérés dans les pages html, et forment des parties du
document HTML générées lors des échanges avec le serveur.
Les session bean et entity bean sont deux types d’EJB. La session bean représente les
processus, plus précisément elle réalise une tâche au nom du client ; tandis que l’entity bean
représente les données de l’application. La précision CMP(Container Managed Persistence)
signifie que la persistance est géré par le conteneur du serveur d’application, plutôt que par le
bean lui-même(BMP : Bean Managed Persistence); l’avantage avec les CMP est la diminution
de la complexité des échanges qui existent avec la base de données.
La DAO (Data Access Object) représente un pattern pour la persistance des objets. Il
s’agit en fait d’encapsuler le code lié à la persistance des données dans les objets DAO dont
l’interface est indépendante du support de persistance. Ainsi, quand l’application a besoin
d’effectuer une opération liée à la persistance d’un objet, elle fait appel à un objet DAO à qui
elle passe l’information nécessaire pour effectuer l’opération. L’information est donc
transmise dans une DVO (Data Value Object) dans notre application.
Le DVO contient l’état d’un objet, il est construit sur le site distant et transmis
directement au client. Son intérêt est qu’il permet de transporter les objets distants pas
transportables sur le réseau ; son utilisation optimise les performances du serveur.
La base de données assure la pérennité des données.
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 9
Gestion du budget familial, liste de marché en fonction des recettes 2008
Pour conclure cette section, il est à noté que le fonctionnement des JSP nécessite un
conteneur web tandis que celui des EJB nécessite un conteneur d’EJB.
3. CHOIX DES OUTILS
Dans cette section nous présenterons les outils utilisés, leur installation et
configuration nécessaire, puis les motivations de nos choix. Il s’agit respectivement du
JDK(Java Développement Kit, Kit de Développement Java), l’EDI (Environnement de
Développement Intégré), du serveur d’application et du serveur de base de données.
a) JDK : JDK1.5.0_09
Le JDK est l’outil principal qui nous permet de développer des applications Java. La
version utilisée est 1.5.0_09, tandis que la dernière version porte le numéro 1.6.1 à la date à
laquelle nous éditons ces lignes. Ce choix est une contrainte à respecter pour utiliser le
serveur d’application que nous verrons plus bas.
Télécharger le JDK sur le site de SUN (http://www.sun.com) et l’installer en prenant
le son de configurer la variable d’environnement avec les valeurs suivantes :
Nom de la variable : JAVA_HOME
Valeur : répertoire de base du JDK, exemple : C :\Program Files\Java\Jdk1.5.0_09
b) EDI : ECLIPSE EUROPA (ECLIPSE 3.3)
Un IDE est un logiciel aidant à réaliser d’autres logiciels ; c’est aussi un ensemble
d’outils permettant de couvrir le cycle de vie du logiciel (analyse, conception, réalisation,
maintenance). Parmi les IDE on distingue :
IDE GRATUIT(G) /
PAYANT(P)
PERMET LE
DEVELOPPEMENT
AVEC J2EE
POUR PLUS
D’INFORMATIONS
Microsoft
Visual Studio
P NON http://www.microsoft.com
Eclipse G OUI http://www.eclipse.org
Borland P OUI http://www.borland.com/jbuilder
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 10
Gestion du budget familial, liste de marché en fonction des recettes 2008
JBuilderNetBeans (Sun) G OUI http://www.sun.com/forte ou
http://www.netbeans.orgSun One (Sun) P OUI http://www.sun.comOracle
JDevelopper
P OUI http://www.oracle.com
Bea Weblogic
WorkShop
P OUI http://www.bea.com
Windev (pcsoft) P NON www.pcsoft.fr
Notre choix à été porté sur Eclipse car il est gratuit, modulable (plug-ins disponibles
selon les fonctions recherchées par le développeur pour personnaliser son IDE), et possède
une très grande communauté d’utilisateurs toujours prêt à réagir à chaque problème posé.
L’exécutable est disponible à l’adresse http://www.eclipse.org/download/index.php
c) SERVEUR D’APPLICATION : JBOSS APPLICATION SERVER (JBOSS-
4.2.1.GA)
Le serveur d’application doit jouer le rôle de conteneur web et de conteneur d’EJB,
afin de respecter l’architecture choisie au départ. Parmi les serveurs d’applications on compte
SERVEUR
D’APPLICATION
OFFRE
COMMERCI
ALE(C) /
CONTENEU
R WEB
(CW) / EJB
POUR PLUS D’INFORMATIONS
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 11
Gestion du budget familial, liste de marché en fonction des recettes 2008
OPEN-
SOURCE(O)
(CE)
Sybase EAServer C - http://www.sybase.com/products/easerv
erBEA Weblogic AS C CE+CW http://www.bea.com haut de gammeIBM Websphere C CE+CW N° 1Sun Java System
AS
C CE+CW http://www.sun.com
Borland Enterprise
Server
C CE+CW -
Oracle9i AS C CE+CW http://www.oracle.comMacromedia jRun C - -SAP Web AS C CE+CW -Iona Orbix E2A C CE+CW -JBoss AS O CW+CE N° 1 en nombre de déploiements
http://www.jboss.org/download.jspObjectWeb JOnAS O CW+CE N°2, intégré à plusieurs distributions
Linux Entreprise.
http://www.objectweb.org Apache Geronimo O CE+CW http://www.apache.orgopenEjb O CE -ejBean O - -
Pour la suite, nous avons choisi JBOSS AS il est le numéro 1 parmi les serveur gratuit,
il est bien documenté, il implémente l’ensemble des spécification J2EE, il utilise moins de
mémoire et est actuellement l’un des rares serveurs open source à accepter le déploiement des
EJB3 nécessaire à la réalisation de notre application. La version utilisée est jboss-4.2.1.GA
(non de code jboss Trinity).
La version utilisée nécessite uniquement le JDK1.5.x pour fonctionner ; s’assurer
avant que ce dernier soit installé et configuré avec la variable d’environnement
JAVA_HOME qui pointe sur le répertoire de base du JDK. Puis, télécharger l’archive jboss-
4.2.1-GA .zip à l’adresse http://www.jboss.org/download.jsp et la dézipper dans un répertoire
au choix ; définir et renseigner les variables d’environnements suivantes :
Variable : JBOSS_HOME , valeur : répertoire de base de jboss (C:\jboss-4.2.1-GA)
Variable : CLASSPATH, valeur : %JAVA_HOME%\lib\tools.jar
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 12
Gestion du budget familial, liste de marché en fonction des recettes 2008
d) SERVEUR DE BASE DE DONNEES : MySQL(MySQL 5.0.51a-community)
Le serveur MySQL est utilisé ici en lieu et place d’autres serveurs car il est encore
libre (encore car MySQL à été rachetée par la société SUN, et nul ne sait quelle sera la suite),
stable, rapide et nous le maîtrisons mieux ; de plus il intervient beaucoup dans le
développement d’application entreprises avec jboss, dont les documentations sont accessibles.
Cependant, nous avons utilisés UML pour la conception et notre modèle de données
est un modèle objet. Pourquoi ne pas avoir choisie une base de données objet et comment
utiliser un modèle objet avec une base de données relationnelle?
d.1) RAISONS DU CHOIX D’UNE BASE DE DONNEES RELATIONNELLE
En effet, la légère complexité des bases de données objets ne nous aurait pas permis
d’arriver à un certain stade de réalisation avec le peu de temps qui nous était imparti ; de plus
notre objectif premier est de maîtriser le développement d’application avec le standard J2EE,
déjà complexe ; augmenter la complexité ne nous aurais en aucun cas permit d’atteindre notre
but. il
d.2) MOYEN DE REPRESENTATION DES OBJETS DANS UNE BASE DE
DONNEES RELATIONNELLE
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 13
Gestion du budget familial, liste de marché en fonction des recettes 2008
Il s’agit du mapping objet/relationnel (ORM – Object Relationnal Mapping) qui est
une technique permettant de faire le lien entre la représentation des données et sa
repésentation basée sur un schéma SQL. Ce mapping est réalisé par un outil de mapping
encore appelé fournisseur de persistance.
d.3) OUTILS DE MAPPING OBJET / RELATIONNEL
Pour débuter, rappelons que JPA (Java Persistance API) est la spécification standard
pour la persistance des objets Java (http://jcp.org/en/jsr/detail?id=220 pour pus de détails sur
JPA). La majorité des fournisseurs de persistance qui existent sur le marché implémentent ce
standard. C’est ainsi que l’on distingue :
- TopLink Essential (produit Oracle), qui est l’implémentation de référence de JPA
- Hibernate Entity Manager (http://www.hibernate.org)
- JDO (Java Data Object), une autre API qui offre des fonctionnalités semblables à
JPA
- Bea Kodo
Nous avons choisi hibernate comme fournisseur de persistance car la plupart de nos
recherches nous ont guidés vers ce fournisseur ; de plus les premiers tests cet outil étaient
satisfaisant. Hibernate s’occupe du transfert de classes dans la base de données (et des types
de données java dans les types de données SQL) et facilite au maximum les requêtes au
développeur.
4. PROGRAMMATION
La programmation s’est déroulée en trois étapes qui sont respectivement
- La création des composants EJB : projet BudfamJPA
- La création du client qui utilisera l’EJB : projet BudFamJSF
- La création de l’application entreprise : projet BudFamEAR
a) CREATION DES COMPOSANTS EJB
a.1) PRESENTATION ET STRUCTURE D’UN EJB
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 14
Gestion du budget familial, liste de marché en fonction des recettes 2008
L’EJB représente le cœur du serveur J2EE. Cependant on distingue plusieurs types de
bean : session bean, entity bean et message driven bean.
Le session bean est chargé d’exécuter une tâche pour le client, il est non persistante et
se présente sous deux formes qui sont stateless (bean sans état, un bean pour tous les clients)
et statefull (bean avec état, un bean par utilisateur).
L’entity bean représente les données pérennes de l’application ; c’est un composant
qui existe physiquement sur un support de stockage : il est persistant. Cette persistance peut
être gérée soit par le conteneur d’EJB (CMP- Container Managed Persistance), soit
directement par le développeur avec le bean (BMP – Bean Managed Persistance, plus lourd à
gérer)
Le message driven bean est responsable de la communication par message.
Parmi les types ci-dessus, notre application utilisera les types entity et session, chacun
implémenté sous forme de classe Java.
Pour ce qui est de la structure, un EJB compte trois grandes parties :
- Le bean : qui fournit l’implémentation de la logique métier (business logic)
- Les interfaces Home et Remote : les clients utilisent l’interface Home pour trouver
ou créer une instance de l’EJB tandis que l’interface Remote reflète les méthodes
que l’on souhaite rendre disponible au monde extérieur
- Le descripteur de déploiement : qui est un fichier d’information (fichier xml)
- Toutes ces parties sont empaquetées dans un fichier JAR (Java Archive)
Pour la suite, nous définirons uniquement l’interface Remote ; l’interface Home sera obtenue
par un simple casting lors de l’invocation de méthode ou d’une instanciation.
Ayant maîtrisé la structure de l’EJB, passons donc à sa construction.
a.2) ENTITY BEAN
Nous représentons premièrement le diagramme de classe, puis dans les tableaux
suivants les entity bean utilisés, leurs attributs et méthodes respectives en dehors des
accesseurs getters et setters;
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 15
Gestion du budget familial, liste de marché en fonction des recettes 2008
• Alerte : Alerte générée en cas de dépassement du budget alloué à une catégorie de
dépense.
ATTRIBUTSlong idalerte Clé primaire, identifiant de l’alerteString annee AnnéeString mois MoisDouble mtdefini Montant défini pour la catégorieDouble ecart Ecart constatéString libcat Libellé de la catégorieUtilisateur iduser Utilisateur concerné par l’alerte
METHODESvoid addAlerte(Alerte alerte) Ajoute une alerteAlerte findAlerteById(long id) Retrouver une alerte à partir de son idCollection<Alerte>
getAllAlerteOfUser(long iduser)Récupérer toutes les alertes d’un utilisateur
Collection<Alerte>
getAlerteOfUserByMois(long iduser,
String annee, String mois)
Récupérer pour un mois donné, les alertes
d'un utilisateur
void delAlerte(long id); Supprimer une alerte
• Budgetmensuel : Budget mensuel défini par un utilisateur
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 16
Gestion du budget familial, liste de marché en fonction des recettes 2008
ATTRIBUTSlong idbudget Clé primaire, identifiant du budget mensuelDouble solde Solde String mois Mois String annee AnnéeDouble mtalloue Montant allouéUtilisateur iduser Utilisateur concerné
METHODESString
addBudgetMensuel(Budgetmensuel
budMens)
Définir le budget mensuel
String delBudgetMensuel(long id) Supprimer le bugdet mensuel d'un utilisateurString
updBudgetMensuel(Budgetmensuel budM)Modifier le budge mensuel d'un utilisateur
Budgetmensuel
findBudgetmensuelById(long id)Récupérer le budget mensuel à partir de son
idCollection<Budgetmensuel>
getAllBudgetOfUser(long iduser)Récupérer la liste contenant tous les budgets
définis par un utilisateurCollection<Budgetmensuel>
getBudgetOfUserByAnnee(long iduser,
String annee)
Récupérer la liste contenant les budgets
définis par unutilisateur au cours d'une année
Collection<Budgetmensuel>
getBudgetOfUserByMois(long iduser,
String annee, String mois)
Récupérer la liste contenant les budgets
définis par unutilisateur au cours du mois
d'une année
• Comporecette : Composer une recette de cuisine
ATTRIBUTSComporecettePK pk Clé primaire concaténée, identifiant de la
composition d’une recette : classe construite
à partDouble pu Prix unitaire de l’aliment au marchéDouble qte Quantité de l’aliment dans la recetteRecette idrecette Recette entrant dans la compositionAliment idaliment Aliment entrant dans la recette
METHODESString
addAlimentToRecette(Comporecette cp)Ajouter un aliment dans une recette
void delAlimentToRecette(long
idAliment, long idRecette)Supprimer un aliment dans une recette
void
updAlimentToRecette(Comporecette cp)Modifier les attributs (pu, qté) d'un aliment
dans la composition d'une recetteCollection<Recette>
getRecetteWhereThisAlimentIs(Aliment
aliment)
Lister les recettes qui contiennent cet aliment
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 17
Gestion du budget familial, liste de marché en fonction des recettes 2008
Comporecette
findComporecetteByPK(ComporecettePK
pk)
Récupérer une ligne de la table comporecette
à partir de son pk
Les attributs de la classe ComporecettePK sont les suivants :
long idrecette2 Identifiant de la recettelong idaliment2 Identifiant de l’aliment
• Recette : Recette de cuisine
ATTRIBUTSlong idrecette Clé primaire, identifiant de la recetteString descrct Description de la recetteString nomrecette Nom de la recetteUtilisateur iduser Utilisateur concerné par la recette
METHODESString addRecette(Recette recette) Ajouter une recettevoid delRecette(long id) Supprimer une recetteString updRecette(Recette recette) Modifier une recetteRecette findRecetteById(long id) Récupérer une recette à partir de son idCollection<Recette>
getAllRecetteOfUser(long iduser)Récupérer les recettes définies par un
utilisateurCollection<Aliment>
getAlimentOfThisRecette(Recette
recette)
Récupérer les aliments qui composent une
recette
• Aliment : Aliment pour les recettes de cuisine
ATTRIBUTSlong idaliment Clé primaire, identifiant de l’alimentString nomaliment Nom de l’alimentString unite Unité de commercialisationlong iduser Identifiant de l’utilisateur qui a enregistré
l’alimentMETHODES
void addAliment(Aliment aliment) Ajouter un alimentString delAliment(long id) Supprimer un alimentAliment findAlimentById(long id) Retrouver un aliment à partir de son IDAliment updAliment(Aliment aliment) Modifier un alimentCollection <Aliment>
getAllAlimentOfUser(long iduser)Renvoyer tous les aliments d'un untilisateur
Collection <Aliment>
getAllAlimentBD()Renvoyer tous les aliments de la base de
données
• Utilisateur : Utilisateur de l’application
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 18
Gestion du budget familial, liste de marché en fonction des recettes 2008
ATTRIBUTSlong iduser Clé primaire, identifiant de l’utilisateurString nomfamille Nom de familleString nonutil Nom utilisateur pour la connexion à
l’applicationString mot2pass Mot de passeString repsec Réponse secrète pour la récupération du
mot de passe en cas de perteString quesec Question secrète pour la récupération du
mot de passe en cas de perteString grp Groupe d’appartenance de l’utilisateur :
user, admin , passifString tel1 Téléphone1String tel2 Téléphone2String email E-mail
METHODESString addUtilisateur(Utilisateur
utilisateur)Créer un utilisateur
String updUtilisateur(Utilisateur
utilisateur)
Modifier un utilisateur
Utilisateur findUtilisateurById(long
id)Récupérer un utilisateur à partir de son id
Utilisateur connexionUtilisateur(String
nomUtil, String mot2pass)Connexion à l’application
Collection<Aliment>
ListeDeMarche(Collection<Recette>
mesRe7)
Renvoyer la liste de marché en fonction
des recettes choisies
Collection<Recette>
proposerRe7(Collection<Aliment>
mesAliments)
Proposer une/des recettes en fonction des
aliments choisi
Utilisateur recupPwd(String nomUtil,
String quest, String rep)Récupérer le mot de passe en cas de perte
• Logconnexion : Journal de connexion des utilisateurs
ATTRIBUTSlong idlog Clé primaire, identifiant du log de connexionTimestamp datehcnx Date et heure du jourUtilisateur userlogin Utilisateur conncerné
METHODESvoid addLogConnexion(Logconnexion
logcnx)Enregistrer une connexion dans le journal
Logconnexion
findLogconnexionById(long id)Récupérer un log de connexion à partir de
son idCollection<Logconnexion>
getAllLogConnexionOfUser(long Récupérer tous les logs de connexion d'un
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 19
Gestion du budget familial, liste de marché en fonction des recettes 2008
iduser) utilisateurvoid delLogConnexion(long iduser) Supprimer tous les log d'un utilisateur
• Catdepense : Catégorie de dépense
ATTRIBUTSint idcat Clé primaire, identifiant de la catégorieString libcat Libellé de la catégorieString descat Description de la catégorie
METHODESString addCatDepense(Catdepense
catdepense)Enregistrer une catégorie de dépense
String delCatDepense(int id) Supprimer une catégorie de dépenseString updCatDepense(Catdepense
catdepense)Modifier une catégorie de dépense
Catdepense findCatdepenseById(int
id)Récupérer une catégorie de dépense à partir
de son idCollection<Catdepense>
getAllCatDepense()Récupérer toutes les catégories de dépense
• Depense : Dépenses quotidiennes des utilisateurs
ATTRIBUTSlong iddepense Clé primaire, identifiant de la dépenseDate lejour Jour de la dépenseString moisdep MoisDouble mtdep MontantString motifdep Justificatifs de la dépenseString anneedep Année Catdepense idcat Catégorie relative à la dépenseUtilisateur iduser Utilisateur concerné par la dépense
METHODESString addDepense(Depense depense) Enregistrer une dépensevoid delDepense(long id) Supprimer la dépense d’un utilisateurDepense findDepenseById(long id) Retrouver une dépense à partir de son idvoid updDepense(Depense depense) Modifier une dépenseCollection<Depense>
getAllDepenseOfUser(long iduser)Récupérer toutes les dépenses d'un utilisateur
Collection<Depense>
getAllDepenseOfUserByAnnee(long
iduser, String annee)
Récupérer les dépenses annuelles d'un
utilisateur
Collection<Depense>
getAllDepenseOfUserByMois(long
iduser, String annee, String mois)
Récupérer les dépenses mensuelles d'un
utilisateur
• Distbudget : Allouer le budget mensuel par catégorie de dépense
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 20
Gestion du budget familial, liste de marché en fonction des recettes 2008
ATTRIBUTSDistbudgetPK pk Clé primaire concaténée, classe construite à
part, identifiant de la distribution double solde Solde pour la catégorie concernée double mtallouecat Montant alloué à la catégorie concernéeCatdepense idcat Catégorie pour laquelle le budget est allouéUtilisateur iduser Utilisateur responsable de l’allocation
METHODESDistbudget
findDistbudgetByPK(DistbudgetPK pk)Récupérer le budget alloué à une catégorie à
partir de sa clé primaireString
addBudgetToThisCategorie(Distbudget
db)
Allouer le budget à une catégorie
String
delBudgetOfThisCategorie(Distbudget
db)
Supprimer le budget alloué à une catégorie
String
updBudgetOfThisCategorie(Distbudget
db)
Modifier le budget alloué a une catégorie
Collection<Distbudget>
getBudgetOfThisCategorie(long
iduser, int idCategorie)
Récupérer pour un utilisateur tous les budgets
définis dans une catégorie
Collection<Distbudget>
getBudgetByCategorieByAnnee(long
iduser, String annee)
Récupérer le budget par année pour toutes les
catégories
Collection<Distbudget>
getBudgetByCategorieOfThisMois(long
iduser, String annee, String mois)
Récupérer le budget du mois pour toutes les
catégories
Les attributs de la classe DistbudgetPK sont les suivants :
int idcat2 Identifiant de la catégorielong iduser2 Identifiant de l’utilisateurString annee AnnéeString mois Mois
Les relations qui existent entre ces beans sont illustrées sur la figure suivante :
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 21
Gestion du budget familial, liste de marché en fonction des recettes 2008
Ces relations sont gérées au niveau des classes java par les annotations définies par
JPA et qui se trouvent dans le package javax.persistence. Ce sont :
@OneToMany : relation de un à plusieurs ; un utilisateur enregistre plusieurs
dépenses. Cette annotation se trouvera dans la classe Utilisateur et au dessus de la variable qui
référence la collection des dépenses de l’utilisateur.
@ManyToOne : plusieurs dépenses dont chacune appartient à un utilisateur précis ;
cette annotation se trouve dans la classe Dépense et au dessus de la variable qui fait référence
à l’Utilisateur responsable de la dépense
@ManyToMany : relation de plusieurs à plusieurs
@OneToOne ; relation bijective
Chaque annotation possède des attributs, qui ont pour rôle de spécifier le
comportement des classes lors des requêtes vers ka base de données.
a.3) SESSION BEAN
En effet, les méthodes que présentent les entity bean ci-dessus ne sont ni déclarées, ni
implantées dans les beans correspondant. Chaque entity bean donne lieu à une interface qui
déclare ses méthodes ; cette interface est Remote c'est-à-dire implémente javax.ejb.Remote.
Pour la nomenclature, le nom de l’interface porte celui de la classe suffixé de DAO ; exemple
AlerteDAO est l’interface définissant les méthodes de la classe Alerte. Ainsi, toutes les
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 22
Gestion du budget familial, liste de marché en fonction des recettes 2008
méthodes sont implantées dans la stateless session bean que nous utilisons : UserDAOBean.
Le schéma suvant résume tout ce que nous venons de dire :
Les beans étant créer, il faut configurer le descripteur de déploiement.
a.4) CONFIGURATION DU DESCRIPTEUR DE DEPLOIEMENT
Il s’agit du fichier persistance.xml dont le chemin d’accès est présenté à la figure ci-
dessous. Rappelons ici que notre founisseur de persistance est Hibernate.
Le fichier persistance.xml présenté par la suite renseigne sur les éléments suivants :
- Le nom de l’unité de persistance : BudFamJPA ;
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 23
Gestion du budget familial, liste de marché en fonction des recettes 2008
- La source de données : java:/BudFamDS ; ce nom doit être le même que celui de la
source de données dans le serveur jboss que l’on configurera par la suite (fichier
mysql-ds.xml)
- Le fournisseur de persistance : Hibernate , configuré dans la balises properties, la
première propriété spécifie la base de données (MySQL) et le moteur de stockage
(InnoDB) que nous utilisons ; la deuxième spécifie l’action à réaliser sur la base de
données : il s’agit de la mise à jour de celle-ci (update).
Maintenant que nous avons créé le cœur (EJB), il faut faire un premier déploiement
afin de le tester et s’assurer qu’il répond aux besoins exprimés et qu’il est exempt de bugs.
a.5) DEPLOIEMENT DE L’EJB
Pour déployer notre composant, il suffit de configurer les fichiers mysql-ds.xml et
standardjbosscmp-jdbc.xml du serveur d’application, ensuite installer le pilote du serveur de
base de donnée et enfin déployer notre composant
a.5.1) CONFIGURATION DES FICHIERS DU SERVEUR JBOSS
• LA SOURCE DE DONNEES : %JBOSS_HOME%\server\default\deploy\mysql-
ds.xml
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 24
Gestion du budget familial, liste de marché en fonction des recettes 2008
Les informations à entrer dans ce fichier sont :
- Le nom JNDI, idem que celui de la source de données dans le descripteur de
déploiement
- L’url de connexion à la base de données
- Le nom d’utilisateur et le mot de passe de la base de données
• LE CONTENEUR : %JBOSS_HOME%\server\default\conf\standardjboss-
cmp.xml
Nous configurons le conteneur, car la persistance est gérée par ce dernier (CMP)
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 25
Gestion du budget familial, liste de marché en fonction des recettes 2008
Il suffit de renseigner les deux lignes ci-dessus : le nom de la source de données et la base de
données à mapper.
• LE PILOTE DE LA BASE DE DONNEES : mysql-connector-java-5.0.7-bin
Ce fichier est à introduire dans le répertoire %JBOSS_HOME%\server\default\lib
a.5.2) DEPLOIEMENT DE L’EJB : BudFamJPA.jar
Il suffit de copier cette archive dans le répertoire %JBOSS_HOME%\server\default\deploy de
jboss. Eclipse le fait à notre place en faisant un click droit sur l’instance du serveur utilisé et
en choisissant Add and Remove Project
a.6) TEST SUR L’EJB
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 26
Gestion du budget familial, liste de marché en fonction des recettes 2008
L’EJB doit être testé après son déploiement avant de se lancer dans la création d’un
client. Il s’agit ici de tester chacune des fonctions implantées afin de nous assurer qu’elles
répondent non seulement aux besoins exprimés, mais aussi qu’elles ne présentent pas de bug.
Pour ce, nous avons crées un client qui fonctionne en ligne de commande :
UserDAOTestBean. Grâce à ce dernier, nous avons corrigé, amélioré et mis en place les
fonctions de l’application.
Cependant afin d’utiliser l’EJB avec un client, il faut:
- Créer un contexte de persistance avec le conteneur : c’est la méthode
getInitialContext() qui est propre à chaque serveur d’application ; chez jboss sa
définition est la suivante :
- Connecter le conteneur aux beans
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 27
Gestion du budget familial, liste de marché en fonction des recettes 2008
- Utiliser les méthodes en passant par les DAO ; l’ajout d’un aliment se fera de la
manière suivante : daoAliment.addAliment(alim) ;
Les tests étant validés nous pouvons passer à la création du client
b) CREATION DU CLIENT POUR L’EJB : PAGES JSP
Les JSP, ou Java Server Pages, ont pour but de simplifier la création et la gestion des
pages web dynamiques. Ils permettent un mélange du code HTML et du code Java dans le
même document. Le code Java est entouré de balises spéciales afin que le conteneur de JSP
puisse les utiliser.
Cependant il existe un cadre pour le développement graphique des JSP ; il s’agit de
JSF, Java Server Faces. JSF nécessite la présence des fichiers suivants pour être utilisé sous
avec le serveur jboss: jstl.jar, jsf-impl.jar, jsf-api.jar, jboss-faces.jar.
Par la suite, il faut crée une dépendance entre les pages JSP (BudFamJSF) et le bean
(BudFamJPA). La figure suivante nous le montre
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 28
Gestion du budget familial, liste de marché en fonction des recettes 2008
A cette date, toutes les interfaces n’ont pas encore étés crées, seul deux interfaces sont
disponibles. Il s’agit de l’ajout d’un nouvel aliment et de la liste des aliments d’un utilisateur.
Interface d’enregistrement d’un aliment
Interface de présentation de la liste des aliments
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 29
Gestion du budget familial, liste de marché en fonction des recettes 2008
c) CREATION DE L’APPLICATION ENTREPRISE
Le rôle de l’application entreprise est de réunir l’EJB (BudFamJPA) et le client
(Application web, BudFamJSF) dans le même package : BudFamEAR. L’architecture de
notre projet est donc la suivante :
5. MISE EN SERVICE
Mettre en service l’application consiste à déployer le fichier BudFamEAR.ear issu du
projet BudFamEAR dans notre serveur d’application et de préciser l’url avec laquelle les
utilisateurs pourront accéder à l’application. Le déploiement ici se fait de la même manière
que celui de l’EJB ; pour l’instant, l’url est :
http://localhost:8080/BudFamJSF/faces/AccueilBudgetFamilial.jsp
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 30
Gestion du budget familial, liste de marché en fonction des recettes 2008
6. APPLICATIONS ET TECHNOLOGIES UTILISEES
Cette section présente l’ensemble des application et standards qui nous ont servis tout
au long du projet.
APPLICATION/STANDARDFONCTION/ROLE REFERENCEJBoss AS Serveur d’application, http://www.jboss.org/download.jspEclipse Europa (Eclipse 3.3) IDE http://www.eclipse.orgZMWS 1.2.7 (Zazou Mini
Web Server)
Pack d’auto
installation contenant
MySQL,
PhpMyAdmin, et
Apache
http://www.zmws.org
MySQL 5.0.51a-community
(via ZMWS), avec InnoDB
pour moteur de stockage
Serveur de base de
données
Dia 0.95 Dessin de diagrammes
et structure
http://www.gnome.org/projects/dia/
Paint Dessin Microsoft windowsOpéra 9.26 Navigateur web www.opera.com SciTE Editeur de texte http://www.scintilla.org JPA : Java Persistence API Standard pour la
persistance des objets
java
http://jcp.org/en/jsr/detail?id=220
EJB3 : Enterprise Java Bean 3 Composant métier J EE 5DAO : Data Access Object Patron de conception
pour la persistance des
données
http://deptinfo.unice.fr/
DVO : Data Value Object Etat d’un objet ; assure
le transport sur le
réseau des objets non
sérialisable
Cedric W. Jonhson,
Foxit Reader Lecture de fichiers pdf http://www.foxitsoftware.comJSF: Java Server Faces Cadre pour la création
des interfaces
graphique des pages
JSP
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 31
Gestion du budget familial, liste de marché en fonction des recettes 2008
JSP : Java Server Pages Créer des pages web
dynamiques
Penser en Java, Bruce Eckel
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 32
Gestion du budget familial, liste de marché en fonction des recettes 2008
CONCLUSION
En bref, la gestion du budget familial proprement dite à été effectuée à travers les
différentes fonctions ; la grosse difficulté a été l’application du standard J2EE à notre logiciel.
C’est un standard assez complexe mais, dès que mis en place, il facilite au maximum la
maintenance et l’évolution de l’application. Pour cette évolution, notre perspective est de
développer des web services qui sont des composants inter langage. Le tableau suivant
présente l’évaluation des objectifs en fin de projet.
PRIORITE OBJECTIFDEBUT DU PROJET FIN DU PROGET
1 Maîtrise pratique du standard J2EE Réalisé à 98% 2 Fournir une application pour les utilisateurs Réalisé à 64%
((ejb+client1+client2)/3)Création du cœur de l’application :
composant EJB
Réalisé à 87%
Création d’un client pour l’EJB (en ligne de
commande, pour les tests : client1)
Réalisé à 100%
Création d’un client pour l’EJB (Interface
graphique : client2)
Réalisé à 5%
- Objectif général Réalisé à 81%
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 33
Gestion du budget familial, liste de marché en fonction des recettes 2008
BIBLIOGRAPHIE ET URLOGRAPHIE
• Penser en java, Bruce Eckel
• Hibernate, http://www.hibernate.org/hib_docs/entitymanager/reference/en/html/
• Eclipse, Campus Press, ISBN: 2-7440-2119-1
• JBOSS, http://www.jboss.org
• The server side http://www.theserverside.com
• MySQL tutorial, Sams Publishing, ISBN: 0-672-32584-5
• JBoss: A Developer's Notebook, O’Reilly ISBN: 0-596-10007-8
• Eclipse, http://www.eclipse.org
___________________________________________________________________________KOLLE KOUO MOUDIKI Jean Hervé 34