Cours Architecture des composants d entreprise Composants distribués pour l entreprise Introduction à Java EE EMSI Université de Nice Richard Grin Version O 1.3 6/10/15 20 h de cours et TPs Richard Grin, université de Nice Sophia Antipolis ; http://richard.grin.free.fr/emsi/casablanca Page du cours d origine sur le site Web de Michel Buffa : http://miageprojet2.unice.fr/intranet_de_michel_buff a/cours_composants_distribu%c3%a9s_pour_l'ent reprise_%2f%2f_ejb_2013-2014 Richard Grin Présentation Java EE page 2 Contrôle des connaissances Interrogation sans documents à la fin de la semaine (30 %) Projet (à 3) à rendre??**?? (70 %) Informations diverses Me fournir la liste électronique des étudiants : nom, prénom, email (sur 3 colonnes) Installer NetBeans 8.1, version Java EE (ou «All») sur ordinateur personnel Utilisation ordinateur personnel ou machines EMSI pendant TPs? NetBeans 8.1 installé sur machines EMSI? Mon tél. Maroc :??**?? Richard Grin Présentation Java EE page 3 Richard Grin Présentation Java EE page 4 Prérequis / Objectifs Prérequis : n HTML, HTTP n Bonne connaissance de Java n Servlets (les bases) Objectif : Développement d applications Web avec Java EE, en particulier avec JSF, JPA et les EJB Quels cours avez-vous déjà suivis? Servlet JSP JSF JDBC JPA EJB Richard Grin Présentation Java EE page 5 Richard Grin Présentation Java EE page 6 1
Plan du cours Introduction générale, Java EE et JNDI EJB JSF JPA Présentation de Java EE Plan de ce support Serveur d application et containers Composants Formats de distribution Profiles JNDI Richard Grin Présentation Java EE page 7 Richard Grin Présentation Java EE page 8 Architecture d une application d entreprise Les applications d entreprise modernes sont des applications multi-tiers Couches d une application Java EE Sécurité, transactionnel, Souvent Web et mobile DAO, ORM, Les «vrais» traitements Richard Grin Présentation Java EE page 9 Richard Grin Introduction Java EE page 10 Java EE 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) Autre solution : serveur RESTful (JAX-RS si Java) et interface utilisateur HTML(5)-JavaScript Richard Grin Présentation Java EE page 11 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 12 2
Développement n plus rapide n plus fiable Intérêt des composants 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 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 13 Richard Grin Présentation Java EE page 14 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 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 15 Containers Chaque type de composant Java EE est géré par un container qui fait partie du serveur d application : containers pour composants JSF, pour EJB, pour composants CDI, etc. Les containers interceptent 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! Richard Grin Présentation Java EE page 16 Exemple d interception L appel d une méthode d un EJB est intercepté par le container EJB qui n démarre une nouvelle transaction, juste avant de donner la main à la méthode n lance un commit de la transaction à la fin de l exécution de la méthode Format de distribution Une application Java EE est distribuée dans un fichier d archive (de type fichier jar/zip) Un fichier d archive peut contenir n des classes Java (simples classes, composants) n des ressources utilisées par le code Java (images, son, fichiers pour internationalisation, ) n des fichiers XML qui décrivent l application ou la façon de la déployer n d autres fichiers d archive Richard Grin Présentation Java EE page 17 Richard Grin Présentation Java EE page 18 3
4 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 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 non standardisées (source de données, clustering ) ; par exemple glassfish-resources.xml pour GlassFish Richard Grin Présentation Java EE page 19 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? Richard Grin Présentation Java EE page 20 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 21 Richard Grin Présentation Java EE page 22 Structure JAR pour EJB Structure WAR classes directement sous la racine Richard Grin Présentation Java EE page 23 Richard Grin Présentation Java EE page 24
5 Profile Profiles 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 25 Richard Grin Présentation Java EE page 26 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 27 Richard Grin Présentation Java EE page 28 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 donner des noms à des objets, des services ou des ressources Exemples de noms : java:global/drh/drh-ejb/employemanager java:app/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 29 Richard Grin Présentation Java EE page 30
6 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 java:module/bean1 nom de l EJB pour référence à l intérieur d une application Richard Grin Présentation Java EE page 31 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 32 Injecter un EJB Ajouter une variable d instance 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 33 Richard Grin Présentation Java EE page 34