Projet fin de spécialité composants logiciels - e

publicité
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
Téléchargement