Vous êtes sur la page 1sur 7

Cours Java EE

 Site du cours :
http://richard.grin.free.fr/emsi/rabat
Java EE – Introduction  Interrogation sans documents à la fin du cours, sur
les concepts et savoir-faire essentiels du cours et
des TPs
EMSI - Université de Nice Sophia Antipolis
Richard Grin
Version O 1.9 – 20/10/17

Richard Grin Présentation Java EE page 2

Installation logiciels Prérequis / Objectifs


 Qui n’a pas fini d’installer tous les logiciels sur
son ordinateur personnel ?  Prérequis :
 HTML, HTTP
 Qui n’a pas commencé le TP 1 jusqu’à « Création
 Bonne connaissance de Java
de classes entités à partir d’une base de données
existante » ?  Servlets (les bases)
 Bases de données relationnelles (transactions et accès
concurrents en particulier)
 Objectif :
Développement d’applications Web avec Java EE,
en particulier avec JSF, JPA et les EJB

Richard Grin Présentation Java EE page 3 Richard Grin Présentation Java EE page 4

Plan du cours Plan de ce support


 Introduction à Java EE (ce support)
 Présentation de Java EE
 Suite du TP 1
 EJB – Introduction à CDI  Composants
 Fin du TP 1 (survol de JSF, EJB, JPA) ; Important de le finir  Serveur d’application et containers
 JSF  Formats de distribution
 TP 2 (JSF et modèle PRG)  Profiles
 TP 3 (templates de JSF)
 JNDI
 JPA 1ère partie (bases)
 TP 4 (JPA)
 JPA 2ème partie (associations et compléments)
 TP 5 (associations avec JPA)
Richard Grin Présentation Java EE page 5 Richard Grin Présentation Java EE page 6

1
Architecture d’une Couches d’une application Java EE
application d’entreprise
SGBD
 Les applications d’entreprise modernes sont des
applications multi-tiers

Serveur
d’application

Utilisateur

Richard Grin Présentation Java EE page 7 Richard Grin Présentation Java EE page 8

Couches d’une application Java EE Java EE


Sécurité,
transactionnel, DAO, ORM,…  Java Enterprise Edition
Concurrence,…
 Pas un produit ; spécifications (32 dans Java EE 7)
pour écrire des applications d’entreprise en Java
Souvent Web
et mobile  Les composants métier sont des Entreprise Java
Beans (EJB)
 Nous étudierons une interface utilisateur de type
Les « vrais » Web, implémentée avec Java Server Faces (JSF)
traitements
 La couche d’accès aux données utilisera « Java
Persistence API » (JPA)

Richard Grin Présentation Java EE page 9 Richard Grin Présentation Java EE page 10

Avenir de Java EE Autre solution Java EE (partiellement)


 Sortie de Java EE 8 début septembre 2017  Services Web de type REST
 Implémentation avec API JAX-RS de Java EE :
 Fin septembre Oracle a transféré la gestion de
Java EE à la fondation open source Eclipse (projet  Classes Java ordinaires (ou EJB), appelées classes de
ressource traitent requêtes HTTP envoyées au serveur
global EE4J, Eclipse Enterprise for Java) pour gérer une ressource, par exemple un client
 Le transfert de Java EE 8 est en cours  Chaque type de requête HTTP (GET, POST,…) traitée
 L’IDE NetBeans vient aussi d’être donné par par une méthode de la classe de ressource
Oracle à la fondation Apache et le transfert est en  Interface utilisateur Web avec HTML5 – JavaScript,
cours éventuellement avec surcouche Angular, React,
 Ces changements étant très récents, le cours Vue.js,…
restera sur Java EE 7
Richard Grin Présentation Java EE page 11 Richard Grin Présentation Java EE page 12

2
Exemples pour une classe de ressource Quelle solution choisir ?
@Path("/clients")  JSF convient très bien quand l’interface Web n’est
public class ClientRessource { pas trop complexe et pour les applications qui
@GET n’ont pas des milliers de clients Web
public Response getClients() {
...  Si l’application est « single page », avec de très
Requête http://monServeur.fr/monAppli/clients nombreux clients et du code JavaScript complexe,
}
choisir la solution service Web REST et clients
@GET
@Path("{id}")
Web HTML5 – JavaScript
@Produces(MediaType.APPLICATION_JSON)
public Client find(@PathParam("id") Integer id) {
...
Requête http://monServeur.fr/monAppli/clients/236
}

R. Grin JAX-RS page 13 Richard Grin Présentation Java EE page 14

Composant Intérêt des composants


 Java EE utilise la notion de composant, en  Développement plus rapide, plus fiable
particulier pour les EJB et les composants JSF
 Maintenance facilitée
 Sur le modèle des composants électroniques, les
 Pas besoin de compétences pointues dans le
composants logiciels sont des boîtes noires
domaine métier d’un composant acquis
 réutilisables
 Industrie du composant logiciel ? Pas encore
 configurables

 qui respectent des interfaces définies par une


spécification
 qui peuvent être enfichés dans les applications
qui respectent ces spécifications
Richard Grin Présentation Java EE page 15 Richard Grin Présentation Java EE page 16

Exemples Serveur d’application


 Composant « métier » pour gérer la paie des  Logiciel qui sert de structure d’accueil pour les
employés applications ; il leur fournit des services non
 Composant JSF qui affiche une carte « Google fonctionnels
Map » dans l’interface utilisateur Web  Les applications Java EE ne peuvent fonctionner
que si elles sont intégrées avec un serveur
d’application qui suit les spécifications Java EE
 GlassFish 4 est l’implémentation de référence de
Java EE 7
 Plusieurs autres serveurs d’application Java EE
(Payara, WildFly,…)
Richard Grin Présentation Java EE page 17 Richard Grin Présentation Java EE page 18

3
Containers Exemple d’interception
 Chaque type de composant Java EE est géré par un  L’appel d’une méthode d’un EJB est intercepté par
container qui fait partie du serveur d’application : pour le container EJB qui
JSF, EJB, CDI, etc.  démarre une nouvelle transaction, juste avant de
 Un container intercepte les appels aux composants donner la main à la méthode
pour ajouter des services non fonctionnels :  lance un commit de la transaction à la fin de
transactions, gestion de la concurrence, cycle de vie l’exécution de la méthode
des composants, injection de dépendance,…
 Le développeur est ainsi libéré d’une grande charge
de travail !

Richard Grin Présentation Java EE page 19 Richard Grin Présentation Java EE page 20

Configuration d’une application


 Pour
 s’adapter à la plateforme de déploiement (politique de
sécurité, bases de données installées,…)
 faire un choix entre plusieurs possibilités (persistance Format de distribution
des attributs d’un objet, gestion des transactions,…)
d’une application Java EE
 Java EE suit la formule « convention plutôt que
configuration » : pas besoin de configurer les
pratiques les plus courantes ; seules les pratiques
inhabituelles doivent être configurées
 Configuration par annotations ou fichiers XML

Richard Grin Présentation Java EE page 21 Richard Grin Présentation Java EE page 22

Fichier d’archive Fichier descripteur de déploiement


 Une application Java EE est distribuée dans un  Informe le serveur d’application sur la manière de
fichier d’archive, de type fichier jar déployer une application
 Un fichier d’archive peut contenir  Par exemple pour intégrer l’application dans le
 des classes Java (simples classes, composants) système de sécurité utilisé par le serveur
 des ressources utilisées par le code Java  Java EE a des fichiers descripteurs standards ;
(images, son, fichiers pour internationalisation,…) web.xml pour les applications Web
 des fichiers XML qui décrivent l’application ou la  Un serveur d’application peut y ajouter ses propres
façon de la déployer fichiers pour des configurations non standardisées
 d’autres fichiers d’archive
(clustering, pools de connexions, …) ; par exemple
glassfish-web.xml pour GlassFish
Richard Grin Présentation Java EE page 23 Richard Grin Présentation Java EE page 24

4
Annotations et fichiers descripteurs XML Types de fichiers d’archive
 De nombreuses annotations permettent de  Jar (Java ARchive) : contient les EJB, les classes
configurer une application directement dans les Java ordinaires et les ressources associées
classes Java  War (Web ARchive) : pour les modules liés au
 Le contenu des fichiers XML est ainsi allégé Web ; contient les servlets, fichiers HTML, JSF,
 S’il y a conflit sur une indication, c’est le fichier EJB, et les ressources associées
XML qui l’emporte Pourquoi ?  Ear (Entreprise ARchive) : contient des modules
jar ou war

Richard Grin Présentation Java EE page 25 Richard Grin Présentation Java EE page 26

Structure JAR pour EJB Structure WAR


Protégé des
clients Web

classes Java
directement
sous la racine

Richard Grin Présentation Java EE page 27 Richard Grin Présentation Java EE page 28

Structure EAR

Profiles

Richard Grin Présentation Java EE page 29 Richard Grin Présentation Java EE page 30

5
Profile EJB Lite
 Pour permettre des serveurs d’application allégés,  Une partie de la spécification EJB :
un profile n’utilisent qu’une partie des technologies  beans stateless, stateful et singleton (donc pas
de la norme EJB message, MDB)
 Le profile Web inclut les technologies pour écrire  interfaces locales (pas d’interfaces distantes)
une application Web : servlets, JSF, CDI, EJB Lite,
JPA, JTA, validation bean
 Une application qui se limite au profile Web peut
être distribuée dans un seul fichier WAR

Richard Grin Présentation Java EE page 31 Richard Grin Présentation Java EE page 32

Généralités
 Les composants ont besoin d’accéder à d’autres
composants ou à des ressources (EJB, source de
JNDI données JDBC, ressource javaMail,…)
 JNDI, API Java pour utiliser des annuaires pour
Java Naming and Directory Interface  donner des noms à des objets, des services ou des
ressources
 les récupérer en donnant leur nom
 Exemples de noms :
java:global/drh/drh-ejb/EmployeManager
java:app/jdbc/employes

Richard Grin Présentation Java EE page 33 Richard Grin Présentation Java EE page 34

Noms JNDI des EJB Utilisation de JNDI

 Noms JNDI des EJB standardisés  En interne par le serveur d’application


 java:global/app1/ejb1/Bean1  Le développeur utilisera le plus souvent l’injection
de dépendance qui est plus simple à utiliser
application module nom de l’EJB
 L’injection de dépendance n’est pas toujours
(fichier
ejb1.jar) possible et il faut alors utiliser JNDI ; par exemple
pour l’écriture d’un validateur JSF
 java:app/ejb1/Bean1
 java:module/Bean1 à l’intérieur d’un module

Richard Grin Présentation Java EE page 35 Richard Grin Présentation Java EE page 36

6
Code pour récupérer un EJB avec JNDI Injecter un EJB
import javax.naming.InitialContext;
...  Ajouter une variable d’instance et l’injecter :
@EJB
try {
private MonEJB monEJB;
InitialContext ic = new InitialContext();
MonEJB monEJB = (MonEJB)  Et c’est tout ! C’est le container qui va fournir
ic.lookup("java:global/app/mod/MonEJB"); l’EJB au code
...
} catch (NamingException e) {
...
}

Si c’est possible, plus simple d’injecter l’EJB !


Richard Grin Présentation Java EE page 37 Richard Grin Présentation Java EE page 38

Documentation
 Oracle : https://docs.oracle.com/javaee/7/index.html
 dont le tutoriel :
Annexe https://docs.oracle.com/javaee/7/tutorial/index.html

Changer les ports utilisés par GlassFish

Richard Grin Présentation Java EE page 39 Richard Grin Présentation Java EE page 40