Cours Java EE
21 h de cours et TD/TP
Site du cours :
Java EE – Introduction
[Link]
Interrogation sans documents à la fin du cours, sur
les concepts et savoir-faire essentiels (30 %)
ITU - Université de Nice Sophia Antipolis
Projet à rendre fin avril 2016 (70 %)
Richard Grin
Version O 1.5 – 5/1/16
Richard Grin Présentation Java EE page 2
Informations diverses Prérequis / Objectifs
Installer NetBeans 8.1, version Java EE (ou
« All ») sur ordinateur personnel Prérequis :
HTML, HTTP
Utilisation ordinateur personnel pendant TPs ?
Bonne connaissance de Java
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
TP 1 jusqu’à « Création d’un EJB session stateless » (test
environnement de travail avant le début du cours) Présentation de Java EE
Introduction à Java EE (ce support)
Composants
EJB – Introduction à CDI
Serveur d’application et containers
Suite et fin du TP 1 (survol de JSF, EJB, JPA)
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
Sécurité, DAO, ORM,…
Les applications d’entreprise modernes sont des transactionnel,…
applications multi-tiers
Souvent Web
et mobile
Les « vrais »
traitements
Richard Grin Présentation Java EE page 7 Richard Grin Présentation Java EE page 8
Java EE Autre solution Java EE
Pas un produit ; spécifications (32 dans Java EE 7) Serveur RESTful (JAX-RS si Java) et interface
pour écrire des applications d’entreprise en Java utilisateur HTML5 – JavaScript
Les composants métier sont des Entreprise Java
Beans (EJB)
Nous étudierons une interface utilisateur de type
Web, implémentée avec Java Server Faces (JSF)
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
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
vraiment là
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 11 Richard Grin Présentation Java EE page 12
2
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
Plusieurs serveurs d’application Java EE (Payara,
WildFly,…)
GlassFish 4 est l’implémentation de référence de
Java EE 7
Richard Grin Présentation Java EE page 13 Richard Grin Présentation Java EE page 14
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 15 Richard Grin Présentation Java EE page 16
Configuration d’une application Format de distribution
Pour Une application Java EE est distribuée dans un
s’adapter à la plateforme de déploiement (politique de fichier d’archive (de type fichier jar)
sécurité, bases de données installées,…) Un fichier d’archive peut contenir
faire un choix entre plusieurs possibilités (persistance
des classes Java (simples classes, composants)
des attributs d’un objet, gestion des transactions,…)
des ressources utilisées par le code Java
Java EE suit la formule « convention plutôt que
configuration » : les pratiques les plus courantes (images, son, fichiers pour internationalisation,…)
n’ont pas besoin d’être configurées ; seules les des fichiers XML qui décrivent l’application ou la
pratiques inhabituelles doivent être configurées façon de la déployer
Configuration par fichiers XML ou annotations d’autres fichiers d’archive
Richard Grin Présentation Java EE page 17 Richard Grin Présentation Java EE page 18
3
Fichier descripteur de déploiement Annotations et fichiers descripteurs XML
Informe le serveur d’application sur la manière de De nombreuses annotations permettent de
déployer une application configurer une application directement dans les
Par exemple pour intégrer l’application au système de classes Java
sécurité utilisé par le serveur Le contenu des fichiers XML est ainsi allégé
Java EE définit des fichiers descripteurs standards ; S’il y a conflit sur une indication, c’est le fichier
[Link] pour les applications Web XML qui l’emporte Pourquoi ?
Un serveur d’application peut y ajouter ses propres
fichiers pour des configurations non standardisées
(source de données, clustering,…) ; par exemple
[Link] pour GlassFish
Richard Grin Présentation Java EE page 19 Richard Grin Présentation Java EE page 20
Types de fichiers d’archive Structure EAR
Jar (Java ARchive) : contient les EJB, les classes
Java ordinaires et les ressources associées
War (Web ARchive) : pour les modules liés au
Web ; contient les servlets, fichiers HTML, JSF,
EJB, et les ressources associées
Ear (Entreprise ARchive) : réunit des modules jar
ou war
Richard Grin Présentation Java EE page 21 Richard Grin Présentation Java EE page 22
Structure JAR pour EJB Structure WAR
Protégé des
clients Web
classes
directement
sous la racine
Richard Grin Présentation Java EE page 23 Richard Grin Présentation Java EE page 24
4
Profile
Pour permettre des serveurs d’application allégés,
Java EE définit des profiles qui n’utilisent pas
toutes les technologies de la norme
Profiles Le profile Web inclut les technologies pour écrire
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 25 Richard Grin Présentation Java EE page 26
EJB Lite
Une partie de la spécification EJB :
beans stateless, stateful et singleton (donc pas
EJB message, MDB) JNDI
interfaces locales (pas d’interfaces distantes) Java Naming and Directory Interface
Richard Grin Présentation Java EE page 27 Richard Grin Présentation Java EE page 28
Généralités Noms JNDI des EJB
Les composants ont besoin d’accéder à d’autres
Noms JNDI des EJB standardisés
composants ou à des ressources (EJB, source de
données JDBC, ressource javaMail,…) java:global/app1/ejb1/Bean1
JNDI, API Java pour utiliser des annuaires pour application module nom de l’EJB
donner des noms à des objets, des services ou (fichier
des ressources [Link])
Exemples de noms : java:app/ejb1/Bean1
java:global/drh/drh-ejb/EmployeManager pour référence
java:app/jdbc/employes
java:module/Bean1 à l’intérieur d’une application
Richard Grin Présentation Java EE page 29 Richard Grin Présentation Java EE page 30
5
Utilisation de JNDI Code pour récupérer un EJB avec JNDI
import [Link];
En interne par le serveur d’application ...
Le développeur utilisera le plus souvent l’injection try {
de dépendance qui est plus simple à utiliser InitialContext ic = new InitialContext();
MonEJB monEJB = (MonEJB)
L’injection de dépendance n’est pas toujours
[Link]("java:global/app/mod/MonEJB");
possible et il faut alors utiliser JNDI ; par exemple
...
pour l’écriture d’un validateur JSF } catch (NamingException e) {
[Link]();
}
Si c’est possible, plus simple d’injecter l’EJB !
Richard Grin Présentation Java EE page 31 Richard Grin Présentation Java EE page 32
Injecter un EJB
Ajouter une variable d’instance et l’injecter :
@EJB
Annexe
MonEJB monEJB;
Et c’est tout ! C’est le container qui va fournir
l’EJB au code
Changer les ports utilisés par GlassFish
Richard Grin Présentation Java EE page 33 Richard Grin Présentation Java EE page 34