TRAORE Chiekhou BTS SIO SLAM FICHE DES PPE CONTEXTE E4 PPE Authentification : L'accès à l'application est soumise à authentification. Celle-ci est implémentée par un composant distribué de type EJB Session Stateless et par un composant persistant de type EJB Entity. Ils ont pour nom respectif : AuthentificateurEJB et Utilisateur. Le composant distribué AuthentificateurEJB implémente la méthode authentifier() qui contrôle le login et le password saisis dans l'interface Homme-machine. Chaque utilisateur correspond à un nuplet dans la table UTILSATEUR de la base de données. Un objet de type Data Transfer Object (DTO) permet de communiquer la réussite ou l'échec de l'authentification à l'application WEB. L'objet UtilisateurDTO est transmis via le protocole JAVA RMI à l'application WEB à l'issue du processus d'authentification. Si l'authentification a réussi alors l'objet DTO contient le nom, le prénom de l'utilisateur et le message a pour contenu « Bienvenue ». En cas d'échec seul le message est renseigné avec le contenu « Echec ». Modèle métier: il n'est composé que du composant EJB Entity auto-persistant dans la base de données relationnelle à laquelle le serveur WILDFLY est connectée. Modèle technique : il repose sur un composant distribué de type EJB Session Stateless et sur une classe qui sert d'objet de transfert (DTO : Data Transfer Object). Cet objet doit implémenter l'interface Fiche PPE du Contexte E4 Lycée Paul Lapie 1 java.io.Serializable afin de pouvoir être encodé (Marshalling) et décodé (UnMarshalling) dans un format lui permettant d'être acheminé par le réseau du serveur WILDFLY au serveur TOMCAT. PPE Caisse Enregistreuse : Elle est développée grâce aux cadriciels JAVA EE JSF (Java Server Faces) et JPA (Java Persistence API). Fiche PPE du Contexte E4 Lycée Paul Lapie 2 La page d'accueil de l'application (login.xhtml) est celle qui permet à l'utilisateur de s'authentifier. Si l'authentification réussit, la navigation propose le menu général (menu.xhtml). Selon le choix de l'utilisateur (employé ou gérant) la navigation propose la page d'enregistrement d'une vente (vente.xhtml) ou celle qui permet de consulter le journal comptable des ventes (journal.xhtml). C'est le composant JAVA JSF ComposantAuthentificateur qui interagit avec la page login.xhtml. Il délègue au service distant implémenté par un composant EJB, l'authentification de l'utilisateur. Le composant JAVA JSF ComposantVente, quant à lui interagit avec la page vente.xhtml. Il a la responsabilité d'enregistrer la vente. Le composant JAVA JSF ComposantJournal interagit avec la page journal.xhtml. Il a la responsabilité de créer un objet valeur (ValueObject) contenant la liste des ventes utilisée par la page journal.xhtml. Modèle métier : l'originalité de l'application est qu'elle repose sur un modèle métier persistant structuré grâce aux patrons de conception (Design Pattern) Décorateur et Monteur (Builder). Le patron de conception Décorateur s'adapte bien aux modèles contenant des objets qui représentent un système d'information de base, ici les coupes de cheveux pour femme, pour enfant et pour homme, et d'autres objets qui représentent un système d'information optionnel ou complémentaire, ici les services supplémentaires (couleur, brushing, soins, etc). Le patron de conception Monteur permet de lui déléguer la responsabilité d'ordonnancer les tâches à réaliser afin de construire un graphe d'objets représentant une décoration (graphe complexe). Le modèle métier a vocation à être persistant. La technologie employée à cette fin est la couche de persistance standard du langage JAVA : JPA (JAVA PERSISTENCE API). Le produit logiciel libre utilisé pour implémenter cette couche est HIBERNATE. Fiche PPE du Contexte E4 Lycée Paul Lapie 3 La solution de persistance du modèle décorateur et donc sa correspondance (mapping) au niveau de la base de données relationnelle est implémentée par une seule table (solution union). Donc une seule table pour toute la dérivation comprenant les classes Service, Coupe, Supplément, CoupeHomme, CoupeFemme, CoupeEnfant, Brushing, Couleur, Shampoing et Soin. Il est possible qu'une cliente ou qu'un client ne désire pas de coupe mais ne veuille qu'un ou plusieurs services de type supplément. Par exemple un simple brushing. C'est ce qui explique la présence de la classe PasDeCoupe. Le patron de conception Monteur permet de concevoir un ensemble de classes responsables de la construction d'une structure d'objets représentant un graphe de type décoration, c'est à dire une liste chaînée. Le Monteur ou Builder est d'ailleurs conçu pour faciliter la création de graphes d'objets complexes. Dans le cas d'une vente d'un service de coiffure, la construction doit absolument commencer par la création d'un objet concret de type CoupeFemme, CoupeEnfant, CoupeHomme ou PasDeCoupe et être « décoré » par zéro ou plusieurs suppléments. La classe DirecteurDuMontage représente l'interface du patron de conception. C'est à elle que s'adresse les objets consommateurs du montage. La classe MonteurDeServiceImpl implémente l'interface MonteurDeService. C'est elle qui a la responsabilité de concrètement construire la structure d'objet représentant la Décoration. Fiche PPE du Contexte E4 Lycée Paul Lapie 4 PPE Création Utilisateurs : L'application consiste à analyser (parser) le fichier XML qui contient la liste des nouveaux comptes utilisateur à créer. Le parsing est de type SAX, c'est à dire qu'il répond à un comportement de type événementiel. L'application doit extraire du fichier utilisateurs.xml les informations qui caractérisent les comptes à créer, puis instancier des objets persistants JPA de la classe Utilisateur pour enfin les stocker dans la base de données authentificationDB grâce à l'API JPA (Java Persistence API). Pour aider l'administrateur à choisir le fichier XML à traiter une interface graphqiue est à envisager. Celle-ci peu-être implémentée à l'aide de l'API SWING du langage JAVA. Ou bien à l'aide d'une nouvelle application WEB et à un composant graphique (UI Component) JSF (Java Server Faces). La distribution Open Source PrimeFaces propose ce type de composant. Le parsing SAX repose sur l'implémentation de l'interface ContentHandler ou sur la spécialisation de la classe DefaultHandler. C'est cette dernière solution qui est retenue ici. Le parsing doit être validant, c'est à dire que le parseur doit vérifier la concordance du fichier utilisateurs.xml avec sa DTD (utilisateurs.dtd). Fiche PPE du Contexte E4 Lycée Paul Lapie 5 DIAGRAMME DE CLASSE DE L'APPLICATION CI-DESSUS: Fiche PPE du Contexte E4 Lycée Paul Lapie 6