Page 1

CORRIGE On désire mettre en place une application de type réseau social sous forme d’un site internet, ce qui implique en un premier temps, la création d’une base de données relationnelle, la définition des différents acteurs, leurs cas d’utilisation associés, et quelques diagrammes d’activités demandés ci-après. L’application permet à une personne anonyme de venir en un premier temps visiter le site afin de s’informer sur son activité et l’intérêt de s’y inscrire. Le site est de deux parties distinctes publiques :  Une partie anonyme permettant à un internaute de visiter celui-ci  Une partie semi privée, permettant à un internaute inscrit de gérer ses différentes informations Et d’une partie privée permettant la gestion du site :  Par les administrateurs pour des opérations d’administrations, de sauvegarde et de maintenance  Par les modérateurs, pour des opérations de surveillance d’éventuels échanges douteux en regard de la loi Lorsqu’un internaute s’inscrit, ce dernier fourni les informations générales suivantes :  Son nom, Son prénom, Sa date de naissance, Une photo (éventuellement), Son adresse mail  Des informations complémentaires concernant ses formations, ses emplois (ces informations étant catégorisées par type d’information, on y trouvera la date de l’information, son ordre d’apparition, son libellé et un texte descriptif) Il peut alors avoir accès à la partie semi privée, lui permettant les activités suivantes :  Inviter une autre personne à être son ami :  Accédant aux informations générales des autres personnes, il peut proposer à ces dernières de devenir leur ami sur le réseau, lorsque la demande est effectuée, on note la date à laquelle cette action a été faite.  Le système envoi dans ce cas un mail permettant d’informer de cette information : à la personne demandeur et à la personne cible.  Accepter d’être l’ami d’une autre personne sur le réseau : A la suite d’une demande d’ami, la personne peut accepter ou refuser, si elle accepte, cette amitié sur le réseau est enregistrée, et la date de validation est enregistrée. Un mail est alors envoyé au demandeur pour information 

 

Déposer des messages public ou privé : Un message est constitué d’un libellé générique et d’un texte Un message privé n’est visible que par les amis du dépositaire Un message public s’adresse à la communauté globale du site Inviter des personnes à un évènement :  Lorsqu’un utilisateur de l’application veut inviter d’autres personnes à un évènement, ce dernier peut le créer, dans ce cas il enregistre les informations suivantes : o Le libellé de l’évènement o Sa description o Sa date et heure  Il peut ensuite inviter les différentes personnes de la communauté à participer à ce dernier  Lorsque les invitations ont été effectuées, des mails sont envoyés aux invités Participer à un évènement :  A la suite d’une invitation, une personne peut valider cette dernière, afin d’y participer, on mémorisera d’ailleurs les différentes participations aux évènements Créer des groupes d’amis  Afin de répartir ses différents amis par thèmatique (par exemple), chaque utilisateur peut créer des groupes, qui ne sont qu’à sa disposition seule, sachant qu’un ami donné peut appartenir à plusieurs groupes différents  On notera : 1. le nom du groupe, sa description 2. La date de création du groupe 3. La date de liaison des différents amis au groupe d’un utilisateur  Seul le propriétaire créateur du groupe pourra le modifier ou l’annuler


CORRIGE Modèle Conceptuel de données :


CORRIGE Modèle Physique de données :


CORRIGE 1. Créer un Service Web Java permettant de donner pour une personne :  Son nom  Son prénom  Sa date de naissance  Sa photo  Son adresse mail  Ses amis, pour chaque ami : o Son nom o Son prénom o Sa date de naissance o Son email o La date à laquelle il a demandé à être ami à la personne o La date à laquelle la personne l’a accepté comme ami  Ses messages, pour chaque message : o Le libellé du message o La date du message o Le texte du message 2. Créer ensuite une classe cliente permettant de récupérer les informations, de les afficher et d’enregistrer les images dans le répertoire c:\personnes     

On considère, pour éviter les structures trop contraignantes, que toutes les dates sont passées sous forme de chaines de caractères par le service Web La personne interrogée par le service l’est par son nom et prénom La chaine d’interrogation se fait sous la forme (par exemple) : http://localhost:8080/axis2/services/wsWebbook/getPersonne?nom=Fino&preno m=Jean-Marie Le nom des fichiers images récupérés est composé du nom_prenom.jpg, on considère que toutes les images sont de type jpg)

Les requêtes utiles :  Les informations de la personne : SELECT * FROM personne WHERE personne.NOM ='nom_de_la_personne' AND personne.PRENOM ='prenom_de_la_personne'; 

Les amis de la personne : SELECT * FROM ami, personne, demande_ami WHERE ami.PER_ID_PERSONNE = identifiant_de_la_personne AND ami.ID_PERSONNE=personne.ID_PERSONNE AND ami.ID_PERSONNE=demande_ami.ID_PERSONNE;

Les messages de la personne : SELECT * FROM message WHERE ID_PERSONNE = identifiant_de_la_personne;

Les images sont dans le répertoire personnes du répertoire webapps de tomcat On considère : Nom du service Web : Projet serveur :

wsWebbook wsWebbookServer


CORRIGE WSDL – graphique :

WSDL – source : <?xml version="1.0" encoding="UTF-8" standalone="no"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost/wsWebbook/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="wsWebbook" targetNamespace="http://localhost/wsWebbook/"> <wsdl:types> <xsd:schema targetNamespace="http://localhost/wsWebbook/"> <xsd:element name="getPersonne"> <xsd:complexType> <xsd:sequence> <xsd:element name="nom" type="xsd:string" /> <xsd:element name="prenom" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="getPersonneResponse">


CORRIGE <xsd:complexType> <xsd:sequence> <xsd:element name="laPersonne" type="tns:unePersonne"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="unePersonne"> <xsd:sequence> <xsd:element name="nom" type="xsd:string"></xsd:element> <xsd:element name="prenom" type="xsd:string"></xsd:element> <xsd:element name="dateNaissance" type="xsd:string"></xsd:element> <xsd:element name="photo" type="xsd:base64Binary"></xsd:element> <xsd:element name="email" type="xsd:string"></xsd:element> <xsd:element name="lesAmis" type="tns:unAmi" minOccurs="0" maxOccurs="unbounded"> </xsd:element> <xsd:element name="lesMessages" type="tns:unMessage" minOccurs="0" maxOccurs="unbounded"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="unMessage"> <xsd:sequence> <xsd:element name="libelle" type="xsd:string"></xsd:element> <xsd:element name="texte" type="xsd:string"></xsd:element> <xsd:element name="date" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="unAmi"> <xsd:sequence> <xsd:element name="nom" type="xsd:string"></xsd:element> <xsd:element name="prenom" type="xsd:string"></xsd:element> <xsd:element name="dateAmi" type="xsd:string"></xsd:element> <xsd:element name="dateDemande" type="xsd:string"> </xsd:element> <xsd:element name="email" type="xsd:string"></xsd:element> </xsd:sequence>


CORRIGE </xsd:complexType> </xsd:schema> </wsdl:types> <wsdl:message name="getPersonneRequest"> <wsdl:part element="tns:getPersonne" name="parameters"/> </wsdl:message> <wsdl:message name="getPersonneResponse"> <wsdl:part element="tns:getPersonneResponse" name="parameters"/> </wsdl:message> <wsdl:portType name="wsWebbook"> <wsdl:operation name="getPersonne"> <wsdl:input message="tns:getPersonneRequest"/> <wsdl:output message="tns:getPersonneResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="wsWebbookSOAP" type="tns:wsWebbook"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="getPersonne"> <soap:operation soapAction="http://localhost/wsWebbook/NewOperation" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="wsWebbook"> <wsdl:port binding="tns:wsWebbookSOAP" name="wsWebbookSOAP"> <soap:address location="http://localhost:8080/"/> </wsdl:port> </wsdl:service> </wsdl:definitions>


CORRIGE

Génération du serveur :

SERVEUR

"%AXIS2_HOME%\bin\wsdl2java" -d adb -uri wsWebbook\META-INF\wsWebbook.wsdl –p localhost.webbook.server -s -ss -sd -ssi -o wsWebbookServer Puis : "C:\Tomcat 6.0\apache-ant-1.8.1\bin\ant" jar.server Dans le nouveau répertoire crée

Classe WsWebbookSkeleton.java : package localhost.wswebbook; import import import import import import

java.io.File; java.sql.Connection; java.sql.DriverManager; java.sql.ResultSet; java.sql.Statement; java.util.*;

import javax.activation.DataHandler; import javax.activation.FileDataSource; public class WsWebbookSkeleton implements WsWebbookSkeletonInterface{ public localhost.wswebbook.GetPersonneResponse getPersonne(localhost.wswebbook.GetPersonne laPersonne) { GetPersonneResponse reponse = new GetPersonneResponse(); String repCourant = System.getProperty("user.dir"); String requete; int idPersonne=0; try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/srcbook","root",""); Statement stmt = conn.createStatement(); // Recuperation des infos de la personne


CORRIGE requete requete requete requete

= "SELECT * "; += "FROM personne "; += "WHERE personne.NOM ='"+laPersonne.getNom()+"'"; += "AND personne.PRENOM ='"+laPersonne.getPrenom()+"'";

UnePersonne cettePersonne = new UnePersonne(); ResultSet resultat = stmt.executeQuery(requete); while(resultat.next()) { cettePersonne.setNom(resultat.getString("NOM")); cettePersonne.setPrenom(resultat.getString("PRENOM")); cettePersonne.setDateNaissance(resultat.getString("DATE_NAISSANCE")); cettePersonne.setEmail(resultat.getString("EMAIL")); idPersonne = resultat.getInt("ID_PERSONNE"); FileDataSource imageDataSource; DataHandler imageDataHandler; String chemin = repCourant+File.separator+"webapps"+File.separator+"personnes"+File.separator+resultat.getString("PHOTO"); imageDataSource = new FileDataSource(chemin); imageDataHandler = new DataHandler(imageDataSource); cettePersonne.setPhoto(imageDataHandler); } // Recherche des amis requete = "SELECT * "; requete += "FROM ami, personne, demande_ami "; requete += "WHERE ami.PER_ID_PERSONNE ="+idPersonne+" "; requete += "AND ami.ID_PERSONNE=personne.ID_PERSONNE "; requete += "AND ami.ID_PERSONNE=demande_ami.ID_PERSONNE"; resultat = stmt.executeQuery(requete); while(resultat.next()) { UnAmi ami = new UnAmi(); ami.setDateAmi(resultat.getString("DATE_AMI")); ami.setDateDemande(resultat.getString("DATE_DEMANDE")); ami.setNom(resultat.getString("NOM"));


CORRIGE ami.setPrenom(resultat.getString("PRENOM")); ami.setEmail(resultat.getString("EMAIL")); cettePersonne.addLesAmis(ami); } // Recherche des mesages requete = "SELECT * "; requete += "FROM message "; requete += "WHERE ID_PERSONNE ="+idPersonne; resultat = stmt.executeQuery(requete); while(resultat.next()) { UnMessage message = new UnMessage(); message.setDate(resultat.getString("DATE_MESSAGE")); message.setLibelle(resultat.getString("LIBELLE_MESSAGE")); message.setTexte(resultat.getString("TEXTE_MESSAGE")); cettePersonne.addLesMessages(message); } conn.close(); reponse.setLaPersonne(cettePersonne); }catch (Exception e) { System.out.println("Error -- " + e.toString()); } return reponse; } }


CORRIGE CLIENT Génération du Client :

"%AXIS2_HOME%\bin\wsdl2java" -d adb -uri wsWebbook\META-INF\wsWebbook.wsdl -p fr.localhost.webBook.client -s -o wsWebbookClient cd wsWebbookClient "C:\Tomcat 6.0\apache-ant-1.8.1\bin\ant" jar.client Créer le projet Java à partir du répertoire wsWebbookClient Effectuer un Build Path pour ajouter les librairies d'Axis, et vérifier que le jar généré est lié Créer la classe client : WebbookClient.java

Classe WebbookClient package fr.localhost.webBook.client;

import import import import import

java.rmi.RemoteException; org.apache.axis2.AxisFault; java.io.*; java.io.IOException; javax.activation.DataHandler;

public class WebbookClient { public static void main(String[] args) { // Instanciation du stub client WsWebbookStub stub = null; try { // Url par défaut du stub client stub = new WsWebbookStub("http://localhost:8080/axis2/services/wsWebbook"); }


CORRIGE catch(AxisFault e) { e.printStackTrace(); } // Instanciation de la personne pour laquelle on veut les informations WsWebbookStub.GetPersonne laPersonne = new WsWebbookStub.GetPersonne(); // Le nom pour le paramètre de la réponse laPersonne.setNom("Chartogne"); laPersonne.setPrenom("Elodie"); try { // Instanciation de la réponse WsWebbookStub.GetPersonneResponse maReponse = stub.getPersonne(laPersonne); WsWebbookStub.UnePersonne maPersonne = maReponse.getLaPersonne(); // Affichage des informations System.out.println("Nom System.out.println("Prenom System.out.println("Date Naissance System.out.println("Email

: : : :

"+maPersonne.getNom()); "+maPersonne.getPrenom()); "+maPersonne.getDateNaissance()); "+maPersonne.getEmail());

// Affichage des amis if(maPersonne.getLesAmis() !=null) { System.out.println("Ses amis : "); for(int i=0; i < maPersonne.getLesAmis().length;i++) { System.out.println(" --> : "+maPersonne.getLesAmis()[i].getPrenom()+" "+maPersonne.getLesAmis()[i].getNom()); System.out.println(" - Date Demande :"+maPersonne.getLesAmis()[i].getDateDemande()); System.out.println(" - Date ami :"+maPersonne.getLesAmis()[i].getDateAmi()); System.out.println(" - Email :"+maPersonne.getLesAmis()[i].getEmail()); } } // Affichage des messages if(maPersonne.getLesMessages() !=null) {


CORRIGE System.out.println("Ses messages : "); for(int i=0; i < maPersonne.getLesMessages().length;i++) { System.out.println(" --> : "+maPersonne.getLesMessages()[i].getLibelle()); System.out.println(" - Date :"+maPersonne.getLesMessages()[i].getDate()); System.out.println(" - Message :"+maPersonne.getLesMessages()[i].getTexte()); } } // Récupération de l'image et copie dans le répertoire c:\personnes try { // Création du fichier en sortie composé du nom_prenom suffixe jpg File sortie = new File("c:"+File.separator+"personnes"+File.separator+maPersonne.getNom()+"_"+maPersonne.getPrenom()+".jpg"); // Association du flux en sortie FileOutputStream fluxSortie = new FileOutputStream(sortie); // Ecriture du fichier image maReponse.getLaPersonne().getPhoto().writeTo(fluxSortie); }catch(IOException eio){eio.printStackTrace();} }catch(RemoteException e) { e.printStackTrace(); } } }


Test  

test logiciel

Advertisement
Read more
Read more
Similar to
Popular now
Just for you