Vous êtes sur la page 1sur 34

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 FAMILIAL


LISTE 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’application


2 Conception du modèle de données
3 Mise en place de l’architecture logicielle
4 Installation des serveurs : serveur de base de données et
serveur d’application
5 Développement des composants métiers (EJB)
6 Déploiement et test
7 Début de création des interfaces client
8 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) / PERMET LE POUR PLUS


PAYANT(P) DEVELOPPEMENT D’INFORMATIONS
AVEC J2EE
Microsoft P NON http://www.microsoft.com
Visual Studio
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

JBuilder
NetBeans (Sun) G OUI http://www.sun.com/forte ou
http://www.netbeans.org
Sun One (Sun) P OUI http://www.sun.com
Oracle P OUI http://www.oracle.com
JDevelopper
Bea Weblogic P OUI http://www.bea.com
WorkShop
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 OFFRE CONTENEU POUR PLUS D’INFORMATIONS
D’APPLICATION COMMERCI R WEB
ALE(C) / (CW) / EJB
___________________________________________________________________________
KOLLE KOUO MOUDIKI Jean Hervé 11
Gestion du budget familial, liste de marché en fonction des recettes 2008

OPEN- (CE)
SOURCE(O)
Sybase EAServer C - http://www.sybase.com/products/easerv
er
BEA Weblogic AS C CE+CW http://www.bea.com haut de gamme
IBM Websphere C CE+CW N° 1
Sun Java System C CE+CW http://www.sun.com
AS
Borland Enterprise C CE+CW -
Server
Oracle9i AS C CE+CW http://www.oracle.com
Macromedia 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.jsp
ObjectWeb JOnAS O CW+CE N°2, intégré à plusieurs distributions
Linux Entreprise.
http://www.objectweb.org
Apache Geronimo O CE+CW http://www.apache.org
openEjb 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.
ATTRIBUTS
long idalerte Clé primaire, identifiant de l’alerte
String annee Année
String mois Mois
Double mtdefini Montant défini pour la catégorie
Double ecart Ecart constaté
String libcat Libellé de la catégorie
Utilisateur iduser Utilisateur concerné par l’alerte
METHODES
void addAlerte(Alerte alerte) Ajoute une alerte
Alerte findAlerteById(long id) Retrouver une alerte à partir de son id
Collection<Alerte> Récupérer toutes les alertes d’un utilisateur
getAllAlerteOfUser(long iduser)
Collection<Alerte> Récupérer pour un mois donné, les alertes
getAlerteOfUserByMois(long iduser,
d'un utilisateur
String annee, String mois)
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

ATTRIBUTS
long idbudget Clé primaire, identifiant du budget mensuel
Double solde Solde
String mois Mois
String annee Année
Double mtalloue Montant alloué
Utilisateur iduser Utilisateur concerné
METHODES
String Définir le budget mensuel
addBudgetMensuel(Budgetmensuel
budMens)
String delBudgetMensuel(long id) Supprimer le bugdet mensuel d'un utilisateur
String Modifier le budge mensuel d'un utilisateur
updBudgetMensuel(Budgetmensuel budM)
Budgetmensuel Récupérer le budget mensuel à partir de son
findBudgetmensuelById(long id)
id
Collection<Budgetmensuel> Récupérer la liste contenant tous les budgets
getAllBudgetOfUser(long iduser)
définis par un utilisateur
Collection<Budgetmensuel> Récupérer la liste contenant les budgets
getBudgetOfUserByAnnee(long iduser,
définis par unutilisateur au cours d'une année
String annee)
Collection<Budgetmensuel> Récupérer la liste contenant les budgets
getBudgetOfUserByMois(long iduser,
définis par unutilisateur au cours du mois
String annee, String mois)
d'une année

• Comporecette : Composer une recette de cuisine


ATTRIBUTS
ComporecettePK pk Clé primaire concaténée, identifiant de la
composition d’une recette : classe construite
à part
Double pu Prix unitaire de l’aliment au marché
Double qte Quantité de l’aliment dans la recette
Recette idrecette Recette entrant dans la composition
Aliment idaliment Aliment entrant dans la recette
METHODES
String Ajouter un aliment dans une recette
addAlimentToRecette(Comporecette cp)
void delAlimentToRecette(long Supprimer un aliment dans une recette
idAliment, long idRecette)
void Modifier les attributs (pu, qté) d'un aliment
updAlimentToRecette(Comporecette cp)
dans la composition d'une recette
Collection<Recette> Lister les recettes qui contiennent cet aliment
getRecetteWhereThisAlimentIs(Aliment
aliment)

___________________________________________________________________________
KOLLE KOUO MOUDIKI Jean Hervé 17
Gestion du budget familial, liste de marché en fonction des recettes 2008

Comporecette Récupérer une ligne de la table comporecette


findComporecetteByPK(ComporecettePK
à partir de son pk
pk)

Les attributs de la classe ComporecettePK sont les suivants :


long idrecette2 Identifiant de la recette
long idaliment2 Identifiant de l’aliment

• Recette : Recette de cuisine


ATTRIBUTS
long idrecette Clé primaire, identifiant de la recette
String descrct Description de la recette
String nomrecette Nom de la recette
Utilisateur iduser Utilisateur concerné par la recette
METHODES
String addRecette(Recette recette) Ajouter une recette
void delRecette(long id) Supprimer une recette
String updRecette(Recette recette) Modifier une recette
Recette findRecetteById(long id) Récupérer une recette à partir de son id
Collection<Recette> Récupérer les recettes définies par un
getAllRecetteOfUser(long iduser)
utilisateur
Collection<Aliment> Récupérer les aliments qui composent une
getAlimentOfThisRecette(Recette
recette
recette)

• Aliment : Aliment pour les recettes de cuisine


ATTRIBUTS
long idaliment Clé primaire, identifiant de l’aliment
String nomaliment Nom de l’aliment
String unite Unité de commercialisation
long iduser Identifiant de l’utilisateur qui a enregistré
l’aliment
METHODES
void addAliment(Aliment aliment) Ajouter un aliment
String delAliment(long id) Supprimer un aliment
Aliment findAlimentById(long id) Retrouver un aliment à partir de son ID
Aliment updAliment(Aliment aliment) Modifier un aliment
Collection <Aliment> Renvoyer tous les aliments d'un untilisateur
getAllAlimentOfUser(long iduser)
Collection <Aliment> Renvoyer tous les aliments de la base de
getAllAlimentBD()
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

ATTRIBUTS
long iduser Clé primaire, identifiant de l’utilisateur
String nomfamille Nom de famille
String nonutil Nom utilisateur pour la connexion à
l’application
String mot2pass Mot de passe
String repsec Réponse secrète pour la récupération du
mot de passe en cas de perte
String quesec Question secrète pour la récupération du
mot de passe en cas de perte
String grp Groupe d’appartenance de l’utilisateur :
user, admin , passif
String tel1 Téléphone1
String tel2 Téléphone2
String email E-mail
METHODES
String addUtilisateur(Utilisateur Créer un utilisateur
utilisateur)
String updUtilisateur(Utilisateur Modifier un utilisateur
utilisateur)
Utilisateur findUtilisateurById(long Récupérer un utilisateur à partir de son id
id)
Utilisateur connexionUtilisateur(String Connexion à l’application
nomUtil, String mot2pass)
Collection<Aliment> Renvoyer la liste de marché en fonction
ListeDeMarche(Collection<Recette>
des recettes choisies
mesRe7)
Collection<Recette> Proposer une/des recettes en fonction des
proposerRe7(Collection<Aliment>
aliments choisi
mesAliments)
Utilisateur recupPwd(String nomUtil, Récupérer le mot de passe en cas de perte
String quest, String rep)

• Logconnexion : Journal de connexion des utilisateurs


ATTRIBUTS
long idlog Clé primaire, identifiant du log de connexion
Timestamp datehcnx Date et heure du jour
Utilisateur userlogin Utilisateur conncerné
METHODES
void addLogConnexion(Logconnexion Enregistrer une connexion dans le journal
logcnx)
Logconnexion Récupérer un log de connexion à partir de
findLogconnexionById(long id)
son id
Collection<Logconnexion> Récupérer tous les logs de connexion d'un
getAllLogConnexionOfUser(long

___________________________________________________________________________
KOLLE KOUO MOUDIKI Jean Hervé 19
Gestion du budget familial, liste de marché en fonction des recettes 2008

iduser) utilisateur
void delLogConnexion(long iduser) Supprimer tous les log d'un utilisateur

• Catdepense : Catégorie de dépense


ATTRIBUTS
int idcat Clé primaire, identifiant de la catégorie
String libcat Libellé de la catégorie
String descat Description de la catégorie
METHODES
String addCatDepense(Catdepense Enregistrer une catégorie de dépense
catdepense)
String delCatDepense(int id) Supprimer une catégorie de dépense
String updCatDepense(Catdepense Modifier une catégorie de dépense
catdepense)
Catdepense findCatdepenseById(int Récupérer une catégorie de dépense à partir
id)
de son id
Collection<Catdepense> Récupérer toutes les catégories de dépense
getAllCatDepense()

• Depense : Dépenses quotidiennes des utilisateurs


ATTRIBUTS
long iddepense Clé primaire, identifiant de la dépense
Date lejour Jour de la dépense
String moisdep Mois
Double mtdep Montant
String motifdep Justificatifs de la dépense
String anneedep Année
Catdepense idcat Catégorie relative à la dépense
Utilisateur iduser Utilisateur concerné par la dépense
METHODES
String addDepense(Depense depense) Enregistrer une dépense
void delDepense(long id) Supprimer la dépense d’un utilisateur
Depense findDepenseById(long id) Retrouver une dépense à partir de son id
void updDepense(Depense depense) Modifier une dépense
Collection<Depense> Récupérer toutes les dépenses d'un utilisateur
getAllDepenseOfUser(long iduser)
Collection<Depense> Récupérer les dépenses annuelles d'un
getAllDepenseOfUserByAnnee(long
utilisateur
iduser, String annee)
Collection<Depense> Récupérer les dépenses mensuelles d'un
getAllDepenseOfUserByMois(long
utilisateur
iduser, String annee, String mois)

• 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

ATTRIBUTS
DistbudgetPK 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ée
Catdepense idcat Catégorie pour laquelle le budget est alloué
Utilisateur iduser Utilisateur responsable de l’allocation
METHODES
Distbudget Récupérer le budget alloué à une catégorie à
findDistbudgetByPK(DistbudgetPK pk)
partir de sa clé primaire
String Allouer le budget à une catégorie
addBudgetToThisCategorie(Distbudget
db)
String Supprimer le budget alloué à une catégorie
delBudgetOfThisCategorie(Distbudget
db)
String Modifier le budget alloué a une catégorie
updBudgetOfThisCategorie(Distbudget
db)
Collection<Distbudget> Récupérer pour un utilisateur tous les budgets
getBudgetOfThisCategorie(long
définis dans une catégorie
iduser, int idCategorie)
Collection<Distbudget> Récupérer le budget par année pour toutes les
getBudgetByCategorieByAnnee(long
catégories
iduser, String annee)
Collection<Distbudget> Récupérer le budget du mois pour toutes les
getBudgetByCategorieOfThisMois(long
catégories
iduser, String annee, String mois)

Les attributs de la classe DistbudgetPK sont les suivants :


int idcat2 Identifiant de la catégorie
long iduser2 Identifiant de l’utilisateur
String annee Année
String 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 REFERENCE
JBoss AS Serveur d’application, http://www.jboss.org/download.jsp
Eclipse Europa (Eclipse 3.3) IDE http://www.eclipse.org
ZMWS 1.2.7 (Zazou Mini Pack d’auto http://www.zmws.org
Web Server) installation contenant
MySQL,
PhpMyAdmin, et
Apache
MySQL 5.0.51a-community Serveur de base de
(via ZMWS), avec InnoDB données
pour moteur de stockage
Dia 0.95 Dessin de diagrammes http://www.gnome.org/projects/dia/
et structure
Paint Dessin Microsoft windows
Opéra 9.26 Navigateur web www.opera.com
SciTE Editeur de texte http://www.scintilla.org
JPA : Java Persistence API Standard pour la http://jcp.org/en/jsr/detail?id=220
persistance des objets
java
EJB3 : Enterprise Java Bean 3 Composant métier J EE 5
DAO : Data Access Object Patron de conception http://deptinfo.unice.fr/
pour la persistance des
données
DVO : Data Value Object Etat d’un objet ; assure Cedric W. Jonhson,
le transport sur le javadude@ix.netcom.com
réseau des objets non
sérialisable
Foxit Reader Lecture de fichiers pdf http://www.foxitsoftware.com
JSF: 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 Penser en Java, Bruce Eckel
dynamiques

___________________________________________________________________________
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 OBJECTIF
DEBUT 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 : Réalisé à 87%
composant EJB
Création d’un client pour l’EJB (en ligne de Réalisé à 100%
commande, pour les tests : client1)
Création d’un client pour l’EJB (Interface Réalisé à 5%
graphique : client2)
- 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

Vous aimerez peut-être aussi