Partie 1_Matriser les bases PHP v0555555555555.pptx
Java Entreprise Edition
1. Java Entreprise Edition
Standard de développement d'applications d'entreprises
multi-niveaux, basées sur des composants
Sabri Bouchlema
Elève ingénieur en génie logiciel
Jcertif Student Ambassador
7. Avantages :
+ Développement rapide
Désavantages :
- Application monolithique
- Mises à jour et maintenance du code plus difficiles
- Code difficilement réutilisable
9. Avantages :
+ Centralisation du code et des ressources
Désavantages :
- Application serveur monolithique
- Logique métier est répartie entre l'application serveur et le client
10. Architecture 3 tiers
Fin des années 80, architecture 3 tiers (RPC)
Primergy
Requètes
SQL
RPC
RPC
Base
de
Données
Présentation _ Métier _ Données
11. Architecture 3 tiers
Les années 90, architecture 3 tiers (Objets)
Primergy objet
objet objet
objet
RM
I / CORBA
RM
I / CORBA
Requètes SQL
Base
de
Données
12. Avantages :
+ Séparation forte entre les 3 niveaux
Désavantages :
- Protocole d’échange propriétaire
- Difficultés de maintenance: toute modification entraîne une mise à
niveau de chaque poste client.
13. Architecture Internet (N-tiers)
Les années 90, architecture (Internet)
Primergy
Internet
HTTP HTTP
SQL
Serveur Web + "CGI"
Navigateur
Base
de
Données
14. Avantages :
+ Pas d’installation sur les postes clients (hormis le navigateur lui-
même)
+ Chaque niveau peut être managé, dimensionné, distribué
+ Mises à jour et maintenance facilitées en minimisant l'impact sur les autres
couches
+ Extensibilité : ajout de nouvelles fonctionnalités simplifié
+ Possibilité de clients lourds et de clients légers
17. HTTP
• Le HyperText Transfer Protocol, plus connu sous l'abréviation HTTP,
littéralement le « protocole de transfert hypertexte », est un
protocole de communication client-serveur développé pour le
World Wide Web. Il est utilisé pour échanger toute sorte de données
entre client HTTP et serveur HTTP.
18. ✓ Le navigateur effectue une requête HTTP
✓ Le serveur traite la requête puis envoie une réponse HTTP
19. Requête HTTP
• Une requête HTTP est un ensemble de lignes envoyé au serveur par
le navigateur. Elle comprend :
✓ Une ligne de requête: c'est une ligne précisant le type de
document demandé, la méthode qui doit être appliquée, et la
version du protocole utilisée.
✓ Les champs d'en-tête de la requête: il s'agit d'un ensemble de
lignes facultatives permettant de donner des informations
supplémentaires sur la requête et/ou le client.
✓ Le corps de la requête: c'est un ensemble de lignes optionnelles
permettant par exemple un envoi de données par une
commande POST lors de l'envoi de données au serveur par un
formulaire.
20. Les méthodes
✓ GET: c'est la méthode la plus courante pour demander une
ressource. Une requête GET est sans effet sur la ressource, il doit
être possible de répéter la requête sans effet.
✓ HEAD: cette méthode ne demande que des informations sur la
ressource, sans demander la ressource elle-même.
✓ POST: cette méthode doit être utilisée lorsqu'une requête modifie la
ressource.
✓ PUT: cette méthode permet d'ajouter une ressource sur le serveur.
✓ DELETE: cette méthode permet de supprimer une ressource du
serveur.
21. Réponse HTTP
• Les réponses ont, elles aussi, toujours la même syntaxe :
✓ Une ligne de status: c'est une ligne précisant la version HTTP du
serveur , Code-réponse (le code d’erreur retourné par exemple
200, 403, 404, 500) et Texte-réponse (le texte associé à l'erreur
respectivement pour les exemples précédents : "OK",
"FORBIDDEN", "NOT FOUND", "INTERNAL ERROR").
✓ Les champs d'en-tête de la requête: Les en-têtes sont
nombreux aussi exemple :
✓ Date de génération de la réponse.
✓ le modèle du serveur HTTP.
✓ Corps: le Corps de réponse contient le contenu du fichier, le
HTML d'une page par exemple.
22. Site web statique
• Un site statique est un site constitué de pages créées en HTML. Il s’
agit d’un contenu fixe.
• Ainsi lorsqu’un ordinateur (par l’usage d’un navigateur internet) se
connecte au serveur hébergeant le site statique, la page demandée
est instantanément retournée, sans compilation ni traitement par
le serveur.
23. Site web dynamique
• Un site dynamique combinent différentes sources pour constituer
ses pages HTML.
• D’un côté il y a une base de données (MySQL, …), et de l’autre des
fichiers dans un langage de programmation dynamique (PHP,
Java, …) qui à la demande d’un ordinateur se connectant au
serveur, compile la page HTML avant de la délivrer.
25. Java
Write once , Run everywhere …
• Java est un langage de programmation moderne développé par Sun
Microsystems (aujourd'hui racheté par Oracle).
• Une de ses plus grandes forces est son excellente portabilité : une
fois votre programme créé, il fonctionnera automatiquement sous
Windows, Mac, Linux, etc.
• Puissance
• Stabilité
• Sécurité
• …
26. Java Aujourd'hui ...
...3 environnements d'exécutions différents.
• Java ME (Micro Edition) pour téléphone
• Java SE (Standard Edition) pour desktop
• Java EE (Entreprise Edition) pour serveur
28. Problématique
“Les applications d'entreprise” concernent aussi bien les grandes
entreprises que les petites …
Elles doivent être :
• Portables
• Fiables et sécurisées
• Maintenables et flexibles
• Performantes ...
Nécessité d'intégrer ou de s'intégrer à un système d'information existant.
Toutes ces considérations rendent les applications complexes !
31. JEE – Java Entreprise Edition
Standard de développement d'applications d'entreprises multi-
niveaux, basées sur des composants.
Conscient de l’intérêt des architectures multi-tiers pour le développement d’
applications d’entreprises, la société Sun Microsystems a proposé , dès 1999,
une déclinaison de son SDK Java (Software Development Kit) baptisé JEE (Java
Enterprise Edition).
JEE est un ensemble de spécifications (et non pas un produit) qui, en
respectant une architecture multi-tiers, va décrire à la fois:
✓ L'infrastructure de gestion des applications.
✓ Les API des services utilisées pour concevoir ces applications.
33. Serveur d’applications
JEE définit finement les rôles et les interfaces pour les applications
ainsi que l'environnement dans lequel elles seront exécutées.
Ces recommandations permettent ainsi à des entreprises tierces de
développer des serveurs d'application conformes aux spécifications ainsi
définies, sans avoir à redévelopper les principaux services.
C'est-à-dire de l'environnement d'exécution,
34. Les applications d'entreprise ont souvent besoin des mêmes services système :
Gestion de la concurrence
Services transactionnels entre composants
Sécurité
Gestion de la session utilisateur
Gestion des montées en charge
Ouverture sur de multiples sources de données
Pools de connexion
Système de tolérance aux pannes et reprise sur incident
Le serveur d'application fournira ces services système
35. Serveur d’applications
✓ Serveur d'application JEE implémente les API JEE
✓ Il héberge des composants applicatifs
✓ Il fournit des services à ces composants au travers d'un conteneur (un
environnement d'exécution chargé de gérer des composants applicatifs et
leur donner accès aux API JEE)
✓ Il gère le noyau de l'application avec pour objectif central de répondre aux
requêtes des utilisateurs s'y connectant.
37. Des services, au travers d'API
La plateforme JEE comprend des services, au travers d'API, c'est-à-dire des
extensions Java indépendantes permettant d'offrir en standard un certain
nombre de fonctionnalités.
Sun (aujourd'hui racheté par Oracle) fournit une implémentation minimale
de ces API appelée JEE SDK (JEE Software Development Kit)
Des services offerts,
38. API – Application Programming Interface
Une interface de programmation est un ensemble normalisé de classes, de
méthodes ou de fonctions qui sert de façade par laquelle un logiciel offre des
services à d'autres logiciels.
Dans le jargon Java, les APIs sont des librairies de composants réutilisables.
Les APIs sont des spécifications, implémentées ensuite (par IBM, Oracle, …)
sur les différentes plates-formes proposant un environnement d’exécution
Java.
39. Les API de JEE
Les API de JEE peuvent se répartir en deux grandes catégories :
✓ Les composants.
✓ Les services.
40. Les composants
✓ Les composants web:
✓ Les composants métier :
Servlets et JSP (Java Server Pages) il s’agit de la partie chargée de
l'interface avec l'utilisateur (on parle de logique de présentation).
EJB (Enterprise Java Beans), Il s'agit de composants spécifiques
chargés des traitements des données propres à un secteur
d'activité (on parle de logique métier ou de logique applicative) et
de l'interfaçage avec les bases de données.
42. ✓ Servlet :
Une Servlet s’exécute dans un moteur de Servlet ou conteneur de
Servlet qui gère son cycle de vie.
Les servlets permettent donc de gérer des requêtes HTTP et de fournir
au client une réponse HTTP dynamique
43.
44.
45.
46. Déploiement d’une servlet :
* Première solution : Descripteur de déploiement de servlet : web.xml
* Deuxième solution (Servlet 3.x): Annotations
47. ➔ Les Servlets sont très pratiques pour déclencher des traitements
coté serveur suite à une requête HTTP.
➔ Dans une Servlet, on peut également générer une réponse HTTP en
utilisant l’objet RESPONSE.
➔ Mais, quant il s’agit de générer une page web complète, les
Servlets ne sont pas pratiques.
Il existe un autre moyen pour créer les servlet, c’est les page JSP.
48. ✓ JSP : Java Server Pages
Les JSP sont très pratiques pour générer des pages web dynamiques.
Les JSP permettent d'introduire du code Java dans des tags prédéfinis à
l'intérieur d'une page HTML.
La technologie JSP mélange la puissance de Java côté serveur et la facilité
de mise en page d'HTML côté client.
Il s'agit en réalité d'un langage de script puissant (un langage interprété)
exécuté du côté du serveur (au même titre que les scripts PHP,ASP,...)
49.
50.
51.
52.
53. @WebServlet("/Test")
public class Test extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
request.setAttribute("heure", "jour");
this.getServletContext().getRequestDispatcher("/WEB-INF/bonjour.jsp")
.forward(request, response);
}
}
54. <html>
<body>
<p>
<%
String heure = (String) request.getAttribute("heure");
if (heure.equals("jour")) {
out.println("Bonjour");
}
else {
out.println("Bonsoir");
}
%>
</p>
<p>
<%
for (int i = 0 ; i < 20 ; i++) {
out.println("Une nouvelle ligne !<br />");
}
%>
</p>
</body>
</html>
55. ✓ JSTL : Java Standard Tag Library
JSTL est l'acronyme de Java server page Standard Tag Library.
C'est un ensemble de tags personnalisés qui propose des fonctionnalités
souvent rencontrées dans les JSP :
➔ Tag de structure (itération, conditionnement ...)
➔ Internationalisation
➔ Exécution de requête SQL
➔ Utilisation de document XML
56.
57. Les services
✓ Les services d'infrastructures :
✓ Les services communication.
JDBC
JNDI
JTA / JTS
JCA
JMX
JAAS
JavaMail
JMS
RMI-IIOP
API de gestion de l'authentification et des droits d'accès.
API permettant l'envoi de courrier électronique.
API fournit des fonctionnalités de communication asynchrone.
API permettant la communication synchrone entre objets
API d'accès aux bases de données relationnelles.
API d’accès aux services de nommage et annuaires d’entreprises.
API définissant des interfaces standard avec un g. de transactions.
API de connexion au système d’information de l’entreprise (ERP).
F. des ext. permettant de dév Des apps web de supervision d’apps
60. Démonstration
✓ Cette démonstration permet de pratiquer les bases du développement web
JEE en utilisant les composants Web Servlet, JSP et JSTL , sans faire appel
à aucun Framework.
✓ Elle montre un exemple d'application web JEE qui respecte le pattern MVC
avec une couche métier qui effectue le mapping objet relationnel JDBC.
✓ C'est une application qui permet de ajouter, supprimer, et consulter des
produits stockés dans une base de données MYSQL.
61. l'application se compose de deux couches :
✓ La couche Métier :
- Une entité :Produit
- Une interface
- Un singleton Connection
- Une implémentation de l'interface
- Une classe pour Tester cette implémentation
✓ La couche Web :
- Un contrôleur : Servlet - Une vue JSP - Une feuille de style CSS
62. Cette démonstration vous permet d'apprendre les concepts suivants :
✓ Créer une base de données MySQL
✓ Effectuer le mapping objet relationnel avec JDBC
✓ Créer un pattern Singleton
✓ Utiliser le pilote JDBC
✓ Respecter le pattern MVC
✓ Créer une servlet et le Déployer
✓ Créer une JSP en utilisant JSTL
Cet exemple est un passage idéale avant de commencer à utiliser les
Framework Hibernate, Spring, Struts ou JSF.
67. Industrialisation du génie logiciel
✓ Le processus du développement logiciel est, aujourd'hui complètement
industrialisé.
✓ Un logiciel est construit à base de composants :
➔ Réutilisables
➔ Interchangeable
➔ Évolutifs
➔ Reconfigurables
➔ Mobiles
➔ Surveillables à chaud
68. Avènement des technologies Open Source
✓ En dix ans le développement logiciel a évolué en grande partie grâce aux
technologies Open Sources.
✓ Celles ci permettent aux développeurs de ne pas réinventer
perpétuellement la roue et de se concentrer sur les aspects métiers, sans
pour autant tomber sous l’emprise technologique d’un éditeur.
✓ Les technologies Open Source rivalisent avec des standards officiels au
point de devenir des standards.
➔ Spring
➔ Struts
➔ Hibernate
69. Avènement des méthodologies Agile
✓ Les méthodes Agile de gestion projet et de développement comme Scrum
ou l'eXtreme Programming (XP) partent du constat que le cycle de
développement en cascade est un échec.
✓ Développement en cascade:
➔ Spécifier pendant X mois,
➔ puis ensuite coder Y mois,
➔ tester Z mois,
pour livrer au client un projet qui ne correspond plus tout à fait à ses
attentes.
70. Avènement des méthodologies Agile
✓ Les méthodes Agile prônent:
➔ les tests avant le développement,
➔ des cycles de développement itératifs,
➔ l’implication du client final tout au long du projet,
➔ des spécifications réduites en début de projet,
➔ etc.
✓ Les méthodologies Agile sont pragmatiques, Ont fait leurs preuves et sont
prisées par de grands industriels de logiciels.
71. Industrialiser le cycle de vie : améliorations,
maintenance, corrections
✓ Pour industrialiser les composants logiciels, il est nécessaire d’utiliser des
outils qui permettent d’automatiser le processus de fabrication des logiciels
➔ Frameworks de tests : JUnit
◆ Ils permettent de créer des tests sur des fonctions métiers.
◆ Faisant partie intégrante du projet, les tests peuvent être
rejoués par tous les développeurs afin de vérifier que les
dernières modification du code ne génèrent aucune régression.
72. Industrialiser le cycle de vie : améliorations,
maintenance, corrections
➔ Outils d'intégration continue : Maven
◆ Ils jouent le rôle de chef d'orchestre en lançant
automatiquement
● les tests,
● le contrôle de qualité du code,
◆ Génèrent les builds et la documentation technique des
packages ou bibliothèques de classes.
◆ L'intégration continue est un élément centrale de
l'industrialisation du cycle de vie.
73. Exigences d’un projet informatique
Exigences fonctionnelles:
Une application est créée pour répondre , tout d’abord, aux besoins
fonctionnels des entreprises.
Exigences Techniques :
• Les performances , la maintenance, Sécurité, Portabilité, Distribution
• Capacité de communiquer avec d’autres applications distantes.
• Capacité de fournir le service à différents type de clients (Desktop,Mobile,
SMS, http...)
• ...
Exigence financières.
74. Constat :
Il est très difficile de développer un système logiciel qui respecte ces exigences sans utiliser l’
expérience des autres :
✓ Serveur d’application JEE: JBOSS, Web Sphere, GlassFish, Tomcat,
✓ Framework pour l’Inversion de contrôle: Spring (Conteneur léger)EJB (Conteneur lourd)
✓ Frameworks Mapping objet relationnel (ORM ) : JPA, Hibernate, Toplink, …
✓ Applications Web : Struts, JSF, SpringMVC....
✓ Middlewares :
➔ RMI, CORBA : Applications distribuées
➔ JAXWS, JAXRS our Web services
➔ JMS : Communication asynchrone entre les application
➔ JMX : Supervision des composants….
75. ✓ la couche [web] est la couche en contact avec l'utilisateur en utilisant le protocole
HTTP.
✓ la couche [metier] implémente les règles de gestion de l'application, tels que le
calcul d'un salaire ou d'une facture. Cette couche utilise des données provenant de
l'utilisateur via la couche [web] et du Sgbd via la couche [dao].
✓ la couche [dao] (Data Access Objects), la couche [jpa] (Java Persistence Api) et le
pilote Jdbc gèrent l'accès aux données du Sgbd.
l'intégration des couches peut être réalisée par un conteneur Spring ou
Ejb3 .
79. La framework Spring
✓ Spring est un framework open source JEE pour les applications ntiers, dont il facilite le
développement et les tests.
✓ Il est considéré comme un conteneur dit « léger », c’est-à-dire une infrastructure similaire à un
serveur d’application JEE.
✓ Il prend donc en charge la création d’objets et la mise en relation d’objets par l’intermédiaire
d’un fichier de configuration qui décrit les objets à fabriquer et les relations de dépendances
entre ces objets.
✓ Il permet de séparer le code métier du code technique.
✓ Spring s’appuie principalement sur l’intégration de trois concepts clés :
➔ l’inversion de contrôle ou injection de dépendance (IoC).
➔ la programmation orientée aspect (AOP).
➔ une couche d’abstraction.
80. La framework Spring
✓ Spring est modulaire , permettant
de choisir les modules
appropriés à votre application, sans
être obligé d’utiliser le reste.
✓ Spring Framework fournit
plus de 20 modules qui
peuvent être utilisé dans les applications.
84. Rappels de quelque principes de conception
● Une application qui n’évolue pas meurt.
● Une application doit être fermée à la modification et ouverte à
l’extension.
● Une application doit s’adapter aux changements
● Efforcez-vous à coupler faiblement vos classes.
● Programmer une interface et non une implémentation
● Etc..
86. Couplage fort
➔ Quand une classe A est lié à une classe B, on dit que la classe A est fortement couplée
à la classe B.
➔ La classe A ne peut fonctionner qu’en présence de la classe B.
➔ Si une nouvelle version de la classe B (soit B2), est crée, on est obligé de modifier dans
la classe A.
➔ Modifier une classe implique:
◆ Il faut disposer du code source.
◆ Il faut recompiler, déployer et
distribuer la nouvelle application
aux clients.
◆ Ce qui engendre un cauchemar au niveau de la maintenance de l’application
Nous allons voir que nous pourrons faire mieux en utilisant le couplage faible.
87. Couplage faible
➔ Pour utiliser le couplage faible, nous devons utiliser les interfaces.
➔ Considérons une classe A qui implémente une interface IA, et une classe B qui
implémente une interface IB.
➔ Si la classe A est liée à l’interface IB par une association, on dit que le classe A et la
classe B sont liées par un couplage faible.
➔ Avec le couplage faible, nous pourrons créer des application fermée à la
modification et ouvertes à l’extension.
90. Injection des dépendances
Injection Injection par instanciation dynamique
par réflexion :
Fichier texte de configuration :
config.txt
● ext.DaoImp
● metier.MetierImpl
91. Injection des dépendances avec Spring.
➔ L’injection des dépendance, ou l’inversion de contrôle est un concept
qui intervient généralement au début de l’exécution de l’application.
➔ Spring IOC commence par lire un fichier XML qui déclare quelles sont
différentes classes à instancier et d’assurer les dépendances entre les différentes
instances.
➔ Quand on a besoin d’intégrer une nouvelle implémentation à une application,
il suffirait de la déclarer dans le fichier xml de beans spring.
94. Injection des dépendances dans une app web
➔ L’injection Dans une application web, SpringIOC est appelé au démarrage du
serveur en déclarant le listener ContextLoaderListener dans le fichier
web.xml
95. ➔ Dans cette déclaration, CotextLoaderListener est appelé par Tomcat au moment du
démarrage de l’application.
➔ Ce listener cherchera le fichier de beans spring « spring-beans.xml » stocké dans le
dossier WEB-INF. ce qui permet de faire l’injection des dépendances entre
MetierImpl et DaoImpl.
106. Introduction
➔ Travailler dans les deux univers que sont l'orienté objet et la base de données
relationnelle peut être lourd et consommateur en temps dans le monde de
l'entreprise d'aujourd'hui.
➔ Hibernate est un outil de mapping objet/relationnel pour le monde Java.
➔ Le terme mapping objet/relationnel (ORM) décrit la technique consistant
à faire le lien entre la représentation objet des données et sa représentation
relationnelle basée sur un schéma SQL.
107. Le but de Hibernate
➔ Le but d'Hibernate est de libérer le développeur de 95 pourcent des
tâches de programmation liées à la persistance des données communes.
➔ Hibernate assure la portabilité de votre application si vous changer de SGBD.
➔ Hibernate propose au développeur des méthodes d’accès aux bases de données
plus efficace ce qui devrait rassurer les développeurs.
109. Mapping Objet Relationnel des entités
➔ Il existe deux moyens pour mapper les entités :
◆ Créer des fichier XML de mapping
◆ Utiliser les Annotations JPA
➔ I 'utilisation des annotations JPA laisse votre code indépendant de Hibernate.
➔ La création des fichiers XML de mapping a l’avantage de séparer le code java du
mapping objet relationnel.
➔ Dans cette formation, nous allons utiliser les annotations JPA
113. Maven
➔ Maven, géré par l'organisation Apache Software Foundation.
(Jakarta Project), est un outil pour la gestion et l'automatisation
de production des projets logiciels Java en général et Java EE en particulier.
114. Maven
L'objectif recherché est de:
◆ produire un logiciel à partir de ses sources,
◆ en optimisant les tâches réalisées à cette fin
◆ et en garantissant le bon ordre de fabrication.
● Compiler, Tester, Contrôler, produire les packages livrables
● Publier la documentation et les rapports sur la qualité
Apports :
◆ Simplification du processus de construction d’une application
◆ Fournit les bonnes pratique de développement
◆ Tend à uniformiser le processus de construction logiciel
◆ Vérifier la qualité du code
◆ Faciliter la maintenance d’un projet
115. Maven : POM
Maven utilise un paradigme connu sous le nom de Project Object
Model (POM) afin de :
● Décrire un projet logiciel,
● Ses dépendances avec des modules externes
● et l'ordre à suivre pour sa production.
117. Démonstration
✓ Cette démonstration permet de pratiquer les bases des développement web
JEE en utilisant les Framework Spring et Hibernate.
✓ C'est une application qui permet de ajouter, supprimer, modifier et
consulter des produits stockés dans une base de données MYSQL.
✓ Maven, JUnit ,SpringIOC ,SpringMVC , JPA, Hibernate
122. Démonstration
✓ Création d’un projet Spring.
✓ Implémentation des entités.
✓ Mapping des entités en utilisant les annotations JPA.
✓ Configuration de Hibernate “persistence.xml”.
✓ Verifier la génération des tables “JUnit”.
✓ Implémentation de la couche Metier et la couche Dao.
✓ Configuration JPA avec Spring IOC
✓ Verifier les services “JUnit”.
✓ Implémentation de la couche Web
123. Mapping des entités en utilisant les annotations JPA
<!-- Hibernate-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.1.0.Final</version>
</dependency>
<!-- MySQL Connector-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>