Cours Serveurs d application et Java avancé Introduction au cours Serveurs d application et Java avancé ITU Université de Nice Richard Grin Version O 1.0.1 12/4/14 20 h de cours et TPs Richard Grin, université de Nice Sophia Antipolis ; http://richard.grin.free.fr/itu-madagascar Interrogation sans documents à la fin de la semaine (30 %) Projet (à 2 ou 3) à rendre fin mai 2014 (70 %) Richard Grin Présentation Java EE page 2 Prérequis / Objectifs Prérequis : n HTML, HTTP n Bonne connaissance de Java n Servlets Objectif : Développement d applications Web avec Java EE, en particulier avec JSF, JPA et les EJB Plan du cours Introduction générale, Java EE et JNDI EJB JSF JPA Richard Grin Présentation Java EE page 3 Richard Grin Présentation Java EE page 4 Plan de ce support Présentation de Java EE Serveur d application et containers Composants Formats de distribution Profiles JNDI Architecture d une application d entreprise Les applications d entreprise modernes sont des applications multi-tiers qui contiennent au moins les couches n interface utilisateur (souvent navigateur Web) n serveur d application dans lequel tournent les processus métier et les services associés (sécurité, transactionnel, ) n bases de données Richard Grin Présentation Java EE page 5 Richard Grin Présentation Java EE page 6 1
2 Couches d une application Java EE Java EE Sécurité, transactionnel, Souvent Web DAO, ORM, Les «vrais» traitements 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) Le plus souvent l interface utilisateur est de type Web, implémentée avec Java Server Faces (JSF) Richard Grin Introduction Java EE page 7 Richard Grin Présentation Java EE page 8 Serveur d application Les applications Java EE ne peuvent fonctionner qu avec un serveur d application qui suit les spécifications Java EE Un serveur d application est un logiciel qui sert de structure d accueil pour les applications Plusieurs serveurs d application Java EE L implémentation de référence de Java EE 7 est GlassFish 4.0 Services offerts par le serveur d application Sécurité, accès distants, accès à la base de données, concurrence, transactions, injection de dépendance, Grâce à des containers qui accueillent les composants Java EE Richard Grin Présentation Java EE page 9 Richard Grin Présentation Java EE page 10 Containers Chaque type de composant est géré par un container : Web, EJB, CDI, Les containers interceptent les appels aux composants pour ajouter des services non fonctionnels : transactions, gestion de la concurrence, cycle de vie des composants, 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 qui n peut démarrer une nouvelle transaction juste avant de donner la main au code de la méthode n peut lancer un commit de la transaction à la fin de l exécution de la méthode Richard Grin Présentation Java EE page 11 Richard Grin Présentation Java EE page 12
Application multi-tiers - containers 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 n réutilisables n configurables n qui respectent des interfaces définies par une spécification n qui peuvent être enfichés dans les applications qui respectent ces spécifications Richard Grin Présentation Java EE page 13 Richard Grin Présentation Java EE page 14 Intérêt des composants Développement n plus rapide n plus fiable n maintenance facilitée n pas besoin de compétences pointues dans le domaine métier du composant On peut espérer la naissance d une industrie du composant offrant plus de choix que ce qui est proposé aujourd hui Format de distribution Une application Java EE est distribuée dans un fichier d archive (de type fichier zip), qui réunit les divers composants Un fichier d archive peut contenir n des composants Java n des ressources utilisées par les composants n des fichiers XML descripteurs de déploiement n d autres fichiers d archive Richard Grin Présentation Java EE page 15 Richard Grin Présentation Java EE page 16 Fichiers descripteurs de déploiement Informent le serveur d application sur la manière de déployer une application Par exemple pour intégrer l application au système de sécurité utilisé par le serveur Java EE définit des fichiers descripteurs standards ; web.xml par exemple pour les applications Web Un serveur d application peut y ajouter ses propres fichiers pour des configurations spéciales non standardisées (source de données, clustering ) ; glassfish-web.xml pour GlassFish, par exemple Richard Grin Présentation Java EE page 17 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 Richard Grin Présentation Java EE page 18 3
4 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) : réunit des modules jar ou war Structure EAR Richard Grin Présentation Java EE page 19 Richard Grin Présentation Java EE page 20 Structure JAR pour EJB Structure WAR classes directement sous la racine Richard Grin Présentation Java EE page 21 Richard Grin Présentation Java EE page 22 Profiles 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 qui suffisent le plus souvent 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 23 Richard Grin Présentation Java EE page 24
5 EJB Lite Ne contient qu une partie de la spécification EJB : n beans stateless, stateful et singleton (donc pas EJB message, MDB) n interfaces locales seulement (pas d interfaces distantes) JNDI Java Naming and Directory Interface Richard Grin Présentation Java EE page 25 Richard Grin Présentation Java EE page 26 Généralités Dans une application distribuée, les composants ont besoin d accéder à d autres composants ou à des ressources (EJB, source de données JDBC, service de messagerie, ressource javamail, ) JNDI est une API Java pour utiliser des annuaires qui permettent de désigner des objets, des services ou des ressources en les associant à des noms Exemples de noms : java:global/drh/drh-ejb/employemanager jdbc/employes Utilisation de JNDI En interne le serveur d application utilise JNDI Pour retrouver les EJB et les ressources, 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 explicitement JNDI ; par exemple pour l écriture d un validateur JSF Richard Grin Présentation Java EE page 27 Richard Grin Présentation Java EE page 28 Noms JNDI des EJB EJB 3.1 a standardisé les noms JNDI des EJB (portable JNDI names) java:global/app1/ejb1/bean1 application module (fichier ejb1.jar) java:app/ejb1/bean1 nom de l EJB Richard Grin Présentation Java EE page 29 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) { e.printstacktrace(); } Si c est possible, plus simple d injecter l EJB! Richard Grin Présentation Java EE page 30
6 Injecter un EJB Ajouter une variable d instance du type de l EJB et l injecter : @EJB MonEJB monejb; Et c est tout! C est le container qui va fournir l EJB au code Annexe Changer les ports utilisés par GlassFish Richard Grin Présentation Java EE page 31 Richard Grin Présentation Java EE page 32