Cours Java EE Java EE Introduction EMSI - Université de Nice Sophia Antipolis Richard Grin Version O 1.8 3/12/16 18 h 30 de cours et TD/TP Site du cours : http://richard.grin.free.fr/emsi/rabat Interrogation sans documents à la fin du cours, sur les concepts et savoir-faire essentiels (40 %) Projet à rendre en février 2017 (60 %) Richard Grin Présentation Java EE page 2 Installation logiciels Qui n a pas fini d installer tous les logiciels sur son ordinateur personnel? Qui n a pas commencé le TP 1 jusqu à «Création de classes entités à partir d une base de données existante»? Prérequis : HTML, HTTP Prérequis / Objectifs 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 Introduction à Java EE (ce support) Suite du TP 1 EJB Introduction à CDI Fin du TP 1 (survol de JSF, EJB, JPA) ; Important de le finir JSF TP 2 (JSF et modèle PRG) TP 3 (templates de JSF) 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 Projet Thème : réseau social pour le partage de vidéos et de pages Web Terminer tous les TPs Faire TP 6 sur JSF et HTML5 et sur vidéos YouTube Optionnel : faire TP 7 sur sécurité Bien lire les problèmes rencontrés lors des projets des années passées Richard Grin Présentation Java EE page 6 1
Présentation de Java EE Composants Plan de ce support Serveur d application et containers Formats de distribution Profiles JNDI Architecture d une application d entreprise Les applications d entreprise modernes sont des applications multi-tiers Richard Grin Présentation Java EE page 7 Richard Grin Présentation Java EE page 8 Couches d une application Java EE Sécurité, transactionnel, Concurrence, Souvent Web et mobile DAO, ORM, Les «vrais» traitements Java Enterprise Edition Java EE Pas un produit ; spécifications (32 dans Java EE 7) pour écrire des applications d entreprise en Java 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 Autre solution Java EE (partiellement) Service Web de type REST (API Java JAX-RS) Interface utilisateur Web pas Java EE : HTML5 JavaScript, éventuellement avec surcouche de type Angular ou React Quelle solution choisir? JSF convient très bien quand l interface Web n est pas trop complexe et pour les applications qui n ont pas des milliers de clients Web Si l application est «single page», avec de très nombreux clients et du code JavaScript complexe, choisir la solution service Web REST et clients Web HTML5 JavaScript Richard Grin Présentation Java EE page 11 Richard Grin Présentation Java EE page 12 2
Composant Java EE utilise la notion de composant, en particulier pour les EJB et les composants JSF Sur le modèle des composants électroniques, les composants logiciels sont des boîtes noires réutilisables 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 13 Intérêt des composants Développement plus rapide, plus fiable Maintenance facilitée Pas besoin de compétences pointues dans le domaine métier d un composant acquis Industrie du composant logiciel? Pas encore Richard Grin Présentation Java EE page 14 Exemples Composant «métier» pour gérer la paie des employés Composant JSF qui affiche une carte «Google Map» dans l interface utilisateur Web Richard Grin Présentation Java EE page 15 Serveur d application Logiciel qui sert de structure d accueil pour les applications ; il leur fournit des services non fonctionnels 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 16 Containers Chaque type de composant Java EE est géré par un container qui fait partie du serveur d application : pour JSF, EJB, CDI, etc. Un container intercepte les appels aux composants pour ajouter des services non fonctionnels : transactions, gestion de la concurrence, cycle de vie des composants, injection de dépendance, Le développeur est ainsi libéré d une grande charge de travail! Exemple d interception L appel d une méthode d un EJB est intercepté par le container EJB qui démarre une nouvelle transaction, juste avant de donner la main à la méthode lance un commit de la transaction à la fin de l exécution de la méthode Richard Grin Présentation Java EE page 17 Richard Grin Présentation Java EE page 18 3
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 des attributs d un objet, gestion des transactions, ) 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 fichiers XML ou annotations Format de distribution d une application Java EE Richard Grin Présentation Java EE page 19 Richard Grin Présentation Java EE page 20 Fichier d archive Une application Java EE est distribuée dans un fichier d archive, de type fichier jar Un fichier d archive peut contenir des classes Java (simples classes, composants) des ressources utilisées par le code Java (images, son, fichiers pour internationalisation, ) des fichiers XML qui décrivent l application ou la façon de la déployer d autres fichiers d archive Richard Grin Présentation Java EE page 21 Fichier descripteur de déploiement Informe le serveur d application sur la manière de déployer une application Par exemple pour intégrer l application dans le système de sécurité utilisé par le serveur Java EE a des fichiers descripteurs standards ; web.xml pour les applications Web Un serveur d application peut y ajouter ses propres fichiers pour des configurations non standardisées (clustering, pools de connexions, ) ; par exemple glassfish-web.xml pour GlassFish Richard Grin Présentation Java EE page 22 Annotations et fichiers descripteurs XML De nombreuses annotations permettent de configurer une application directement dans les classes Java Le contenu des fichiers XML est ainsi allégé S il y a conflit sur une indication, c est le fichier XML qui l emporte Pourquoi? Types de fichiers d archive 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) : contient des modules jar ou war Richard Grin Présentation Java EE page 23 Richard Grin Présentation Java EE page 24 4
Structure JAR pour EJB Structure WAR Protégé des clients Web classes directement sous la racine Richard Grin Présentation Java EE page 25 Richard Grin Présentation Java EE page 26 Structure EAR Profiles Richard Grin Présentation Java EE page 27 Richard Grin Présentation Java EE page 28 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 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 EJB Lite Une partie de la spécification EJB : beans stateless, stateful et singleton (donc pas EJB message, MDB) interfaces locales (pas d interfaces distantes) Richard Grin Présentation Java EE page 29 Richard Grin Présentation Java EE page 30 5
Généralités JNDI Java Naming and Directory Interface Les composants ont besoin d accéder à d autres composants ou à des ressources (EJB, source de données JDBC, ressource javamail, ) JNDI, API Java pour utiliser des annuaires pour 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 31 Richard Grin Présentation Java EE page 32 Noms JNDI des EJB Noms JNDI des EJB standardisés java:global/app1/ejb1/bean1 application module (fichier ejb1.jar) java:app/ejb1/bean1 java:module/bean1 nom de l EJB à l intérieur d un module Utilisation de JNDI En interne par le serveur d application Le développeur utilisera le plus souvent l injection de dépendance qui est plus simple à utiliser L injection de dépendance n est pas toujours possible et il faut alors utiliser JNDI ; par exemple pour l écriture d un validateur JSF Richard Grin Présentation Java EE page 33 Richard Grin Présentation Java EE page 34 Code pour récupérer un EJB avec JNDI import javax.naming.initialcontext;... try { InitialContext ic = new InitialContext(); MonEJB monejb = (MonEJB) ic.lookup("java:global/app/mod/monejb");... } catch (NamingException e) {... } Injecter un EJB Ajouter une variable d instance et l injecter : @EJB private MonEJB monejb; Et c est tout! C est le container qui va fournir l EJB au code Si c est possible, plus simple d injecter l EJB! Richard Grin Présentation Java EE page 35 Richard Grin Présentation Java EE page 36 6
Documentation Annexe Oracle : https://docs.oracle.com/javaee/7/index.html dont le tutoriel : https://docs.oracle.com/javaee/7/tutorial/index.html Changer les ports utilisés par GlassFish Richard Grin Présentation Java EE page 37 Richard Grin Présentation Java EE page 38 7