Vous êtes sur la page 1sur 51

[Tapez ici]

2016

Rapport stage
DEVELOPPEMENT D’UNE APPLICATION
SONDAGE PAR SMS

Réaliser Par :
Aichetou Baye Elkhadar

Encadrer par :
Mr : Mouhamed Babe
REMERCIEMENTS
Mes remerciements s'adressent principalement au responsable de mon stage au
niveau de l’Opérateur Mattel, Monsieur Mouhamed Babe, pour m’avoir
accepter dans ce projet et pour toute l'aide qu’il m'a apporté afin de me
permettre de mieux cerner le travail à réaliser tout au long du stage.
De même, je remercie mon maître de stage à l’ESP Lieutenant ingénieur Maine
Moutaly, pour son suivi au cours du stage.

Enfin, merci à toute l’équipe de Mattel pour son accueil, sa disponibilité, mes
remerciements à toutes les personnes qui ont contribué de près ou de loin à la
réalisation de ce projet, et dont les noms ne figurent pas dans ce document.

Stage 1er année GTR 1


Résumé :
A travers ce projet, j’ai effectué des études de langage Java et de recherche sur
les bases de Données. Ce rapport synthétise le travail que j’ai réalisé tout au long
de la durée de mon stage au niveau de MATTEL.

Le stage consiste à mettre en place une application qui permet de gérer une
inter-action avec les clients via sms en utilisant le protocole smpp. Elle se
déploiera sous deux formes : des SMS d’enquêtes et des SMS concours.

Cette application est basée sur un système de format web J2EE avec une base
de données de type MySQL, et d’une bibliothèque smppapi qui implémantera le
protocole smpp.

Mots clés : Java, bases de Données, Protocole smpp, SMS, JEE, MySQL, smppapi.

Abstract:
I performed in this project Java language studies and research databases. This
report summarizes the work that I have provided throughout the training period.
My internship is to develop an application that can manage interaction with
customers via sms using the protocol smpp. It will unfold in two forms: SMS
surveys, SMS contests.
This application is based on a J2EE web format system with a MySQL database,
and a library that implements the smppapi smpp protocol.

Keywords: Java, data bases, smpp Protocol, SMS, JEE, MySQL, smppapi.

Stage 1er année GTR 2


Liste des abréviations :
Abréviations Designations
SMS Short Message Service
SMPP Short Message Peer to Peer
JEE Java Enterprise Edition
MySQL : My.SQL My Structured Query Language
HTML HyperText Markup Language
CSS Cascading style sheets
JSP Java Server Pages
JSTL Java Server Pages Standard Tag
Library
MVC Model view controller
SMS-C Short Message Service center
DAO Data Access Object

Tables de Figures :
Figure1 : Patron MVC........................................................................................................20
Figure2 : Fonctionnement du pattern DAO........................................................................23
Figure 3 : Diagramme de classe de notre Factory...............................................................24
Figure 4 : début du sondage...............................................................................................31
Figure 5 : Premier Message...............................................................................................32
Figure6 : choix de réponse.................................................................................................32
Figure 7 : Dernier Message ; Message de Remerciement....................................................33
Figure 8 : Liste des questions.............................................................................................33
Figure 9 : Interface SMPPSIM............................................................................................34

Stage 1er année GTR 3


SOMMAIRE

Remerciement...............................................................................................1
Résumé..........................................................................................................1
Abstract.........................................................................................................2
Liste des abréviations...........................................................................................3
Table des figures ..................................................................................................3
Sommaire…....................................................................................................4
Introduction Générale…..................................................................................6
Présentation de l’organisme d’accueil.............................................................7
3. Présentation du sujet.................................................................................15
Objectifs..............................................................................................................15

Les principales fonctionnalités............................................................................15

4. Etude Technique........................................................................................17

Exigences techniques..........................................................................................17

Architecture JEE..................................................................................................18

Modèle MVC.......................................................................................................18

Framework utilisés..............................................................................................20

5. Conception................................................................................................21

Utilisation du pattern Data Access Object (DAO) .....................................................................21


Conception d’un diagramme de classe metier..........................................................................22

6. Développement.........................................................................................22

Le langage de développement............................................................................22

Stage 1er année GTR 4


L’environnement de développement.................................................................23

Implémentation du modèle DAO.............................................................................................23

Les Beans..................................................................................................................................24

Les Menagers...........................................................................................................................25

Implémentation des servlet et JSP..............................................................................25

Développement de services SMS.............................................................................................27

Prise en main de Smppapi........................................................................................................28

7. Mise en œuvre...........................................................................................29

Outils de développements..................................................................................29

Réalisation..........................................................................................................31

8. Conclusion.................................................................................................34

9. Annexe......................................................................................................36

AnnexeA.............................................................................................................36

AnnexeB..............................................................................................................39

10. Webographie...........................................................................................50

Stage 1er année GTR 5


1. INTRODUCTION
Afin de développer mes connaissances et profiter à m’initier au domaine de
travail, L’Ecole Supérieure Polytechnique (ESP) a programmé un stage pour les
étudiants de première année Réseau et télécommunication de 8 semaines.

Parmi les nombreuses propositions avancées, mon choix s’est porté sur la
Direction Informatique de l’Opérateur Mattel.

Mon stage au niveau de cette Direction consistait à crée une application qui
développe les services Sms, produit d’un sondage sms des clients Mattel.

On constate un rapprochement très fort entre les technologies télécom et


information. Là où j’ai travaillée sur mon projet qui consiste d’une part à mettre
en place une application web JEE pour faciliter aux responsables de niveau
interne de traiter sur les demandes des clients, et d’autre part l’intervention de
la bibliothèque smppapi qui implémente le protocole smpp qui facilite
l’interaction aussi avec les clients.

Ce rapport présente le compte rendu du travail effectué durant le stage tout au


long de cette période allant du 15 juillet au 15 septembre 2016.

La suite de mon travail chez Mattel a été consacré à l’étude et pour faire
comprendre à travers dans un premier temps une partie théorie et en second
lieu une partie pratique, le langage Java et JEE ainsi la compréhension du
fonctionnement du protocole smpp.

Je commencerai le rapport par une présentation de l’Opérateur Mattel et sa


Direction Information dans laquelle j’ai effectué mon stage. Je présenterai en-
suite plus en détails le projet lui-même. La présentation des méthodes et

Stage 1er année GTR 6


outils utilisées lors du développement sera évoquée en détail.

Enfin, je présenterai dans le rapport, les problèmes rencontrés avant d’aborder


la conclusion générale du stage.

2. PRESENTATION DE L’ORGANISME D’ACCUEIL


a. Un peu d’histoire :

MATTEL est un fruit d’alliance entre le Mauritano-Tunisien, qui a eu lieu 11 mai


2000. En effet, elle est le premier opérateur de GSM en Mauritanie. La Mattel
s’est toujours distinguée par une prestation de services et un réseau de qualité
alliant professionnalisme et sens de l’écoute.

 Aujourd’hui, sa notoriété auprès des utilisateurs du GSM en Mauritanie


est le résultat d’une approche commerciale prépondérante.

 Pour être à proximité de ses clients, Mattel est présente dans plus de 23
agences réparties sur tout le territoire mauritanien.

Elle couvre presque 70% du territoire mauritanien, et plus de 80% de la


population.

b. Un peu des chiffres :

Chiffres Réseau mobile

Plus de 1 500 lignes post-payées.

Plus de 700 000 lignes prépayées.

Indicateurs clefs

Stage 1er année GTR 7


Capital de 1 250 millions d'ouguiya.

1 centre d'appel au service de la clientèle.

Plus de 23 agences commerciales au service de la clientèle.

Un effectif de 200 cadres et agents hautement qualifiés.

c. Les valeurs de MATTEL

Mattel se mobilise afin de créer des services que ses clients apprécient. Il est
essentiel derespecter et de véhiculer des valeurs qui détermineront à la fois les
actions et les manières deréaliser les objectifs de Mattel. Croire en ses valeurs,
les partager, en faire un guide decomportement ne peut qu’assurer la cohésion
et renforcer la culture d’entreprise.Les valeurs de Mattel sont au nombre de
quatre : orientation client, professionnalisme,transparence et innovation.

 Orientation client : Mattel a toujours placé la satisfaction de ses clients au


centre de ses préoccupations. Le client est sa raison d’être. Sans ses
clients, Mattel n’existerais plus. Ce constat simple est le point de départ
de l’ensemble de ses démarches. Après plus de 30 agences réparties sur
tout le territoire mauritanien, Mattel a opté pour la proximité, l’écoute et
le conseil.

 Professionnalisme : La mise en place de processus écrits leur permet de


mesurer, d’analyser, d’évaluer leurs méthodes de travail afin de les
améliorer. Leur professionnalisme s’inscrit aussi à travers sa politique de
recrutement, la gestion des carrières de ses collaborateurs, les formations

Stage 1er année GTR 8


dont ils bénéficient mais surtout la reconnaissance de leurs résultats à
travers l’atteinte des objectifs prédéfinis.

 Transparence : Ses relations avec ses clients, ses collaborateurs, ses


fournisseurs évoluent dans un climat de transparence. En interne, ils ont
mis en place des règles équitables, basées sur des carrières impartiales,
afin de refléter d’avantages leur volonté. En externe, la mise en place de
procédures d’achat et de sélection des fournisseurs transparentes ainsi
qu’une égalité de traitement des clients, sont la marque d‘un respect
nécessaire dans tout rapport.

 Innovation : L’arrivée de Mattel en tant que premier opérateur GSM en


Mauritanie a fortement bouleversé le marché mauritanien de la
téléphonie mobile. En lançant des produits innovants, simple et de qualité,
à des prix accessibles, Mattel répond ainsi sa volonté d’être présente dans
le monde des nouvelles technologies en tant qu’acteur essentiel.

d. La direction :

Comme toutes entreprises, la Mauritano-Tunisienne de télécommunication a


plusieurs directions qui se différencient par leurs missions différentes.

Stage 1er année GTR 9


Les différentes directions de Mattel

Direction à Nouakchott Nom et Prénom

Directeur Général Mohamed Ali Sahli

Directeur Commercial Mokhtar Ould Ebnou

Directeur Financier Cheikh Ould Ely

Directeur d’Achat Yahya o / Raby

Directeur des Ressources Humaines Kébé Ibrahima

Directeur Contrôle de Gestion et Audit Chaker Ben Amar

Directeur Technique Abdel Aziz Torkhane

Directeur d’Informatique Sami Masmoudi

Directeur International Mokhtar o/ Ebnou

Direction Régionales Nom et Prénom

Directeur du Centre Ely Cheikh o/ Ahmed Dad

Directeur du Nord Abdou o/ Charki

Directeur de l’Est Ndahabibe o/ Ahmed Kader

1. Direction Qualité et Programme :

Stage 1er année GTR 10


La mission de la DQP est de coordonner les efforts et conduire le plan de
développementconformément aux standards de qualité préalablement fixés.

 Département programme et management :

Intervient sur les programmes transverses pour faciliter leur lancement et


maitriser lesrisques.

 Département qualité et processus :

L’orientation client (satisfaire le client et se différencier de la


concurrence).Définit et mets en œuvre les processus adéquats afin de s’aligner
avec l’orientationclient.Définir les outils et les méthodes (test, formation,
culture, qualité).

 Service Reporting :

Définir les niveaux de qualité grâce aux indicateurs de performances (indicateurs


deperformances réseau, service, client, détail de traitement des demandes
d’achat…) quiseront suivis à leurs tours par un Reporting opérationnel.

2. Direction Commerciale :

L’objectif est de mettre le client au centre de la stratégie de l’entreprise :

 Traçabilité des évènements clients.

 Réactivité face aux attentes clients.

 Pilotage de la réaction client.

Cette direction dispose aussi des fonctions services clients :

 Front Office : Call Center, gestion des demandes et réclamations clients.

 Back Office : Traitement de cas, activation, recouvrement.

Stage 1er année GTR 11


 Fonction commerciale : Gestion des forces de vente.

 Département communication :

Ses tâches sont : Publicité sur les lieux de vente, Publicité (insertion presse,
télévision, affichage) et Communication par téléphone

 Département stratégie commerciale et support :

Ce département est mis en place pour servir d’appui à :La vente, la distribution
et le service après-vente.

 Département vente grand marchés :

Mise en place et gestion de canaux de distribution des produits et services de


Mattel.Distribution directe : plus de 30 agences sur tout le territoire
mauritanien.

 Département vente entreprise :

Ses tâches sont : Réalisation des ventes des produits et services Mattel au
segment corporatifs.Proposition de solutions « sur mesure » spécialement
adaptées aux besoins et spécificités desclients corporatifs.Mise en place de
partenariats stratégiques (Evénements spéciaux, conventions, programmesde
fidélisation…).

3. Direction Administration et Financière :

Stage 1er année GTR 12


Ses tâches sont : Assurer la disponibilité des fonds nécessaires, garantir le bon
emploi et optimiser l’utilisation de ces ressources (humaines,
financières,matérielles…), préserver le patrimoine de l’entreprise, assurer la
pertinence et la fiabilité de l’information et maîtriser les coûts et les
investissements.

4. Direction Technique :

 Département réseau d’accès :

 Planification et optimisation du réseau radio

 Construction des sites

 Livraison des équipements aux sites

 Département transmission :

 Gestion de déploiement de transmission

 Département communication :

 Conception du réseau de communication

 Intégration de nouveaux Switch

 Département service à valeur ajoutée :

 Conception et implémentation des services à valeur ajoutée

 Département opération et maintenance :

 Supervision et maintenance du réseau

 Support aux équipes ingénieurs et opérations

Stage 1er année GTR 13


5. Direction Système d’information :

Assure la protection des échanges avec les réseaux extérieurs. Au niveau interne,
elle veillesur la sécurité et la confidentialité des données et enfin s’occupe de la
mise à jour du système.La direction Système d’information est composée
essentiellement de trois départements

 Le département SI Opération

 Le département SI Clients

 Le département Transverse

6. Direction des ressources humaines :

 Recrutement, intégration et formation

Cette fonction consiste à faire les recrutements nécessaires pour Mattel à partir
desentretiens objectifs préparés à l’avance.

 Gestions administratives

Fonction essentielle de la DRH s’occupant essentiellement de la préparation des


fiches de paies, déterminer les salaires des personnes en plus de régler les
affairesadministratives externes tels que les dossiers de la CNSS…

Stage 1er année GTR 14


 Evaluation et gestion des carrières

 Communication interne (intranet)

7. Direction service client :

Assure l’acquisition, l’assistance, le développement et la fidélisation des clients


pour atteindreles meilleurs taux de satisfaction.

 Département gestion de risques :

Garantit l’encaissement de la totalité des revenus en réduisant les délais de


paiementtout en maximisant le revenu/utilisateur.

 Département d’organisation et méthodes :

Rassemble les expertises requises à la recherche permanente pour l’optimisation


desressources et les processus et outils opération.

Stage 1er année GTR 15


3. PRESENTATION DU PROJET
Cette application est utilisée par les managers de Mattel qui ont pour tâche de
répondre aux demandes des clients.

3.1. Objectifs :

Collecter des informations pour aider à mieux comprendre et cerner les attentes
et désirs des clients afin d’améliorer la qualité des services proposés.

3.2. Les principales fonctionnalités :

3.2-1 Création et modification d’un sms :

Un sms est créé sous forme d’une question qui va être écrite dans la page
d’accueil du sondage. Après chaque enregistrement, l’implémentation de la
question est vérifiée.

3.2-2.Consultation d’un sms :

Une liste des sms (questions) est disponible avec des tries.

Les informations complètes sont accessibles pour chaque question.

Vérification de l’implémentation d’un sms :

Cette fonction est utile pour contrôler que chaque SMS a bien été implémenté.

3.2-3.L’envoie d’un SMS :

Pour envoyer un message à un abonné, il va falloir se connecter sur le SMS-C,


créer un paquet SMPP.

Stage 1er année GTR 16


3.2-4.Téléchargement de la base de données de réponses des abonnés :

Stage 1er année GTR 17


4. ETUDE TECHNIQUE
Cette section vise à définir l’architecture physique et logique du système.
Elle décrira les besoins techniques avant de présenter la conception
répondant aux exigences futures du système en place.

4.1. Exigences techniques :

L’application que j’ai l’honneur de présenter est une application web / J2EE
implantée sur une architecture physique à 3 niveaux :
 Le niveau Client (ou Poste de Travail) où se situe l’utilisateur ;
 Le niveau Serveur Applicatif qui répond, en collaboration avec le Serveur
de données, aux demandes émises par le niveau Client ;
 Le niveau Serveur de Données qui héberge le SGBD et la base de données.

Le système futur doit être conforme à un ensemble de critères, notamment :


 Il doit suivre les standards de la plateforme JEE ;
 Il doit présenter une architecture en couches qui permettra au système
d’être évolutif, facilement maintenable et tolérant aux montées en charge

Le système doit communiquer avec une base de données relationnelle MySQL

Dans la section suivante, nous analyserons ces contraintes afin de déterminer la


solution répondant à ces besoins.

4.2. Une architecture JEE

Stage 1er année GTR 18


La plateforme J2EE (Java 2 Entreprise Edition), créée par SUN Microsystems,
définit le concept de développement par couches. Elle permet de simplifier les
applications d'entreprise en se basant sur des composants modulaires
normalisés tout en fournissant un ensemble complet de services et en gérant
automatiquement un grand nombre de détails sur le comportement des
applications.
Parmi les avantages de la technologie J2EE, nous citons :
 J2EE est venue pour remplacer les méthodes traditionnelles de
développement (voir la partie MVC) ;
 J2EE dispose d’une documentation très riche et l’ensemble des projets en
J2EE sont publiés dans le web ;

Un très grand nombre de bibliothèques gratuites sont publiées dans le web et


sont facilement intégrables dans un projet J2EE.
4.3. Le modèle MVC :
Avant de définir le modèle MVC, Nous allons présenter quelques défaillances de
la méthodologie traditionnelle de développement :
Nous notons qu’avec JSP ou PHP ou autre langage Web coté serveur, le
développement d’une application web, commence par la création d’un certain
nombre de pages Web. Dans ces pages, nous constatons qu’il y a des codes qui
concernent l’affichage graphique, des codes relatifs aux traitements et des codes
d’accès aux données comme la connexion à la BD, des requêtes SQL, etc. Or, avec
ce concept nous pouvons constater qu’il y a des segments de codes qui ne sont
pas cohérents et qui sont mélangés les uns avec les autres, ce qui rend la
réutilisation du code, difficile. Le changement d’une base de données sous
Oracle vers une base de données sous MySQL par exemple, va entraîner un
changement dans la plupart des pages. L’inconvénient de ceci, est que dans la

Stage 1er année GTR 19


plupart des cas, c’est le développeur de l’application lui-même qui doit
intervenir, ce qui rend le coût de la maintenance et de la réutilisation plus élevé.
Pour pallier à ce problème, le modèle MVC (Model, View, Controller) définit un
nouveau concept de développement. Il a pour objectif de séparer les codes en
divisant le projet en couches : vue, contrôleur et modèle de données.
Le modèle : correspond aux données manipulées par l’application, qu’il s’agisse
de l’accès ou de la mise à jour.

La vue : correspond à l'interface avec laquelle l'utilisateur réagi. Sa première


tâche est de présenter les résultats renvoyés par le modèle qui lui sont passés
par le contrôleur. Sa seconde tâche est de recevoir toutes les actions de
l'utilisateur. Ces différents évènements sont envoyés au contrôleur. Elle
n'effectue aucun traitement, elle se contente d'afficher les résultats des
traitements effectués par le modèle.
Le contrôleur : Le contrôleur prend en charge la gestion des évènements de
synchronisation pour mettre à jour la vue ou le modèle et les synchroniser. Il
reçoit tous les événements de l'utilisateur et enclenche les actions à effectuer.

Stage 1er année GTR 20


Figure1 : Patron MVC

4.4. Framework utilisés :


Un Framework est un espace de travail modulaire. C'est un ensemble de
bibliothèques, d'outils et de conventions permettant le développement
d'applications. Il fournit suffisamment de briques logicielles et impose
suffisamment de rigueur pour pouvoir produire une application aboutie et facile
à maintenir. Ces composants sont organisés pour être utilisés en interaction les
uns avec les autres. Cette section présente les Framework Open Source utilisés.
Ils ont été sélectionnés sur la base d’études comparatives menées pour chaque
Framework, lesquelles sont disponibles en annexe A.

a. Java server standard Tag Library:


La JSTL est une implémentation de Sun qui décrit plusieurs actions basiques pour
les applications web J2EE. Elle propose ainsi un ensemble de librairies de tags
pour le développement de pages JSP.

Stage 1er année GTR 21


5. CONCEPTION

5.1. Utilisation du pattern Data Access Object (DAO) :


Quel que soit le système sur lequel vous développez, vous pourrez toujours
accéder à vos données relationnelles. Vous utiliserez alors des API telles que
JDBC, ADO, ADO.Net, et pourrez alors exécuter des requêtes SQL, ou obtenir des
objets représentant des tables et leurs champs.
Ces outils sont suffisants mais ne permettront jamais à eux seuls une vraie
abstraction de la base de données sous-jacente. Par exemple vous ne pourrez
pas obtenir toutes les commandes d’un client donné avec une seule ligne de
code. De plus, chaque fois que vous voudrez supprimer un client, vous devrez
supprimer manuellement son adresse, alors que cela pourrait être fait
automatiquement.
Tous ces problèmes doivent être gérés par une couche d’accès aux données
chargée de communiquer avec le serveur de bases de données, et de renvoyer
des objets métiers au programmeur. Ce denier n’aurait alors plus besoin de taper
des requêtes SQL, comprendre les relations entre les tables, ou connaître tous
les paramètres des procédures stockées, ou encore d’autres éléments. Lorsqu'on
parle de séparation des couches par responsabilité, il y a va également de la
séparation des compétences de chaque développeur.
C’est à cela que servent les DAO. Ils sont créés pour simplifier au maximum le
travail du programmeur avec le système de données en encapsulant les accès à
la base via les Framework tels qu’ADO.Net.

Stage 1er année GTR 22


5.2. Conception d’un diagramme de classe métier :
Le modèle du domaine constitue l'ensemble des entités persistantes de
L’application. C'est une résultante de la conception et de l'analyse système. Par
définition, le modèle du domaine ne doit en aucun cas contenir de lien avec un
quelconque Framework technique. Le risque serait d'exposer le modèle métier
aux évolutions techniques et remettre en cause la pérennité du modèle. Une
équation loin d'être évidente à résoudre surtout lorsqu'on sait que les API
d'accès en base font aussi partie de ces conditions.

6. DEVELOPPEMENT

6.1. Le langage de développement :


Un certain nombre de critères sont envisagés pour réaliser ce choix :
- Le caractère Open Source du langage.
- Le partage de code avec d'autres projets.
La principale difficulté d'un projet de développement en gestion réside dans le
volume du code à gérer, lors du développement et surtout lors de la
maintenance de l'outil.
Pour assurer la pérennité du projet, il faut un langage "structurant" qui incite à
produire du code lisible et maintenable.
Sur ce point le caractère objet du langage Java le rend adapté à un
développement de grande envergure. Il permet une bonne division du travail
entre les développeurs grâce au principe de l'encapsulation.
Le langage Java dispose de nombreux outils d'accès aux bases de données, grâce
à l'interface JDBC et à l'existence de drivers pour toutes les bases de données
relationnelles.

Stage 1er année GTR 23


Il dispose de bibliothèques commerciales permettant d'asseoir le projet sur une
conception objet pure et de déléguer les problèmes de stockage des objets à ces
bibliothèques ("persistance").
Le langage sélectionné est donc Java.

6.2. Environnement de développement :

Le JDK utilisé est la version 1.8.0.

Pour le développement, j’ai utilisé le moteur de servlets « Tomcat 7.0 » ainsi que
l’éditeur Eclipse JEE mars-2.

6.3. Implémentation du modèle de donnée DAO :

Figure2 : Fonctionnement du pattern DAO

Le pattern DAO vous permet de lier vos tables avec des objets Java.
_ Interagir avec des bases de données en encapsulant l'accès à celles-ci permet
de faciliter la migration vers une autre base en cas de besoin.

Stage 1er année GTR 24


_ être vraiment le plus souple possible, et laisser la création de nos DAO à une
factory codée par nos soins.
_ gérer différents types de DAO (BDD, XML, fichiers. . .), et utiliser une factory
qui se chargera de créer nos factory de DAO.

Figure3 : Diagramme de classe de notre Factory

Nous disposons ainsi de :


_ D’objets métiers (nos classes de base) ;
_ D’une implémentation d'accès aux données (classes DAO) ;
_ D’une classe permettant de placer en instance les objets d'accès aux données
(la Factory).

6.4. Les Beans :


Les beans sont simplement les Classes représentant les futurs objets persistants.
A chaque Bean correspond un fichier mapping.
Chaque objet Bean possède :
- un constructeur par default.
- les propriétés privées de l’objet.
- les méthodes Getteurs et Setteurs pour y accéder.
- la méthode hashCode pour déterminer l’identificateur de l’objet (possibilité sur
plusieurs propriétés).
- la méthode equals () pour faire des comparaisons d’objets.

Stage 1er année GTR 25


6.5. Les Managers :
Les Classes Managers ont la responsabilité de la transaction entre la base de
données et les objets beans.
A chaque objet beans correspond un manager.
Possibilité de loader un objet en lui renseignant son identifiant, de supprimer,
de sauvegarder ou de modifier des objets ou de charger des listes correspondant
à des critères suivant les besoins de l’application.

6.5. Implémentation des Servlets et JSP :

6.5-1. Les Servlets :


Les servlets sont des classes qui vont permettre de contrôler l’application.
Leur rôle sera :
- de prendre en compte des paramètres (provenant en général de l’url généré
par les jsp).
- de contrôler, grâce aux classes managers, des sauvegardes, des modifications
ou des suppressions si besoin
- de charger des objets nécessaires au besoin de l’enchainement suivant.
En fonction des résultats (sécurité, erreur, choix) elle lancera un jsp en pouvant
lui passer en paramètre n’importe quel objet utile.
Une servlet peut aussi lancer une autre servlet suivant les enchaînements
prévus.

6.5-2. Les JSP :


Les JSP servent uniquement aux vues. Ils n’auront aucun traitement à effectuer.

Stage 1er année GTR 26


Leur rôle est donc d’afficher les informations, d’acquérir les renseignements et
actions de l’utilisateur.

6.6. Débugage :
Pour le débugage j’ai utilisé l’API Log4j.
Pour l’utilisation, il faut paramétrer un fichier log4.properties.
On paramètre également des objets de sortie. Pour ce projet, j’ai réalisé :
- une sortie pour le développement avec Tomcat en local, avec affichage des
infos dans la console Eclipse et un niveau de traçage commençant au debug
- une sortie sur un fichier du serveur de production de l’application à un niveau
de traçage incorporant uniquement les erreurs et warning.

6.7. Construction et compilation avec le Fichier Ant :


Le fichier Ant permet de valoriser les paths et les environnements, de pouvoir
construire des répertoires temporaires permettant la compilation et de réaliser
la livraison de l’application (soit en local, développement, soit en environnement
d’intégration ou même par FTP en environnement de production).
Tous ces éléments sont générés de manière automatique par Ant.

6.8. Développement de services SMS :


6.8-1. Les outils nécessaires au développement :
Même si on a l’accès à un SMS-C, aucun opérateur ne laissera faire la mise au
point de mon application directement sur sa plate-forme. Par conséquent, il est
nécessaire d’utiliser un simulateur qui permettra en plus de faire des tests plus
poussés que sur un SMS-C en production. En recherchant sur le WEB, on trouve
facilement deux simulateurs : celui de LogicaCMG , sous licence Logica Open

Stage 1er année GTR 27


Source License v1.0, et "SMPPSim" de Selenium Software, sous licence GLP v2.
Pour mes expérimentations, j’ utilise ce dernier. Outre la simulation d’un
SMS-C, SMPPSim permet également de simuler l’envoi de SMS à partir d’un
terminal. Ceci est réalisé par une interface Web.

L’installation de SMPPSim est très facile. Téléchargez SMPPSim.tar.gz et


décompressez-le dans un répertoire. La racine contient le fichier
startsmppsim.sh qui permet de lancer le simulateur. Le répertoire conf contient
le fichier smppsim.props qui permet de configurer le simulateur. Il y a de
nombreuses options, les principales étant :
# Le port d’écoute SMPP
SMPP_PORT=2775
# login et mot de passe pour les accès SMPP
SYSTEM_ID=smppclient
PASSWORD=password
# Le port d’écoute du serveur web pour l’administration et la simulation
# d’envoi à partir d’un terminal
HTTP_PORT=88
Comme expliqué dans le paragraphe consacré à SMPP, il est préférable d’utiliser
une API capable de gérer les aspects de codage et de décodage des PDU, mais
également l’asynchronisme inhérent au protocole. Là aussi, une rapide
recherche donne deux résultats : la "Java SMPP Library de Logica" et "smppapi"
que nous utiliserons.smppapi est disponible sur Sourceforge en LGPL.
Qu’il s’agisse de SMPPSim ou smppapi, les deux fonctionnent sous Java. La
dernière version de SMMPSim requiert Java 1.5. Smppapi utilise Log4J et
Commons-Logging que nous inclurons dans les jars exécutables ou dans le
CLASSPATH. Finalement, Ant nous aidera dans les compilations.

Stage 1er année GTR 28


6.9. Prise en main de smppapi :
La meilleure manière de prendre en main une API est de l’expérimenter en
l’appliquant.
Nous commencerons donc par un exemple très simple : un programme en ligne
de commande qui enverra un message à un abonné. Bien entendu, puisque le
SMS-C est un simulateur, aucun SMS réel ne partira. Notre programme,
SMSSender, sera appelé de la manière suivante :
Java -jar smssender.jar 0123456789 Un petit message.
Le programme sera divisé en deux fichiers. SMSSender.java définit la classe
SMSSender. Le constructeur positionne les paramètres de connexion.
sendMessage () enverra le message au destinataire. Le code dans Servlet1.java
analyse la ligne de commande, crée un objet SMSSender et appelle les méthodes
pour réaliser l’envoi.

7. MISE EN ŒUVRE
7.1. Outils de développement :
Pour implémenter le système, il a fallu d’abord mettre en place la base de
données et la base des documents (GED) du système, ensuite de développer

Stage 1er année GTR 29


l’application. Plusieurs technologies et outils ont été adoptés pour atteindre cet
objectif et qui seront exposé après.

7.1-1. IDE Eclipse :


L'IDE Eclipse pour Java EE Developers contient tout ce qu’un
développeur a besoin pour créer des applications Java et Java
Enterprise Edition (Java EE). Considéré par beaucoup comme le meilleur outil de
développement Java disponibles, l'EDI Eclipse pour Java EE Developers offre une
excellente édition Java avec la compilation incrémentielle, Java EE 5, une
interface graphique HTML / JSP / JSTL, outils de gestion de bases de données, et
le soutien aux plus populaire serveurs d'applications.

7.1-2. Apatche Tomcat :

Apache est un serveur web. Ce serveur est géré par « Apache


Software Foundation » qui compte plusieurs dizaine de
membres, des centaines de contributeurs et développe
plusieurs projets liés à la diffusion d'information sur internet.
Le serveur HTTP Apache a été conçu comme un serveur web puissant et flexible
pouvant fonctionner sur une très grande variété de plateformes et toute une
gamme d'environnements différentes. Ainsi, le serveur Apache permet
l’utilisation de différentes méthodes pour implémenter la même fonctionnalité,
le plus efficacement possible, dépendamment des différentes plateformes et
environnements. Apache s'est toujours accommodé d'une grande variété
d'environnements grâce à sa conception modulaire.
Pour le SGBD nous avons choisi MySQL comme SGBD relationnelle pour y stocker
les données de l’application.

Stage 1er année GTR 30


7.1-3. WampServer :

WampServer (WAMP2) est une plateforme de développement


Web de type WAMP, permettant de faire fonctionner
localement (sans se connecter à un serveur externe) Des scripts
PHP. WampServer n'est pas en soi un logiciel, mais un environnement
comprenant deux serveurs (Apache et MySQL), un interpréteur de script (PHP),
ainsi que phpMyAdmin.

Pour l'administration Web des bases MySQL. Il dispose d'une interface


d'administration permettant de gérer et d'administrer ses serveurs au travers
d'un traie icone (icône près de L’horloge de Windows).La grande nouveauté de
WampServer réside dans la possibilité d'y installer et d'utiliser n'importe quelle
version de PHP, Apache ou MySQL en un clic. Ainsi, Chaque développeur peut
reproduire fidèlement son serveur de production sur sa machine locale.

7.2. Réalisation :
Dans cette partie je vais présenter des utilisations de l’application, sujet du
rapport, par les managers de l’opérateur.
Tout utilisateur est invité à commencer son sondage sms pour pouvoir profiter
des services offerts par notre application.

Stage 1er année GTR 31


Figure 4 : début du sondage

Cette figure présente la page d’acceuil de mon projet (Sondage SMS) , nous
avons un champ pour le nom de somdage et un champ pour écrire le question
avec un champ pour le choix réponse .

Stage 1er année GTR 32


Figure 5 : Premier Message

Figure 6 : choix de réponse

Le Figure ci-dessus présente le choix du type de réponses que vous désirez :


OUI/NON
Réponses multiples
Réponses ouvertes
Note

Figure 7 : Dernier Message

Stage 1er année GTR 33


Figure 8 : Liste des questions

Un récapitulatif de Sondage est présenté avant la dernière validation.

Figure 9 : interface Smppsim

8. CONCLUSION GENERALE
La réalisation de ce projet était une grande expérience pour l’adaptation au
travail, j’ai rencontré beaucoup de problèmes d'installation et configuration

Stage 1er année GTR 34


des outils de développement, des fonctions qui n’aboutissaient pas
exactement à ce que je veux. Mais à force de persévérance tout marche
correctement et je trouve les bons résultats. A chaque difficulté rencontrée
que je ne peux pas résoudre seul, j’ai eu recours à la consultation des sites
spécialisés ou encore en demandant à mon encadreur.

En plus d'être un complément des connaissances acquises au cours de la


formation du stage, ce projet m’a été d'une très grande utilité,

Car il m’a non seulement permit de s'interroger ? De réfléchir ? mais aussi de


résoudre les problèmes. Les difficultés rencontrées trouvent généralement
les solutions adéquates.

En effet ce projet au niveau de MATTEL m’a permis d'enrichir mes


connaissances sur beaucoup d'outils informatiques car j’étais carrément
débutant en commençant ce travail, j’aurai donc la possibilité d'acquérir une
expérience professionnelle utile dans mes recherches ultérieures de stage et
d'emploi.

Je suis persuadé que ce stage m’aidera certainement dans l'avenir.

Stage 1er année GTR 35


9. ANNEXES
1. Annexe A :
 Code jsp : page d’accueil et page de listage
 Code servlets :

Code Page d’accueil :


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@page import="projetMattel.Questions"%>
<% Questions q=(Questions)request.getAttribute("q"); %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" type="text/css" href="css/sond.css">
<title>sondage Par sms</title>
</head>
<body>
<div class="contenu">
<h3>preparation au sondage </h3>
<form method="post" action="recup">

<div class="nom">
Nom de sondage: <input type="text" name="PremierSondage"/><br /><br />

<br />

</div>

<h3>Question1</h3>
<div class="Question">

Rediger votre question votre question:


<br />
<textarea cols="70" rows="10" name="Question1"></textarea><br/><br/>
</div>
<input type="submit" name="modifier" value="modifier" style="color:blue"/>

<h3>Question2</h3>
<div class="Question">

Rediger votre question votre question:


<br />
<textarea cols="70" rows="10" name="Question2" ></textarea><br/><br/>
</div>

Stage 1er année GTR 36


<div class="Reponse">
Types de Reponses:<select name="Reponses" id="Reponses">
<option value="Oui/Non">Oui/Non</option>
<option value="Reponses multiples">Reponses multiples</option>
<option value="Reponses ouvertes">Reponses ouvertes</option>
<option value="Note">Note</option>
</select>
<br /> <br />
</div>
<input type="submit" name="validerer" value="valider" style="color:blue"/>

<h3>Question3</h3>
<div class="Question">

Rediger votre question votre question:


<br />
<textarea cols="70" rows="10" name="Question3" ></textarea><br/><br/>
</div>
<div class="Reponse">
Types de Reponses:<select name="Reponses" id="Reponses">
<option value="Oui/Non">Oui/Non</option>
<option value="Reponses multiples">Reponses multiples</option>
<option value="Reponses ouvertes">Reponses ouvertes</option>
<option value="Note">Note</option>
</select>
<br /> <br />
</div>

<h3>Question4</h3>
<div class="Question">

Rediger votre question votre question:


<br />
<textarea cols="70" rows="10" name="Question4" ></textarea><br/><br/>
</div>
<div class="Reponse">
Types de Reponses:<select name="Reponses" id="Reponses">
<option value="Oui/Non">Oui/Non</option>
<option value="Reponses multiples">Reponses multiples</option>
<option value="Reponses ouvertes">Reponses ouvertes</option>
<option value="Note">Note</option>
</select>
<br /> <br />
</div>
<div class="boutt">
<input type="submit" name="valider" value="valider"/>
</div>
<ul>
<c:forEach var="q" items="${ questions }">
<li><c:out value="${ q.question1 }" />
<c:out value="${ q.question2 }" />
<c:out value="${ q.question3 }" />
<c:out value="${ q.question4 }" />
</li>
</c:forEach>
</ul>
</form>
</div>
</body>
</html>

Stage 1er année GTR 37


Code Page de listage : c’est le code qui fournit une liste de questions.

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@page import= "projetMattel.Questions" %>
<%@page import= "projetMattel.Ilist" %>
<%@page import= "projetMattel.Listquest" %>
<%@page import= "projetMattel.connexion" %>
<%@page import= "java.util.ArrayList"%>
<%@page import =" java.sql.Connection"%>
<%@page import ="java.sql.PreparedStatement"%>
<%@page import=" java.sql.ResultSet"%>
<%@page import ="java.sql.SQLException"%>
<%@page import =" java.sql.Statement"%>
<%@page import ="java.util.List"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Sondage par SMS</title>
</head>
<body>
<h2>Votre Premier Sondage</h2>
<form method="post" action="recup1">
<%
Connection connexio = connexion.connBD();

try
{
Statement ps =connexio.createStatement();
String sql="select *from questions";
// Etape 4 : ex?cution requ?te
ResultSet rs = ps.executeQuery(sql);

// Si r?cup donn?es alors ?tapes 5 (parcours


Resultset)

%>
<table Border="1">
<tr>
<td>Question1</td>
<td>Question2</td>
<td>Question3</td>
<td>Question4</td>
</tr>

<%
while (rs.next()) {

/*System.out.println(rs.getString("Question1"));

System.out.println(rs.getString("Question2"));

System.out.println(rs.getString("Question3"));

System.out.println(rs.getString("Question4"));*/

Stage 1er année GTR 38


%>

<tr>

<td><%out.println(rs.getString("Question1")); %></td>

<td><%out.println(rs.getString("Question2")); %></td>

<td><%out.println(rs.getString("Question3")); %></td>

<td><%out.println(rs.getString("Question4")); %></td>
</tr>
</table>
<%
catch(SQLException e)
{
e.printStackTrace();
}
%>
<input type="submit" name="Envoyer" value="Envoyer" style="color:blue"/>

</form>
</body>
</html>

1. Annexe B : Présentation du modèle DAO :


Code source :
Notre contrôleur myservlets.java charge le DAO sans savoir si celui-ci
stocke dans une base de données MySQL ou ailleurs. Il demande
simplement d'aller stocker des données ou d'en récupérer :
/**
* Servlet implementation class myservlet
*/
@WebServlet(name = "myservle", urlPatterns = { "/myservle" })
public class myservlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/*static java.sql.Connection c = connexion.connBD();

static java.sql.Statement st;*/


private Ilist ilistDao;

public void init() throws ServletException {


DaoFactory daoFactory = DaoFactory.getInstance();
this.ilistDao = daoFactory.getIlist()

/**
* @see HttpServlet#HttpServlet()
*/
public myservlet() {
super();

Stage 1er année GTR 39


/**
* @see HttpServlet#doGet(HttpServletRequest request,
HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {

String question1=request.getParameter("Question1");
String question2=request.getParameter("Question2");
String question3=request.getParameter("Question3");
String question4=request.getParameter("Question4");

Questions q=new
Questions(question1,question2,question3,question4);

ilistDao.addQuestions(q);
request.getRequestDispatcher("sond2.jsp").forward(request, response);

La DAO Factory (DaoFactory.java) permet d'initialiser le DAO en chargeant


notamment les drivers nécessaires (ici un driver JDBC MySQL) et se
connecte à la base de données. La Factory peut fournir plusieurs DAO (ici, il
n'y en a qu'un seul, IlistDAO, qui correspond à une table de la base).
package projetMattel;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DaoFactory {


private String url;
private String username;
private String password;

DaoFactory(String url, String username, String password) {


this.url = url;
this.username = username;
this.password = password;
}
public static DaoFactory getInstance() {

Stage 1er année GTR 40


try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e)

DaoFactory instance = new DaoFactory(


"jdbc:mysql://localhost:3306/sondage", "root", "");
return instance;
}
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
// Récupération du Dao
public Ilist getIlist() {
return new Listquest(this);
}
}

On utilise une interface IlistDao.java pour définir les méthodes d'accès aux
données des utilisateurs, indépendamment de la méthode de stockage. On
indique juste des noms de méthodes ici.

package projetMattel;

Stage 1er année GTR 41


import java.util.List;

public interface Ilist {

void addQuestions (Questions q) ;


/* public List<Questions> listQuestions();*/

Stage 1er année GTR 42


L'implémentation réelle de ces méthodes (le code à l'intérieur) indiquera si on
stocke en SQL dans MySQL, dans Oracle, dans des fichiers ou ailleurs.

Parlons de l'implémentation de ces méthodes justement ! Ici, je ne vais faire


qu'une implémentation MySQL du. Il s'agit du fichier ListquestDaoImpl.java :

package projetMattel;
import projetMattel.Questions;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Listquest implements Ilist{
private DaoFactory daoFactory;

Listquest(DaoFactory daoFactory) {
this.daoFactory = daoFactory;
}
public void addQuestions(Questions q) {
Connection connexion = null;

try {
connexion = daoFactory.getConnection();
Statement ps =connexion.createStatement();
String req = "insert into questions (Question1,Question2,Question3,Question4)values ('";
req=req+q.getQuestion1()+"','";
req=req+q.getQuestion2()+"','";
req=req+q.getQuestion3()+"','";
req=req+q.getQuestion4()+"')";

ps.executeUpdate(req);
}
catch(SQLException e)
{
e.printStackTrace();

Stage 1er année GTR 43


}

}
}

Code SMSSender.java : L’envoie du message :


package mattel;

import ie.omk.smpp.Address;

import ie.omk.smpp.Connection;

import ie.omk.smpp.SMPPException;

import ie.omk.smpp.event.ConnectionObserver;

import ie.omk.smpp.event.ReceiverExitEvent;

import ie.omk.smpp.event.SMPPEvent;

import ie.omk.smpp.examples.SMPPAPIExample;

import ie.omk.smpp.message.BindTransmitterResp;

import ie.omk.smpp.message.SMPPPacket;

import ie.omk.smpp.message.SubmitSM;

import ie.omk.smpp.message.SubmitSMResp;

import ie.omk.smpp.util.GSMConstants;

import java.io.IOException;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.tools.ant.BuildException;

import projetMattel.Questions;

/**

* Example class to submit a message to a SMSC using asynchronous communication.

* This class simply binds to the server, submits a message, waits for the

Stage 1er année GTR 44


* submit response from the server and unbinds.

* @see ie.omk.smpp.examples.ParseArgs ParseArgs for details on running this

* class.

*/

public class SMSSender extends SMPPAPIExample implements ConnectionObserver {

private Object blocker = new Object();

private Log logger = LogFactory.getLog(SMSSender.class);

// This is called when the connection receives a packet from the SMSC.

public void update(Connection t, SMPPEvent ev) {

switch (ev.getType()) {

case SMPPEvent.RECEIVER_EXIT:

receiverExit(t, (ReceiverExitEvent) ev);

break;

public void packetReceived(Connection myConnection, SMPPPacket pak) {

logger.info("Packet received: Id = "

+ Integer.toHexString(pak.getCommandId()));

switch (pak.getCommandId()) {

// Bind transmitter response. Check it's status for success...

case SMPPPacket.BIND_TRANSMITTER_RESP:

if (pak.getCommandStatus() != 0) {

logger.info("Error binding to the SMSC. Error = "

Stage 1er année GTR 45


+ pak.getCommandStatus());

synchronized (blocker) {

blocker.notify();

} else {

logger.info("Successfully bound to SMSC \""

+ ((BindTransmitterResp) pak).getSystemId()

+ "\".\n\tSubmitting message...");

send(myConnection);

break;

// Submit message response...

case SMPPPacket.SUBMIT_SM_RESP:

if (pak.getCommandStatus() != 0) {

logger.info("Message was not submitted. Error code: "

+ pak.getCommandStatus());

} else {

logger.info("Message Submitted! Id = "

+ ((SubmitSMResp) pak).getMessageId());

try {

// Unbind. The Connection's listener thread will stop itself..

myConnection.unbind();

} catch (IOException x) {

logger.info("IO exception" + x.toString());

synchronized (blocker) {

blocker.notify();

Stage 1er année GTR 46


}

break;

// Unbind response..

case SMPPPacket.UNBIND_RESP:

logger.info("Unbound.");

synchronized (blocker) {

blocker.notify();

break;

default:

logger

.info("Unknown response received! Id = "

+ pak.getCommandId());

private void receiverExit(Connection myConnection, ReceiverExitEvent ev) {

if (ev.getReason() != ReceiverExitEvent.EXCEPTION) {

if (ev.getReason() == ReceiverExitEvent.BIND_TIMEOUT) {

logger.info("Bind timed out waiting for response.");

logger.info("Receiver thread has exited normally.");

} else {

Throwable t = ev.getException();

logger.info("Receiver thread died due to exception:");

logger.warn("Exception", t);

synchronized (blocker) {

Stage 1er année GTR 47


blocker.notify();

// Send a short message to the SMSC

public void send(Connection myConnection) {

try {

Address destination = new Address(GSMConstants.GSM_TON_UNKNOWN,

GSMConstants.GSM_NPI_UNKNOWN, "3456789");

SubmitSM sm = (SubmitSM) myConnection.newInstance(SMPPPacket.SUBMIT_SM);

sm.setDestination(destination);

sm.setMessageText("message");

myConnection.sendRequest(sm);

} catch (IOException x) {

logger.warn("I/O Exception", x);

} catch (SMPPException x) {

logger.warn("SMPP Exception", x);

public void execute() throws BuildException {

Stage 1er année GTR 48


try {

myConnection = new Connection(hostName, port, true);

// Need to add myself to the list of listeners for this connection

myConnection.addObserver(this);

// Automatically respond to ENQUIRE_LINK requests from the SMSC

myConnection.autoAckLink(true);

// Bind to the SMSC (as a transmitter)

logger.info("Binding to the SMSC..");

myConnection.bind(

Connection.TRANSMITTER,

systemID,

password,

systemType,

sourceTON,

sourceNPI,

sourceAddress);

synchronized (blocker) {

blocker.wait();

} catch (Exception x) {

throw new BuildException("Exception running example: " +

x.getMessage(), x);

public ie.omk.smpp.Connection setMessageText(String string) {

// TODO Auto-generated method stub

Stage 1er année GTR 49


return null;

9. WEBOGRAPHIE :

http://java.developpez.com/

http://codes-sources.commentcamarche.net/

https://openclassrooms.com/courses?q=java

Stage 1er année GTR 50