Licence MISIGD promotion 2016 Projet fin de spécialité composants logiciels IUT Vélizy JJLC Sujet Il s'agit de réaliser une application d'inscription à une newsletter. L'application est une application avec interface Homme-Machine de type WEB. Elle repose sur une architecture de type MVC distribuée. Quatre entités virtuelles la composent. La première est la couche de stockage qui est implémentée dans une base de données relationnelle. La seconde est la couche métier réalisée grâce à des composants distribués et persistants. La troisième est la couche de service et d'adaptation composée de composants capables de répondre à des requêtes de type HTTP provenant de la quatrième couche qui est celle de présentation. L'application est divisée en deux parties, une partie front-end pour les que les internautes puissent s'inscrire à la newsletter et une partie back-end afin que les administrateurs puissent consulter la liste des inscrits. La partie front-end. Outre les fonctionnalités WEB (deuxième partie du projet à développer plus tard), la partie distribuée de l'application est structurée par un composant persistant qui représente chaque inscrit à la newsletter. Et par un composant distribué dont le savoir faire peut être invoqué de façon distante (remote) par tout type de client RMI. Un inscrit est représenté par un identifiant, un nom, un prénom, un adresse de courrier électronique et une date d'inscription. <<ejb entity>> + Inscrit <<@Id>> -idinscrit : int -nom : String -prenom : String -courriel : String -dateInscription : Date Le composant distribué a la responsabilité de créer un inscrit et de le rendre persistant dans la base de données à partir des données fournies par la partie WEB de l'application. La communication entre ces deux parties de l'application se fait grâce à des objets de type DTO (Data Transfer Object). Pour la mise au point de cette partie il faut créer une application cliente standalone dans un environnement de développement de type IDE (Eclipse). 1/5 Licence MISIGD IUT Vélizy Contraintes non-fonctionnelles. Les composants de cette partie de l'application sont implémentés avec la solution EJB (Entity et Session Stateless). Ils sont déployés dans un conteneur Docker hébergeant une instance du serveur d'application JAVA EE (distribution WILDFLY de la société REDHAT). La couche de stockage est représentée par un conteneur Docker qui héberge le système de gestion de bases de données relationnelles APACHE DERBY. La tables des inscrits à la newsletter doit avoir pour nom TABINSCRITS. <<table>> TABINSCRITS <<PK>> IDINSCRIT : INTEGER NOM : VARCHAR(64) PRENOM : VARCHAR(64) COURRIEL : VARCHAR(64) DATEINSCRIPTION : DATE contrainteUNICITE(COURRIEL) Le composant persistant qui mappe vers la table doit avoir pour nom Inscrit. Le composant distribué qui a la responsabilité de l'inscription doit avoir pour noms Inscription et InscriptionEJB. Le composant InscriptionEJB doit respecter le contrat de l'interface Inscription. Ce contrat repose sur la méthode inscrire qui prend en paramètre un objet DTO qui a pour type InscritDTO. Un objet de ce type contient les données nom, prénom et adresse de courriel. Cet objet est transmis de façon distante par les « clients ». Il doit implémenter l'interface java.util.Serializable. <<interface>> + java.io.Serializable <<realize>> + InscritDTO -nom : String -prenom : String -courriel : String Mise au point de la partie composants EJB. Afin de tester le comportement de l'application au sein du serveur WILDFLY, il est possible grâce à la fonction exec de Docker de lister le contenu du fichier de journalisation du serveur (server.log). 2/5 Licence MISIGD IUT Vélizy Ainsi il est possible d'implémenter des sorties standard (System.out.println()) dans les composants EJB et de vérifier par la même les informations « affichées ». Car la sortie standard est représentée par le fichier : /wildfly-8.1.0.Final/standalone/log/server.log. Commandes à réaliser : 1. docker exec -it wildfly /bin/bash 2. vi wildfly-8.1.0.Final/standalone/log/server.log La première commande permet de se placer dans un terminal au sein du conteneur Docker. La seconde commande permet d'éditer le contenu du fichier server.log. La fonctionnalité WEB est assurée par une application JAVA EE. Ses composants sont de type page et de type classe. La page permet à l'internaute de saisir les informations qui vont le caractériser comme inscrit. La classe représente le contrôleur de la saisie. La classe contrôleur recueille les données saisies (toutes sont obligatoires) par l'internaute car elle mappe vers la page WEB de saisie. Elle a pour responsabilité d'invoquer la méthode inscrire du composant distant décrit plus haut (InscriptionEJB) en lui passant comme argument un objet InscritDTO contenant les données nécessaires (nom, prenom, courriel). Mise au point de la partie composants WEB. Afin de tester le comportement de l'application au sein du serveur TOMCAT, il est possible grâce à la fonction exec de Docker de lister le contenu du fichier de journalisation du serveur (catalina.out). Ainsi il est possible d'implémenter des sorties standard (System.out.println()) dans les composants JSF et de vérifier par la même les informations « affichées ». Car la sortie standard est représentée par le fichier : /apache-tomcat-8.0.20/logs/catalina.out. Commandes à réaliser : 1. docker exec -it tomcat /bin/bash 2. vi apache-tomcat-8.0.20/logs/catalina.out La première commande permet de se placer dans un terminal au sein du conteneur Docker. La seconde commande permet d'éditer le contenu du fichier catalina.out. La fonctionnalité WEB est assurée par une application JAVA EE. Ses composants sont de type page et de type classe. La page permet à l'internaute de saisir les informations qui vont le caractériser comme inscrit. La classe représente le contrôleur de la saisie. La classe contrôleur recueille les données saisies (toutes sont obligatoires) par l'internaute car elle mappe vers la page WEB de saisie. Elle a pour responsabilité d'invoquer la méthode inscrire du composant distant décrit plus haut (InscriptionEJB) en lui passant comme argument un objet InscritDTO contenant les données nécessaires (nom, prenom, courriel). Contraintes non-fonctionnelles. La page WEB doit avoir pour nom inscription.xhtml. Le contrôleur qui est une classe JAVA dont le cycle de vie est pris en charge par le framework JSF (Java Server Faces) doit avoir pour nom InscriptionJSF. 3/5 Licence MISIGD IUT Vélizy Ces composants sont déployés dans une instance du serveur d'application TOMCAT hébergé dans un conteneur Docker. Architecture générale. TCP/IP PC <<conteneur docker>> TCP/IP <<conteneur docker>> TOMCAT wildfly navigateur HTML HTTP application WEB JAVA RMI application EJB JDBC TCP/IP journaux consultables via docker exec ... <<conteneur docker>> DERBY base de données consultable via SQUIRREL La partie back-end. Cette partie de l'application permet aux administrateurs de lister l'ensemble des inscrits à la newsletter. Cela nécessite côté application distribuée EJB un nouveau composant (Session Stateless) et côté application WEB une nouvelle page WEB qui présente la liste des inscrits sous la forme d'un tableau associée à un composant JSF. Côté application distribuée EJB, le composant GerantInscritsEJB qui implémente l'interface JAVA GerantInscrits a pour rôle de restaurer l'ensemble des objets persistants de type Inscrit à partir de la base de données (requête native JPA SQL). Puis de construire un objet DTO qui contient la liste de inscrits. Et enfin de retourner cet objet au client distant. L'objet DTO est de type InscritsDTO (avec un « s ») à ne pas confondre avec le DTO de la partie front-end. La classe InscritsDTO est structurée par une liste de chaînes de caractères dont chacune des occurences concatène les données d'un inscrit (nom, prénom, courriel, date inscription). Exemple : private List<String> inscrits = new ArrayList<>() ; Ainsi la datatable JSF qui présente les informations est simplifiée, elle ne contient qu'une seule colonne. 4/5 Licence MISIGD IUT Vélizy <<interface>> + GerantInscrits <<interface>> + java.io.Serializable +getAll() : InscritsDTO <<realize>> <<realize>> <<dto>> + InscritsDTO <<ejb stateless>> <<remote>> + GerantInscritsEJB +inscrits : List<String> +getAll() : InscritsDTO Côté application WEB, un composant JAVA dont le cycle de vie est pris en charge par JSF récupère l'objet InscritsDTO et stocke la liste d'inscrits afin que la page WEB puisse facilement lister les données. Contraintes non-fonctionnelles. La page WEB doit avoir pour nom listeinscrits.xhtml. Le contrôleur qui est une classe JAVA dont le cycle de vie est pris en charge par le framework JSF (Java Server Faces) doit avoir pour nom GerantInscritsJSF. Ces composants sont déployés dans une instance du serveur d'application TOMCAT hébergé dans un conteneur Docker. La page implémente un composant (UIComponent JSF) de type datatable avec une seule colonne comme vu plus haut. 5/5 Licence MISIGD IUT Vélizy