0% ont trouvé ce document utile (0 vote)
175 vues61 pages

Rapport de Stage TGCC

Ce rapport de stage présente l'expérience de Filali Anas au sein de l'entreprise TGCC, où il a effectué un stage de six semaines dans le service informatique. Le rapport détaille les objectifs du stage, la présentation de l'organisme d'accueil, ainsi que les étapes d'analyse et de conception d'un projet de développement d'application utilisant des technologies telles que Java EE, Hibernate et Spring. Enfin, il aborde la réalisation du projet, y compris la création de la base de données et les outils utilisés.

Transféré par

Meriem El Kotbi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
175 vues61 pages

Rapport de Stage TGCC

Ce rapport de stage présente l'expérience de Filali Anas au sein de l'entreprise TGCC, où il a effectué un stage de six semaines dans le service informatique. Le rapport détaille les objectifs du stage, la présentation de l'organisme d'accueil, ainsi que les étapes d'analyse et de conception d'un projet de développement d'application utilisant des technologies telles que Java EE, Hibernate et Spring. Enfin, il aborde la réalisation du projet, y compris la création de la base de données et les outils utilisés.

Transféré par

Meriem El Kotbi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 61

RAPPORT DE STAGE

REALISE PAR : Filali Anas

Presenter par:AnasFilali

2022 | AUOT EMSI CASABLANCA


2022 | AUOT EMSI CASABLANCA

REMERCIEMENTS
Je tiens à remercier toutes les personnes qui ont contribué à
la réussite de mon stage et qui m'ont aidé lors de la rédaction
de ce rapport.

Tout d'abord, je tiens à remercier mes parents et Mme


Bochra Hedani qui m'ont beaucoup aidé dans ma recherche de
stage et m'ont permis de postuler dans cette entreprise.
Ils m'ont permis de cibler mes candidatures, et de trouver ce
stage qui était en totale adéquation avec mes attentes.

Je remercie chaleureusement mes maîtres de stage, Mr


Amine Radouani et Mr Abderrahim BARAKA pour le temps
passé ensemble et le partage de leur expertise au quotidien.
Grâce aussi à leur confiance, j'ai pu accomplir pleinement mes
missions. Ils m'ont été d'une grande aide dans les moments les
plus délicats.

Je tiens à remercier toute l'équipe de TGCC pour leur


accueil, leur esprit d'équipe et en particulier Monsieur Ghazi
Lghazouani, Responsable des Systèmes d'Information de
TGCC, et plus particulièrement les HR ,Monsieur Mohamed
Amine Azaf et Monsieur Mohamed Rayadi, pour leur accueil
chaleureux.

Enfin, je tiens à remercier mon encadrant, Mme Safae


Cherdal pour ses conseils avisés lors de la rédaction de ce
rapport de stage.

3
INTRODUCTION

Du 18/07/2022 au 28/08/2020 est la période pendant laquelle j'ai


effectué mon stage professionnel au sein de l'entreprise TGCC plus
précisément au service informatique.

Plus largement, ce stage a été pour moi l'occasion de me


familiariser avec un environnement d'entreprise. Durant la
première période du stage je me suis familiarisé avec java jee et
bien d'autres technologies.

Ce stage de 6 semaines me permettra d'avoir des connaissances en


programmation et d'apprendre des méthodes implémentées au
sein du département SI Tgcc.

Le but de ce rapport est de faire une présentation pour atteindre


les objectifs énoncés en quatre parties. La première sera consacrée
à la présentation de l'organisme d'accueil. Dans la deuxième partie,
nous nous concentrerons sur la présentation du projet. Dans une
troisième partie, nous décrirons les étapes d'analyse et de
conception de l'application, en utilisant le langage UML, afin de
montrer les différentes interactions des acteurs avec le système.
Dans la quatrième et dernière partie, nous nous attarderons sur la
réalisation et la mise en œuvre afin de décrire les étapes qui ont été
suivies pour le développement du futur système d'information.

4
SOMMAIRE

Table des matières

Remerciement.................................3

Introduction.....................................4

Table de matieres ..........................5,6

Chapitre 1 : contexte général du stage..7

I. Organisme d’accueil

I.1. Présentation...............................8

I.2. Organigramme...........................10

II. Présentation du projet

II.1. Etude de l’existant...................11

II.2. Problématique & solution............11

II.3. Les objectifs du stage ...............12

5
Table des matières
· Chapitre 2 : analyse & modélisation .13

I. UML .............................................18

I.1. Représentation de l’UML .............19

I.2. Définition des diagrammes utilisés ..

II. Modélisation du projet ..................14

· Chapitre 3 : étude technique.............17

· Chapitre 4 : réalisation ....................21

· Conclusion & perspectives ..............58

Webographie ...................................60

6
· Chapitre 1 : contexte général du stage

7
· Chapitre 1 : contexte général du stage I. Organisme d’accueil

1. Présentation

Avec plus de 8 500 collaborateurs au Maroc et en Afrique subsaharienne et


disposant du plus grand parc d’engins de construction au Maroc, TGCC
s’impose aujourd’hui en tant que leader national et, compte à son actif plus de
1 000 projets et d’ouvrages d’envergures réalisés.
Les ressources humaines constituent la richesse principale et le capital de
TGCC. Grâce à leur capacité à entreprendre et à relever les défis, et leur sens
de l’engagement et des responsabilités au service des clients, ses collaborateurs
permettent à l’entreprise de se développer de manière pérenne.
TGCC s’est engagée dans une dynamique de qualité et de sécurité qui
s’inscrit dans le cadre de la continuité et du développement durable.
1991: Création de TGCC par Mohammed BOUZOUBAA. 530 collaborateurs.
1999: Adjudication du premier grand marché : Stade de Fès.
2002: TGCC décroche la classe 1 (Classification Ministère de l'Équipement).
2006: Réalisation de 3 aérogares : Marrakech Essaouira Mogador, Tanger .
2007: Chiffre d'affaires annuel de plus 500 millions de dirhams.
2010: Chiffre d'affaires annuel de plus de 1 milliard de dirhams.
2011: TGCC fête ses 20 ans. 8000 collaborateurs.
2013: Création de la filiale T2G au Gabon.
2014: Création de la filiale TGCC Côte d’Ivoire.
2015: Création de TGCC Immobilier.
2016: Chiffre d'affaires annuel de plus de 2 milliards de dirhams.
2017: Lancement de la Fondation TGCC pour l'art et la culture.
2018: Construction de la tour Mohammed VI
2020: Certification Management du Risque Sanitaire

8
· Chapitre 1 : contexte général du stage I. Organisme d’accueil

Figure 1 : informations générales

9
· Chapitre 1 : contexte général du stage I. Organisme d’accueil

2. Organigramme

Figure 2 :Organigram

10
· Chapitre 1 : contexte général du stage II. Présentation du projet
I. Etude de l’existant

II.2. Problématique & solution


Ce est mon premièr donc j'en ai profité pour apprendre mais pas
pour proposer des solutions ,donc mon superviseur m'a donné ce
projet qui va m'aider à apprendre le principe de base afin de pouvoir
développer des solutions dans le futur.

Développer un CRUD simple, (Créer Lire Update Delete) en


utilisant JSF2 Primefaces, Hibernate4, Spring4 et MySQL avec
l’architecture Maven3.
Cette application vous permet de gérer la base de données des
utilisteurs tels que ajouter de nouveaux users et mise à jour /
supprimer info user.
1. JSF peut être utilisé pour mettre en oeuvre la couche de
présentation.
2. Hibernate peut être utilisé dans la couche de logique métier
pour gérer les objets d'affaires, la gestion des ressources.
3. Spring pour l’inversion de contrôle.
4. Maven : Apache Maven est un outil de gestion et
d'automatisation de production des projets logiciels Java en
général et Java EE en particulier.

11
· Chapitre 1 : contexte général du stage II. Présentation du proje

II.3. Les objectifs du stage

acquérir des responsabilités


apprendre à connaitre le monde du travail
développer son réseau professionnel
être autonome, rigoureux
acquérir de l’expérience sur le terrain
développer d’autres compétences
s’adapter aux exigences du monde de l’entreprise
gagner en confiance, en maturité, et renforce ses
aptitudes

Acquérir la maitrise la techenologie utilise par l


entreprise prend le temps du stage .
Implementer cette technologie en realisent un
projet.

12
· Chapitre 2 : analyse & modélisation

13
· Chapitre 2 : analyse & modélisation · Uml /Merise

I.1. Représentation de l’UML

Le langage UML (Unified Modeling Language, ou langage de modélisation unifié) a été pensé pour

être un langage de modélisation visuelle commun, et riche sémantiquement et syntaxiquement. Il

est destiné à l'architecture, la conception et la mise en œuvre de systèmes logiciels complexes par

leur structure aussi bien que leur comportement. L'UML a des applications qui vont au-delà du

développement logiciel, notamment pour les flux de processus dans l'industrie.

Il ressemble aux plans utilisés dans d'autres domaines et se compose de différents types de

diagrammes. Dans l'ensemble, les diagrammes UML décrivent la limite, la structure et le

comportement du système et des objets qui s'y trouvent.

L'UML n'est pas un langage de programmation, mais il existe des outils qui peuvent être utilisés

pour générer du code en plusieurs langages à partir de diagrammes UML. L'UML a une relation

directe avec l'analyse et la conception orientées objet.

figure3:uml

14
· Chapitre 2 : analyse & modélisation · Uml /Merise

I.2. Définition des diagrammes utilisés


le diagrammes de cas d'utilisation:

Les diagrammes de cas d'utilisation décrivent les fonctions générales et la portée d'un système.
Ces diagrammes identifient également les interactions entre le système et ses acteurs. Les cas
d'utilisation et les acteurs dans les diagrammes de cas d'utilisation décrivent ce que le système
fait et comment les acteurs l'utilisent, mais ne montrent pas comment le système fonctionne en
interne.

Le diagramme de classes:
c' est un schéma utilisé en génie logiciel pour présenter les classes et les interfaces des
systèmes ainsi que leurs relations. Ce diagramme fait partie de la partie statique d'UML,
ne s'intéressant pas aux aspects temporels et dynamiques.

II. Modélisation du projet


Figure4: Diagrammes de cas d'utilisation:
Acteur peut realiser
quatre opérations de
base de la gestion d
utilisateur(Manage
user) :
Create (créer)
Read ou Retrieve (lire)
Update (mettre à jour)
Delete ou Destroy
(supprimer)

15
Figure 5 Un
: diagramme de class

16
· Chapitre 3 : étude technique

17
· Chapitre 3 : étude technique

L’environnement de développement:
L’objectif de ce chapitre est la mise en place de l’environnement de développement pour
réaliser les développements d’applications Java EE pour le Web.

Pour cela, j ai au moins besoin :

du kit Java de développement

d’un environnement de développement : par exemple Netbeans

d’un conteneur de Servlet Java EE

Téléchargement des outils:


La liste des outils requis est :

Java 8 JDK
Le kit de développement Java 8
https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

NetBeans IDE for Enterprise Java Developers:

NetBeans est un environnement de développement intégré, placé en open source par Sun en juin 2000
sous licence CDDL et GPLv2. En plus de Java, NetBeans permet la prise en charge native de divers langages tels
\ le C, le C++, le JavaScript, le XML, le Groovy, le PHP et le HTML, ou d'autres par l'ajout de greffons.

Le kit de développement Java est un ensemble de bibliothèques permettant de compiler et d’exécuter des projets informatiques développés en
Java. L’installation du kit de développement Java est par conséquent un prérequis à l’installation de l’IDE NetBeans.
a. Les éléments de la plateforme : JVM, JRE, JDK
La plateforme d’exécution java se compose de plusieurs éléments : la JVM (Java Virtual Machine), contenue dans la JRE qui constitue le Java
Runtime Environment, c’est-à-dire un environnement d’exécution.
Il n’est pas possible de développer une nouvelle application à partir d’un JRE, il faudra pour cela se doter d’un JDK, Java Development Kit, contenant
l’environnement et les outils permettant la production d’une nouvelle application.
Il faudra donc choisir la bonne distribution

Tomcat:
Le conteneur de servlet Tomcat
https://tomcat.apache.org/download-90.cgi
Pour Windows, téléchargez le fichier zip dans la section Core. Pour MacOS ou Linux, téléchargez le fichier tar.gz dans la section Core.

Nous verrons bientôt que les applications Java pour le Web ne sont pas des programmes indépendants (standalone).
Les applications Java EE sont déployées et exécutées dans ce que l’on appelle un serveur d’application qui fournit l’environnement
d’exécution nécessaire.
Tomcat n’est pas à proprement parlé un serveur d’application car il n’offre qu’un nombre de services limités par rapport à un serveur
d’application normal.
Néanmoins, il est très souvent utilisé en production par les entreprise pour réaliser des application Web en Java.

Création d’un projet Java simple avec Maven:

Quoi sert Maven ?


Maven est un outil permettant d'automatiser la gestion de projets Java.
Il offre entre autres les fonctionalités suivantes :

Compilation et déploiement des applications Java (JAR, WAR)


Gestion des librairies requises par l'application
Exécution des tests unitaires
Génération des documentations du projet (site web) 18
Intégration dans différents IDE (Eclipse, NetBeans).
· Chapitre 3 : étude technique
Téléchargement
Maven peut être récupéré sous forme d'archive à l'adresse suivante : http://maven.apache.org

Installation
Une fois l'archive décompressée, il suffit de positionner la variable d'environnement MAVEN_HOME.
Sa valeur est le répertoire d'installation de Maven. Si ce n'est déjà fait, la variable JAVA_HOME doit également être
positionnée sur le répertoire d'installation du jdk.

Exécution
Maven se lance en ligne de commande avec la commande "maven" suivie de paramètres sous la forme :

maven nom_plugin:goal

Les différents plugins existants sont décrits dans la partie plugins.

phpMyAdmin est un logiciel libre écrit en PHP qui a pour mission de s’occuper de
l’administration d’un serveur de base de données MySQL ou MariaDB. Vous pouvez
utiliser phpMyAdmin pour réaliser la plupart des tâches d’administration, ceci
incluant la création de base de données, l’exécution de demandes, et l’ajout de
comptes utilisateur.

Hibernate est un framework open source gérant la persistance des objets en base de données
relationnelle.

Hibernate est adaptable en termes d'architecture, il peut donc être utilisé aussi bien dans un
développement client lourd, que dans un environnement web léger de type Apache Tomcat ou dans
un environnement Java EE complet : WebSphere, JBoss Application Server et Oracle WebLogic
Hibernate

Server.

Hibernate apporte une solution aux problèmes d'adaptation entre le paradigme objet et les SGBD en
remplaçant les accès à la base de données par des appels à des méthodes objet de haut niveau.

PrimeFaces is an open-source user interface (UI) component library for


JavaServer Faces-based applications,
created by Turkish company PrimeTek Informatics.

19
Le framework Spring 4 est pour developper des applications Java plus robustes et plus efficaces.
Le Spring offre plusieurs fonctionnalités, à savoir la gestion transactionnelle, celle des exceptions Java DataBase Connectivity et
un framework MVC. Ce dernier est d’ailleurs très puissant, puisqu’il donne la possibilité d’ajouter de multiples fonctionnalités
Java.

20
· Chapitre 4 : réalisation

21
· Chapitre 4 : réalisation

Print screen de notre projet

Figure 6 : Print screen de notre projet 1

22
· Chapitre 4 : réalisation

Figure7: Print screen de notre projet21

15

23
· Chapitre 4 : réalisation ∞

· Chapitre 4 : réalisation

I.Création de la base de données


CREATE DATABASE `userapp`;
-- Structure de la table `user`
CREATE TABLE IF NOT EXISTS ` userapp `.`user`(
`id` int(11) not null auto_increment primary key,
`name` nvarchar(20) ,
`surname` nvarchar(20)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Contenu de la table `user`
INSERT INTO `user` (`id`, `name`, `surname`) VALUES
(1, 'Anas', 'FILALI'),
(17, 'Amin', 'Ben');
-- Index pour la table `user`
ALTER TABLE `user`
ADD PRIMARY KEY (`id`)
-- AUTO_INCREMENT pour la table `user`
ALTER TABLE `user`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,
AUTO_INCREMENT=32;
Figure8: Database Figure:

Figure:

24

Figure:
· Chapitre 4 : réalisation ∞

II. Structure générale

Figure9:projetct form

III.Création d'un projet maven sous netbeans

Figure10:new project

25
· Chapitre 4 : réalisation ∞

Figuree11: maven webapp

III. Surcharge du fichier pom.xml maven repository

1. Maven
Maven est un outil de construction de projets (build) open source développé par la fondation
Apache.
Il permet notamment :
 d'automatiser certaines tâches : compilation, tests unitaires et déploiement des
applications qui composent le projet
 de gérer des dépendances vis-à-vis des bibliothèques nécessaires au projet
 de générer des documentations concernant le projet

26
· Chapitre 4 : réalisation ∞

Pour construire un logiciel cible, Maven télécharge et installe tout ce dont il a besoin pour
accomplir cette tâche. Ces besoins sont principalement:
 Les librairies dont dépend l’application: déclarées dans la section
<dependencies></dependencies> du fichier pom.xml du projet.
 Les plugin Maven qui accomplissent différentes tâches nécessaires à la construction
de la cible : déclarés dans la section <plugins></plugins> du fichier pom.xml du
projet.
Tous les artifacts gérés par Maven sont identifiés par 4 informations :
 groupId : Définit l'organisation ou groupe qui est à l'origine du projet. Il est formulé
sous la forme d'un package Java (org.archetypejs par exemple)
 artifactId : Définit le nom unique dans le groupe pour le projet.
 version : Définit la version du projet. Les numéros de version sont souvent utilisés
pour des comparaisons et des mises à jour.
 type : Type de projet. On trouvera le plus souvent : jar, war, maven-plugin, pom...

2. POM
POM signifie "Project Object Model". C'est une représentation XML d'un projet Maven contenu
dans un fichier nommé pom.xml.
Les projets Maven, les dépendances, les builds, les artefacts : tous sont des objets qu'il va
falloir modéliser et décrire. Ces objets sont décrits dans un fichier XML appelé Modèle
Objet de Projet. Le POM indique à Maven quel type de projet il va devoir traiter et comment
il va devoir s'adapter pour transformer les sources et produire le résultat attendu. Ainsi,
comme le fichier web.xml décrit, configure et personnalise une application web Java, c'est
la présence d'un fichier pom.xml qui définit un projet Maven. Il s'agit d'une déclaration
décrivant un projet Maven; c'est le “plan” abstrait que Maven doit comprendre et suivre
pour construire votre projet.

3. Rapide vue d'ensemble


Ceci est une liste des éléments directement sous l'élément de projet POM. Notez
que modelVersion contient 4.0.0. C'est actuellement la seule version de POM supportée
pour Maven 2 et 3, et elle est toujours requise.

27
· Chapitre 4 : réalisation ∞

4. Code pom.xml de notre projet


Figure12:Ajouter Maven Repository : https://mvnrepository.com

28
· Chapitre 4 : réalisation ∞

Figure 13: dependency

29
· Chapitre 4 : réalisation ∞

Code complet pom.xml de notre projet

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-
4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.app</groupId>
<artifactId>UserManagement</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>UserManagement</name>

<dependencies>
<!-- JSF Dependencies -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>

<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>

30
· Chapitre 4 : réalisation ∞

<version>2.1</version>
</dependency>
<dependency>
<groupId>com.sun.el</groupId>
<artifactId>el-ri</artifactId>
<version>1.0</version>
</dependency>
<!-- Spring and Transactions -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- ORM Persisstence Spring Hibernate-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>

31
· Chapitre 4 : réalisation ∞

<version>1.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.9.Final</version>
</dependency>
<!-- Database - mysql -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<properties>
<spring.version>4.3.13.RELEASE</spring.version>

</properties>
</project>

5. Téléchargement des dépendences du fichier pom.xml

Figure14:clean and build

32
· Chapitre 4 : réalisation ∞

Figure:

IV. Classe (Entity) User


Figure15:model

package com.app.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;

33
· Chapitre 4 : réalisation ∞

@Entity
@Table(name = "user", catalog = "userapp")
public class User {

private Integer id;


private String name;
private String surname;

public User() {
}

public User(String name, String surname) {


this.name = name;
this.surname = surname;
}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name", length = 20)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;

34
· Chapitre 4 : réalisation ∞

}
@Column(name = "surname", length = 20)
public String getSurname() {
return this.surname;

} }
public void setSurname(String surname) {
this.surname = surname;
}

IV. la couche Model (Persistence des données) : DAO : Data


Access Object
Figure16: Dao

1. UserDao.java
package com.app.dao;

import java.util.List;
import com.app.model.User;

public interface UserDao {

35
· Chapitre 4 : réalisation ∞

void persistUser(User user);


User findUserById(int id);
void updateUser(User user);
void deleteUser(User user);
public List<User> listUsers();
}

2. UserDaoImpl.java

package com.app.dao;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.app.dao.UserDao;
import com.app.model.User;
import org.hibernate.Session;
import java.util.List;

@Repository("userDao")
public class UserDaoImpl implements UserDao{

@Autowired
private SessionFactory sessionFactory;
public void persistUser(User user) {
sessionFactory.getCurrentSession().save(user);
}

public User findUserById(int id) {


return (User) sessionFactory.getCurrentSession().get(User.class, id);
}

36
· Chapitre 4 : réalisation ∞

public void updateUser(User user) {


sessionFactory.getCurrentSession().update(user);
}
public void deleteUser(User user) {
sessionFactory.getCurrentSession().delete(user);
}

@SuppressWarnings("unchecked")
@Override
public List<User> listUsers() {
Session session = this.sessionFactory.getCurrentSession();
List<User> userList = session.createQuery("from User").list();
for(User p : userList){

}
return userList;
}
}

V. Spring Service (Spring Business Transaction)

Figure 17:sprinng service

1. UserService.java

37
· Chapitre 4 : réalisation ∞

package com.app.service;

import com.app.model.User;
import java.util.List;

public interface UserService {


void persistUser(User user);
User findUserById(int id);
void updateUser(User user);
void deleteUser(User user);
public List<User> listUsers();
}

2. UserServiceImpl.java
package com.app.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.app.dao.UserDao;
import com.app.model.User;
import com.app.service.UserService;
import java.util.List;

@Service("userService")
public class UserServiceImpl implements UserService{

@Autowired
UserDao userDao;

@Transactional

38
· Chapitre 4 : réalisation ∞

public void persistUser(User user) {


userDao.persistUser(user);
}
@Transactional
public User findUserById(int id) {
return userDao.findUserById(id);
}
@Transactional
public void updateUser(User user) {
userDao.updateUser(user);
}
@Transactional
public void deleteUser(User user) {
userDao.deleteUser(user);
}

@Override
@Transactional
public List<User> listUsers() {
return this.userDao.listUsers();
}
}

VI. Le contrôlleur Manager Bean : UserBean

39
· Chapitre 4 : réalisation ∞

Figure18: beans

package com.app.beans;

import com.sun.faces.util.MessageUtils;
import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import com.app.model.User;
import com.app.service.UserService;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.component.html.HtmlCommandButton;
import javax.faces.component.html.HtmlForm;

@ManagedBean
@SessionScoped
public class UserBean implements Serializable {

@ManagedProperty(value = "#{userService}")

40
· Chapitre 4 : réalisation ∞

UserService userService;

private String name;


private String surname;

public List<User> users = new ArrayList<User>();

public User userCtl = new User();

HtmlForm formulaire;
HtmlCommandButton maj;

public void setUserService(UserService userService) {


this.userService = userService;
}
public UserService getUserService() {
return userService;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public List<User> getUsers() {
return users;

41
· Chapitre 4 : réalisation ∞

}
public void setUsers(List<User> users) {
this.users = users;
}
public User getUserCtl() {
return userCtl;
}
public void setUserCtl(User userCtl) {
this.userCtl = userCtl;
}

// method CRUD
public String persistUser() {
userService.persistUser(this.userCtl);
return "index";
}
public List<User> listUsers() {
return this.userService.listUsers();
}
public void deleteUser(int id) {
User user = (User) userService.findUserById(id);
getUserService().deleteUser(user);
}

public String editUser(User userCtl) {


this.userCtl = userCtl;
return "update";
}
public String updateUser() {

getUserService().updateUser(userCtl);
return "index";

42
· Chapitre 4 : réalisation ∞

}
public String showUser(User userCtl) {

this.userCtl = userCtl;

return "show";
}
}

VII. Configuration de l’application

Figure19:app configuration

1. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">

<display-name>UserManagement</display-name>

43
· Chapitre 4 : réalisation ∞

<!-- Spring Context Configuration' s Path definition -->


<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>

<!-- The Bootstrap listener to start up and shut down Spring's root WebApplicationContext.
It is registered to Servlet Container -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>

<!-- Change to "Production" when you are ready to deploy -->


<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>

<!-- Welcome page -->


<welcome-file-list>

44
· Chapitre 4 : réalisation ∞

<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

<!-- JSF mapping -->


<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<!-- Map these files with JSF -->


<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

</web-app>

2. faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"

45
· Chapitre 4 : réalisation ∞

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"

version="2.0">

<!-- JSF and Spring are integrated -->


<application>
<el-resolver>
org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
</application>

</faces-config>

3. applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd

46
· Chapitre 4 : réalisation ∞

http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.2.xsd">

<context:component-scan base-package="com.app.*" />

<tx:annotation-driven/>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-


method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/userapp" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="annotatedClasses">
<list>
<value>com.app.model.User</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop
key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>

47
· Chapitre 4 : réalisation ∞

</props>
</property>
</bean>

<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory">
</bean>
</beans>

VIII. la couche Vue (Présentation) : Les pages web


Figure20:Vue

1. index.xhtml & delete function

Figure21::html pages

48
· Chapitre 4 : réalisation ∞

Figure22:delet.html

<?xml version="1.0" encoding="windows-1252"?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">

<h:head>
<title> USER MANAGEMENT</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

</h:head>
<h:body>
<div class="container">
<h1 align="center">USER MANAGEMENT</h1>

49
· Chapitre 4 : réalisation ∞

<h:form>

<h3>Persons List</h3>

<c:if test="${!empty userBean.listUsers()}">


<table class="table table-bordered">
<tr>
<th width="10%">User ID</th>
<th width="30%">User Name</th>
<th width="30%">User Surname</th>
<th width="30%">Actions</th>
</tr>
<ui:repeat value="${userBean.listUsers()}" var="u">
<tr>
<td>${u.id}</td>
<td>${u.name}</td>
<td>${u.surname}</td>

<td colspan="2"><h:commandButton class="btn btn-primary"


action="#{userBean.showUser(u)}" value="Show"
/>&nbsp;&nbsp;&nbsp;
<h:commandButton class="btn btn-success"
action="#{userBean.editUser(u)}" value="Edit"
/>&nbsp;&nbsp;&nbsp;
<h:commandButton class="btn btn-danger"

50
· Chapitre 4 : réalisation ∞

action="#{userBean.deleteUser(u.id)}"
value="Delete" onclick="return confirm('Are you sure to delete
user?')"></h:commandButton> &nbsp;&nbsp;&nbsp;

</td>
</tr>
</ui:repeat>
</table>
</c:if>
<h:outputLink class="btn btn-warning" value="create.xhtml" >Add
USER</h:outputLink>
</h:form>
</div>
</h:body>
</html>

2. show.xhtml
Figure23:show.html

<?xml version="1.0" encoding="windows-1252"?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

51
· Chapitre 4 : réalisation ∞

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"

xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<title>USER MANAGEMENT</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</h:head>
<h:body>
<div class="container">
<h1 align="center">USER MANAGEMENT</h1>
<h3 >Show USER</h3>
<table class="table table-bordered">
<tr><td>Name :</td><td>#{userBean.userCtl.name}</td></tr>
<tr><td>Surame :</td><td>#{userBean.userCtl.surname}</td></tr>

<tr><td colspan="2"><h:outputLink class="btn btn-success" value="index.xhtml">List of


users</h:outputLink></td></tr>
</table>
</div>

</h:body>
</html>

52
· Chapitre 4 : réalisation ∞

3. update.xhtml
Figure24:Mise a jour

<?xml version="1.0" encoding="windows-1252"?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" >
<head>
<title> USER MANAGEMENT</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h1 align="center">USER MANAGEMENT</h1>

<h:form>

53
· Chapitre 4 : réalisation

<h3 >Update USER</h3>


<table class="table table-bordered">
<tr>

<td width="10%">User Name</td>


<td ><h:inputText value="#{userBean.userCtl.name}"
class="form-control"/></td>
</tr>
<tr>
<td>
User Surname
</td>
<td>
<h:inputText value="#{userBean.userCtl.surname}" class="form-control"/>
</td>
</tr>
<tr>
<td colspan="2"><h:commandButton value="Update User"
action="#{userBean.updateUser()}" class="btn btn-primary" />&nbsp;&nbsp;&nbsp;
<h:outputLink class="btn btn-success" value="index.xhtml">List of
users</h:outputLink></td>
</tr>

</table> </h:form></div>
</body>
</html>

4. create.xhtml

54
· Chapitre 4 : réalisation
Figure25:: create.html

Figure26:persomms List:

<?xml version="1.0" encoding="windows-1252"?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" >
<head>
<title> USER MANAGEMENT</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
23

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>

55
· Chapitre 4 : réalisation ∞

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js">
</script>
</head>
<body>
<div class="container">
<h1 align="center">USER MANAGEMENT</h1>

<h:form>
<h3>Create USER</h3>
<table class="table table-bordered">
<tr>

<td width="10%">User Name</td>


<td ><h:inputText value="#{userBean.userCtl.name}"
class="form-control"/></td>
</tr>
<tr>
<td>
User Surname
</td>
<td>
<h:inputText value="#{userBean.userCtl.surname}" class="form-control"/>
</td>
</tr>
<tr>
<td colspan="2"><h:commandButton value="Add User"
action="#{userBean.persistUser()}" class="btn btn-primary" /> &nbsp;&nbsp;&nbsp;
<h:outputLink class="btn btn-success" value="index.xhtml">List of
users</h:outputLink></td>
</tr>

56
· Chapitre 4 : réalisation ∞

</table> </h:form></div>
</body>
</html>

57
Conclusion & perspectives
Je tire un bilan très positif de cette étape qui a été une
expérience très enrichissante tant sur le plan professionnel que
personnel.

Mon stage m'a beaucoup intéressé, j'ai pu découvrir les


différents postes dans l'entreprise et avoir un aperçu de son
fonctionnement. Il m'a permis de réaliser avec les différents
services et d'avoir une approche réelle du monde du travail.
J'ai pu faire le rapprochement entre ce que j'avais appris en
cours et ce qui se passe vraiment dans l'entreprise, ce qui n'a pas
toujours été facile car chaque entreprise est un cas particulier.
De plus, j'ai pu acquérir diverses compétences de conception et
de programmation et surtout découvrir le métier que j'ai choisi
réelement.

Concernant le projet, j'ai fait le choix entre faire un projet


avancé avec une technologie que je maîtrise et qui n'est pas
utilisée par l'entreprise ou découvrir la technologie appliquée par
Tgcc, et l'appliquer dans un projet de base qui sera comme une
introduction à cette technologie donc j'ai choisi le deuxième choix.

Après la réalisation de ce projet j'ai pu comprendre


l'approche utilisée par l'entreprise et j'ai commencé à imaginer
des solutions qui pourraient être appliquées pour automatiser les
processus de gestion au sein de TGCC.

Example: Automatisation de la demande Trc.

58
58
Figure27:Demande de la prologation de contact de trc

59
·
Webographie:

https://www.primefaces.org/showcase/ui/data/datatable/
crud.xhtml?jfwid=6f75d

https://download.jar-
download.com/cache_jars/org.primefaces/primefaces/7.0/jar
_files.zip

https://archive.apache.org/dist/tomee/tomee-1.7.2/apache-
tomee-1.7.2-webprofile.tar.gz

https://dlcdn.apache.org/netbeans/netbeans-
installers/14/Apache-NetBeans-14-bin-windows-x64.exe

https://dlcdn.apache.org/maven/maven-3/3.8.6/source/apache-maven-3.8.6-
src.zip

60
fin

Vous aimerez peut-être aussi