Java EE
PRÉSENTATION DE JAVA ENTERPRISE EDITION
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 8
Contenu
• Nébuleuse Java
• Caractéristiques des applications d’entreprise
• Évolution des applications
• Standard HTTP
• Concepts Java EE
• Architecture applicative Java EE
• Conteneur Java
• Classe standard HttpServlet
• API et Standards
• Tutoriel I : Prise ne main de l’environnement
• Tutoriel II : Premier projet
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 9
Nébuleuse Java
• Java Micro Edition (Java ME)
◦ développement des applications embarquées
• Java Standard Edition (Java SE)
◦ développement des applications classiques
• Java Enterprise Edition (Java EE)
◦ développement des applications d’entreprise
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 10
Application d’entreprise
• Réduction des temps et coûts de développement
• Qualité du code
• Portable
• Adaptable
• Montée en charge
• Sûre
• Sécurisée
• Intégrable
• Disponible
• Extensible
• Maintenable
• Répondent aux besoins exprimés par les utilisateurs !
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 11
Besoins exprimés
• Besoins de normalisation
◦ Etablir un ensemble de règles ayant pour objet de simplifier et de
rationaliser la production
◦ Pour garantir des applications :
◦ Intégrables
◦ Communicantes / distribuées
◦ Adaptables
◦ Maintenables
◦ Portables
• Besoins d’abstraction
◦ Opération de désolidariser un objet de son contexte
◦ Pour garantir des applications :
◦ Portables
◦ Maintenables
◦ Extensibles
◦ Intégrables / distribuées
◦ Adaptables
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 12
Suite des besoins exprimés
• Besoin de communication
◦ Pour garantir des applications :
◦ Intégrables
◦ Distribuées
◦ Sécurisée
• Besoin de composants
◦ Pour garantir des applications :
◦ Maintenables
◦ Sûres
◦ Extensibles
◦ Adaptables
◦ Portables
◦ Disponibles / distribuées
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 13
Evolution des architectures applicatives
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 14
Évolution de la programmation
• Années 70-80 : Programmation impérative procédurale
◦ Alors que les premiers langages objets datent de la fin des années 60 ! !
• Années 90 : Programmation objet
• Fin des années 90 : Programmation par composants
◦ Les composants peuvent être physiquement distants
◦ Si changement, pas besoin de tout recompiler et de tout relinker
◦ Bonne programmation objet : seules les interfaces sont connues
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 15
Principe des applications web
• Internet ≠ Web
• Contenu web :
◦ Statique : HTML, CSS et Javascript
◦ Dynamique : plusieurs solutions dont Java EE
• Echange client serveur :
◦ l'utilisateur saisit une URL dans la barre d'adresses de son navigateur
◦ le navigateur envoie alors une requête HTTP au serveur pour lui demander la
page correspondante
◦ le serveur reçoit cette requête, l'interprète et génère alors une page web de
manière dynamique, à partir du code source du site, qu'il va renvoyer au
client par le biais d'une réponse HTTP
◦ les pages sont générées sur le serveur le navigateur reçoit, via cette réponse,
la page web finale, qu'il affiche alors à l'utilisateur
◦ le client ne comprend que les langages de présentation de l'information :
HTML, CSS et Javascript, interprétés par le navigateur directement sur la
machine client.
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 16
Standard HTTP : Echange
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 17
Standard HTTP : Requête
• Ensemble de lignes envoyé au serveur par le navigateur :
◦ Une ligne de requête: précisant le type de document demandé, la
méthode qui doit être appliquée, et la version du protocole utilisée ;
séparés par un espace,
◦ Les champs d'en-tête de la requête: ensemble de lignes facultatives
donnant des informations supplémentaires sur la requête et/ou le
client (Navigateur, système d'exploitation, ...). Chacune de ces lignes
est composée d'un nom qualifiant le type d'en-tête, suivi de deux
points (:) et de la valeur de l'en-tête
◦ Le corps de la requête: ensemble de lignes optionnelles devant être
séparées des lignes précédentes par une ligne vide et permettant par
exemple un envoi de données par une commande POST lors de
l'envoi de données au serveur par un formulaire
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 18
Standard HTTP : Réponse
• Ensemble de lignes envoyées au navigateur par le serveur :
◦ Une ligne de statut : précisant la version du protocole utilisé et l'état
du traitement de la requête à l'aide d'un code et d'un texte explicatif.
Comprend trois éléments devant être séparés par un espace :
◦ La version du protocole utilisé
◦ Le code de statut
◦ La signification du code
◦ Les champs d'en-tête de la réponse: ensemble de lignes facultatives
permettant de donner des informations supplémentaires sur la
réponse et/ou le serveur. Chacune de ces lignes est composée d'un
nom qualifiant le type d'en-tête, suivi de deux points (:) et de la
valeur de l'en-tête
◦ Le corps de la réponse: le document demandé
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 19
Standard HTTP : Méthodes
• GET
◦ La méthode GET demande une représentation de la ressource spécifiée. Les
requêtes GET doivent uniquement être utilisées afin de récupérer des
données.
• HEAD
◦ La méthode HEAD demande une réponse identique à une requête GET pour
laquelle on aura omis le corps de la réponse (on a uniquement l'en-tête).
• POST
◦ La méthode POST est utilisée pour envoyer une entité vers la ressource
indiquée. Cela entraîne généralement un changement d'état ou des effets
de bord sur le serveur.
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 20
Standard HTTP : Méthodes
• PUT
◦ La méthode PUT remplace toutes les représentations actuelles de la
ressource visée par le contenu de la requête.
• DELETE
◦ La méthode DELETE supprime la ressource indiquée.
• CONNECT
◦ La méthode CONNECT établit un tunnel vers le serveur identifié par la
ressource cible.
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 21
Standard HTTP : Méthodes
• OPTIONS
◦ La méthode OPTIONS est utilisée pour décrire les options de
communications avec la ressource visée.
• TRACE
◦ La méthode TRACE réalise un message de test aller/retour en suivant le
chemin de la ressource visée.
• PATCH
◦ La méthode PATCH est utilisée pour appliquer des modifications partielles à
une ressource.
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 22
Concepts Java EE : Objectifs
• Faciliter le développement de nouvelles applications à base de
composants
• Intégration avec les systèmes d’information existants
• Support pour les applications « critiques » de l’entreprise
◦ Disponibilité, tolérance aux pannes, montée en charge, securité ...
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 23
Concepts Java EE : C ’est quoi?
[Link]
[Link]
• anciennement, J2EE (Java2 Enterprise Edition)
• Spécifications
• Modèle de programmation
• Implémentation de référence
• Suite(s) de tests
• Label Java EE Sun (qualification de plateformes)
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 24
Concepts Jakarta EE : C ’est quoi?
[Link]
• même spécifications que Java EE, suite au rachat par eclipse
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 25
Architecture applicative
Browser WEB Container
http Servlets
JSPs
html
Applets rmi DB
rmi
EJBs
rmi
public
EIS
static void
main(…) { EJB Container
Java Application Java EE Application Server
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 26
Architecture multi-tiers
• Client
◦ Léger (Web, browser)
◦ Lourd (Application java, Applet…)
◦ Architecture orientée service (Application répartie sans présentation)
• Serveur d ’applications
◦ Conteneur EJB + logique métier
◦ Services non fonctionnels
• EIS ou Base de données
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 27
Un serveur Java EE
Java Client
RMI Calls JOnAS « Java EE » Server
Web Container EJB Container
Home Enterprise
interface Enterprise
Enterprise
Java Bean
Servlets Java Bean
Remote Java Bean
interface
HTTP
Management
Transaction
Database
Naming
JDBC Calls
database
Web
EJB
Ear
...
HTML Client
Services
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 28
Conteneur
• Conteneur Java :
◦ Lourd
◦ Leger
• Conteneur Web :
◦ Servlets
◦ Code java exécuté sur le serveur
◦ Equivalent du CGI
◦ Génération de contenu Web dynamique
◦ JSP: Java Server Pages
◦ Mélange de HTML/XML et de code java
◦ Librairies d ’extension (« taglibs »)
◦ Précompilation en servlet
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 29
API et Standards : RMI
• Remote Method Invocation
◦ Java seulement, mais passerelles
• « RPC objet » (appels sur objets distants)
• Service de nommage (RMI registry)
• Sécurité paramétrable (SecurityManager)
• Garbage Collection distribuée
• Téléchargement de code
• Fonctions avancées
◦ Activation d’objets persistants, Réplication
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 30
API et Standards : JNDI
• Service de nommage / annuaire
◦ Java Naming and Directory Interface
• API accès aux annuaires
◦ [Link]
◦ « Service Provider » par annuaire cible (LDAP, NIS, RMI registry…)
• Utilisation avec les EJB
◦ Accès à l ’interface « home » pour initialiser
◦ Accès à diverses ressources (UserTransaction, Queues JMS, DataSources…)
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 31
API et Standards : JMS
• Java Messaging Service
• JMS Provider : inclus dans J2EE
◦ Transport synchrone ou asynchrone, Garantie de livraison
◦ « Messaging domains » point à point ou « publish/subscribe »
• Lien avec EJB : « message-driven bean »
◦ Pour échanges asynchrones
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 32
API et Standards : JTA
• Java Transaction API
• Package [Link]
◦ TransactionManager :
◦ begin()
◦ commit()
◦ rollback() …
◦ Transaction :
◦ commit()
◦ rollback()
◦ enlistResource(XAResource)
◦ registerSynchronisation(Synchronization) ...
◦ Synchronization :
◦ beforeCompletion()
◦ afterCompletion(commit | rollback)
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 33
API et Standards : JTA -Participants
• XAResource
– Conformes à la spécification XA
– Enregistrement avec [Link]()
• Synchronization
– Pour les ressources « non transactionnelles »
(EAI…)
– Participant averti des frontières de transaction
– enregistrement :
[Link]()
– beforeCompletion() équivaut à prepare()
– afterCompletion(état = commit | rollback)
équivaut à commit | rollback
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 34
API et Standards : XA de Java EE
• Package [Link]
◦ XAResource (prepare(), commit(), rollback()...
◦ Xid (identifiant de transaction XA)
• Package [Link]
◦ Extension de JDBC (bases de données)
◦ XADataSource (getXAConnection())
◦ XAConnection (PooledConnection, avec getConnection() et getXAResource())
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 35
API et Standards : JMX
• Java Management eXtensions
◦ API unique pour applications de management
• Mbeans avec accesseurs get/set
◦ Typage faible, attributs nommés
• Serveur JMX
◦ Enregistrement des Mbeans
◦ Les applis d ’administration dialoguent avec le serveur JMX
• Instrumenter un composant
◦ Fournir un ou des Mbeans
◦ Les enregistrer auprès du serveur JMX
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 36
JMX : Exemple d ’un serveur JavaEE
Admin console
EJB Container WEB Container
EJBs Admin
Servlets
Management
JMX Server
Transaction
Registry
Security
MC4J
Web
EAR
EJB
..
MBeans
Services
Java EE Server
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 37
API et Standards : EJB -Architecture
• JavaBeans pour l’ Enterprise
• Différents des JavaBeans
• Logique métier
• S’appuie sur Java SE et les APIs de Java EE
◦ JNDI, JTA/JTS, JDBC, JMS , JAAS
• Gestion déclarative (personnalisation par
annotations – ou sans toucher au code source)
• Portable sur les différents conteneurs EJB
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 38
EJB: Gamme de services implicites
• Gestion du cycle de vie
• Gestion de l’état
• Sécurité
• Transactions
• Persistance
• Localisation des composants transparente
• (comparable à objets distribués CORBA)
• Répartition de charge, pooling
Le développeur se focalise sur les aspects métier
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 39
Descripteur de déploiement
EJB 2.0 Implementation du composant:
-comportement transactionnel (Tx
attributes)
-Sécurité (ACLs)
Lifecycle interface -logique métier (code) -Persistance (entity beans)
- create -callbacks pour le conteneur -Ressources (DataSources …)
- remove (ejbCreate, ejbPassivate,
- find ejbLoad, …)
Remote(rmi) ou DD
Local <resource-ref>
Implementé par <..name>jdbc/MyDS
le conteneur …
<trans-attribute>Required
Home
Client Logique métier … +
Callbacks … +
ic=new InitialContext();
ds = (DataSource) [Link](
‘’java:comp/env/jdbc/MyDS’’);
Composant
Interface Métier:
Remote(rmi) ou
local Conteneur EJB
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 40
EJB 3
Logique métier
Client Business + Annotations déploiement EJB3
Interface + Callbacks conteneur
Interface Métier:
Remote(rmi/iiop)
ou local
Conteneur EJB
Simplification : 1 classe, 1 ou 2 interfaces
- L’interface Home (cycle de vie) disparaît
Le descripteur de déploiement devient facultatif
- Remplacé par des annotations java dans le bean
- Si présent tout de même, priorité au DD sur les annotations
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 41
EJB: Interface métier
• Remote (RMI / IIOP) ou Local
• Vue client de l’ EJB
• Declare les méthodes métier
• Implementée par les outils intégrés à la plateforme
EJB - au moment du déploiement
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 42
Exemple : interface métier
package facturation;
public interface Facturation {
void init( );
void creerFacture(String numfact, double
montant);
Facture getFacture(String numfact);
// …
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 43
EJB: Implémentation du Bean
• Implémente les méthodes de l’interface métier
• Peut hériter d’un autre EJB, ou d’un POJO
• Spécifie ses caractéristiques de déploiement par
annotations
◦ Type de bean
◦ Comportement : transactions, sécurité, persistance…
◦ Callbacks conteneur
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 44
Exemple : Implém. de Bean
package facturation;
@Stateful
@Remote([Link])
public class FacturationBean implements Facturation {
void init( ) {
// …
}
Facture getFacture(String numfact) {
// …
}
// …
}
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 45
EJB: Code client
Context ctx = new InitialContext();
// appel JNDI pour obtenir une référence
//à l’interface
Facturation fact =
(Facturation)[Link](
“[Link]”);
// appel méthode métier
Facture f = [Link](numfact);
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 46
EJB: Entité
• Représente des données dans la base de données
• Container-Managed Persistence (CMP) or Bean-Managed Persistence (BMP)
◦ En mode CMP, le conteneur EJB gère la persistance du bean (pas d’accès BD dans le
code).
◦ En mode BMP, c’est le développeur du Bean qui gère la persistance (par exemple,
JDBC, JDO …).
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 47
EJB: Bean Session
• Gestion des interactions entre beans entité ou
session, accès aux ressources, réalisation d’actions
sur demande du client
• Objets métier non persistants
• Stateful ou Stateless - maintient ou pas un état
interne en mémoire
=> Un Bean Stateful encapsule la logique métier et
l’état specifiques à un client
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 48
EJB : Message Driven Bean
• Composant asynchrone
• Execution sur réception d ’un message JMS
◦ Méthode onMessage()
◦ Appels à d ’autres beans, etc…
• Descripteur de déploiement
◦ Associations Bean / ressource JMS
◦ Ressources JMS (ex. Queue ou Topic)
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 49
Classe HttpServlet
• [Link]
doc/servletapi/javax/servlet/http/[Link]
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 50
Tutoriel I
PRISE EN MAIN DE L’ENVIRONNEMENT DE
DÉVELOPPEMENT
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 51
Tutoriel 1 :
• Installation du JDK EE 1.8
• Installation d’un IDE adapté :
◦ Eclipse Java EE IDE for Web Developers ; Version: 2021-03 (4.19.0)
◦ Besoin du JRE1.8 ou +
• Installation d’un serveur d’application :
◦ Apache Tomcat® 9.x….
• Création d’un premier projet :
◦ Depuis eclipse : nouveau projet de type web dynamique en précisant le
serveur d’application entant que nouvelle instance
◦ Préciser que le projet doit s’exécuter sur le serveur existant
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 52
Structure standard d’une
application Java EE
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 53
Structure sous eclipse
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 54
Première page HTML
• Créer une nouvelle page HTML dans le répertoire WebContent
• Insérer un code basique sur cette page
• Lancer le serveur
• Depuis un navigateur demander l’URL :
[Link]
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 55
Tutoriel II
PREMIER PROJET MVC
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 56
Énoncé
• On souhaite avoir une page web dynamique qui permet de saisir des
identificateurs d’utilisateur constitués de logins et mots de passe
(passés comme paramètres de l’URL) et de vérifier s’ils correspondent
aux informations stockées dans un tableau statique. Le résultat de la
vérification est affiché sur la JSP.
• La vérification se fait sur l’existence du login, s’il existe, vérifier si son
mot de passe correspond.
• Donner le code de la servlet.
• Donner le code de la JSP.
• Si d’autres fichiers sont nécessaires, donner leurs codes.
2021/2022 JAKARTA ENTREPRISE EDITION - SELMA BATTI ATTIA 57