Transcript JEE - unBlog.fr
JEE
Java Enterprise Edition
Riadh Ouersighni
Maître de Conférence en Informatique Isitcom - 2010
1
Pédagogie du cours
Pré-requis: POO java, Architecture Répartie (Java RMI), COO, UML, Web, Design Pattern MVC, Cours : Présentation des concepts, technologies, API, frameworks du J2EE pour le développement d’application distribuée TD Etude de cas Architecture Logiciel TP Illustration des concepts vus en cours par des exemples pratiques Environnement de Développement J2EE Utilisation de frameworks (struts, hibernate, spring, etc.) Etudes de cas
2
Introduction J2EE
1998 : La plateforme J2EE (Java 2 Entreprise Edition) est née de besoins grandissant des entreprises pour développer des applications complexes distribuées et ouvertes sur l ’Internet, le mobile, etc.
Définie par Sun MicroSystems, basée sur Java Site officiel (anciennement java.sun.com ) http://www.oracle.com/technetwork/java/index.html
J2EE est le terme utilisé dans les versions avant 2005 (JDK 1.4 ou antérieur) J2SE (Java 2 Standard Edition) fournit le langage et la plateforme java sur lesquels est bâti J2EE J2ME (Java 2 Micro Edition) pour les terminaux mobiles
3
Introduction Java EE
Depuis la sortie de la version 5 (en 2005, JDK 1.5), Le terme J2EE a été remplacé par Java EE Actuellement (en 2010) Java EE 6 Autres éditons : Java SE 7 (Standard Edition) Java ME 3.0 (Micro Edition)
Java FX 1.3
plateforme pour la création d’application RIA (Rich Internet Application) basé sur le langage Java FX Script
4
Qu’est ce que le Java EE
(ou J2EE) La Plateforme JEE désigne les technologies Java utilisées pour le développement d'applications «d’entreprise » distribuées (Répartie, multi-couches, n-tiers) JEE est une plate forme fortement orientée serveur. Elle est composée de deux parties essentielles : 1.
un ensemble de spécifications pour une infrastructure dans laquelle s'exécutent les composants écrits en Java : un tel environnement se nomme serveur d'application.
2.
un ensemble d'API qui peuvent être obtenu et utilisé séparément.
5
Qu’est ce que le JEE
Un ensemble de spécifications d’API, une architecture distribuée et une méthode de packaging et de déploiement des composants.
C’est une collection de composants, de conteneurs et de services mis à disposition des applications permettant de créer et de déployer des applications distribuées au sein d’une architecture standardisée
6
Objectifs
Concevoir une infrastructure d’application distribuée n’est pas une mince affaire Un des objectifs du JEE : faciliter la vie des développeurs en permettant l’encapsulation de la complexité inhérente aux environnements distribués.
Les développeurs se concentrent uniquement sur l’aspect logique (métier) des données et de leurs processus et ne pas perdre du temps à coder l’aspect technique de leurs activités: Threading , transactions , sécurité , maintenance , échange de données entre systèmes et compatibilité , etc.
7
Architectures distribuées
Les applications à architectures distribuées sont des applications dont les fonctions sont réparties entre plusieurs systèmes. On les appelle aussi
architectures multi-tiers
(ou multi-couches) Chaque système contient une partie de l’application, les parties manquantes sont exécutées sur les autres systèmes participants à l’application et les informations sont échangées par le réseau
8
Architecture distribuée
Une application est composée de 3 couches fondamentales:
Couche de présentation
– interface utilisateur...
– Présenter les données à l’utilisateur
Couche Applicative / Logique métier
: – validation et traitement des données – modélisation des processus métiers (règles métier)
Couche d’accès de données / Persistence
9
Architecture distribuée
Architecture simple tiers (monolithique, un seul poste) Architecture 2 tiers ou client-serveur Architecture 3 tiers Architectures n-tiers (multiplication du nombre de couches fonctionnelles de plus en plus fines) On impose pas que toutes les couches d’une application fonctionnent sur des machines différentes Séparation logique fonctionnelle OU séparation physique des couches ?
10
1.
2.
3.
Répartition des fonctions
sur la couche présentation, une application cliente est chargée de l’affichage et de la saisie des données Client web léger, Application java client ou applets (RMI), Application client CORBA (IIOP ) sur la couche application, un serveur d’application maintient des composants métiers utilisés pour modéliser sous forme d’objet les processus de l’application Serveurs de: présentation, outils métiers, servlets,JSP , EJB sur la couche données, les serveurs du système d’information d’entreprise stockent les composants métiers bases de données relationnelles ou objets, intégrés (ERP), annuaires d’entreprise LDAP,…
IIOP :
l’Internet Inter-Orb Protocol (IIOP) utilisé pour transmettre des objets sur le réseau.
RMI : Remote Method Invocation..de java
11
Répartition des fonctions
La division du logiciel en plusieurs couches facilite la maintenance des applications et leurs permet de mieux s’adapter par exemple à une montée en charge 12
Exemple Répartition en couches : Cas du 3 Tiers
Considérons une architecture courante, celle à trois niveaux:
utilisateur Couche Interface 1 Couche Métier 2 Couche d’accès aux données (DAO) 3 Données
La couche [1], (User Interface) : dialogue avec l'utilisateur, via une interface. Elle a pour rôle de fournir des données provenant de l'utilisateur à la couche [2] ou bien de présenter à l'utilisateur des données fournies par la couche [2].
La couche [2], appelée ici [Métier] est la couche qui applique les règles dites métier, c.a.d. la logique spécifique de l'application, sans se préoccuper de savoir d'où viennent les données qu'on lui donne, ni où vont les résultats qu'elle produit.
La couche [3], appelée ici [dao] (Data Access Object) est la couche qui fournit à la couche [2] des données pré-enregistrées et qui enregistre certains des résultats fournis par la couche [2].
13
Exemple : Couche accès aux données
Il existe différentes possibilités pour implémenter la couche accès aux données. Le développeur peut diviser en tiers dotés de fonctionnalités spécifiques utilisateur Couche Interface 1 Couche Métier 2 Couche d’accès aux données (DAO) 3 Couche JDBC Base de données La couche [JDBC] est la couche standard utilisée en Java pour accéder à des bases de données. Elle isole la couche [dao] du SGBD qui gère la base de données. On peut théoriquement changer de SGBD sans changer le code de la couche [dao].
14
Suite Exemple : Couche accès aux données Pour isoler la couche [dao] des aspects propriétaires des SGBD. Une solution est celle du Framework Hibernate ou (JPA, TopLink dans JEE) Couche d’accès aux données (DAO) Objets image de la BD Couche Hibernate Couche JDBC BD La couche [Hibernate] vient se placer entre la couche [dao] écrite par le développeur et la couche [Jdbc] Hibernate est un ORM (Object Relational Mapping), un outil qui fait le pont entre le modèle relationnel des bases de données et celui des objets manipulés par Java Le développeur ne voit plus la couche [Jdbc] ni les tables de la BD. Il ne voit que l'image objet de BD, fournie par la couche [Hibernate]. Le pont entre les tables de la BD et les objets manipulés par la couche [dao] est fait principalement de deux façons : • par des fichiers de configuration de type XML • par des annotations Java dans le code, technique disponible depuis le JDK 1.5
15
Framework
Il existe des frameworks pour lier ces couches entre-elles. Par exemple
Spring
Le grand intérêt de Spring est qu'il permet de lier les couches par configuration et non dans le code Avec Java EE , une autre solution existe : implémenter les couches [metier] et [dao] avec des Ejb3 (Enterprise Java Bean 3)
16
Programmation par composants 1/2
Limites de la programmation usuelle plus adaptée à la programmation de “petits projets” (
programming in the small
) tout est à la charge du programmeur: la liaison entre les différentes couches de l’application (présentation, application, données), construction des objets utilisées sur les couches, la structure de l’application est peu visible et particulière à chaque application ( pas de généricité) l’évolution de l’application est difficile: ajout de fonctionnalités, modification des conditions d’installation, changement de la BD le développement, la génération des exécutables et leur déploiement ne sont pas standardisés
17
Programmation par composants 2/2
Programmation par composition (ou constructive) Elle est motivée par la réutilisation des logiciels déjà existants et propose de créer des applications réparties par assemblage de composants logiciels existants. C’est le concept du “programming in the large” où l’on définit des composants génériques qui sont ensuite réutilisables dans plusieurs applications.
18
Composants
Un composant est un module logiciel autonome, configurable et installable sur plusieurs plates formes.
Un composant: exporte des attributs, propriétés et méthodes, peut être configurable Les composants sont les briques de bases configurables d’une application par composition.
Parmi les différentes technologies de composants on peut citer : JavaBeans, Enterprise Java Beans, composants CORBA Etc.
19
Construction d’application par assemblage de composants
La création d’une application par assemblage de composants se distingue de l’ingénierie de développement classique car elle permet de: réduire les besoins en compétences techniques focaliser l’expertise sur les problèmes du domaine (logique métier) Réduire les coûts de développement et de maintenance
20
Principes de JEE (1/3)
L’architecture JEE est une architecture d’application distribuée à base de composants. Ces composants sont mis en œuvre par l’intermédiaire des conteneurs
Tiers Interface Tiers Services Web Tiers Métier Tiers Données Navigateur Conteneur Applet Internet Composant Client Applet/ Html/wml Serveur Web Conteneur Web Composant Web Servlet/JSP Serveur d’application Conteneur EJB Composant Métier Bean Serveur de bases de données Exemple Composants d’une application Web J2EE 21
22
Composants J2EE
Un composant est une unité logicielle de niveau applicatif.
JEE supporte les types de composants suivants : applets, application clientes, JavaBeans composants Enterprise JavaBeans (EJB), composants Web, composants adaptateurs de ressource etc
23
Les conteneurs JEE
Eléments fondamentaux de l’architecture JEE Les conteneurs JEE fournissent une interface parfaitement définie ainsi qu’un ensemble de services permettant aux développeurs de se concentrer sur la logique métier. Les conteneurs et serveurs implémentent les services et mécanismes de bas niveau utilisés par les applications: La communication entre les clients et les serveurs Le contrôle de la sécurité La gestion des transactions L’identification et la localisation des ressources
24
Conteneurs JEE
Les conteneurs et serveurs implémentent les mécanismes de bas niveau utilisés par les applications: transactions, persistance, gestion de la mémoire, sécurité Les spécifications J2EE s’intéressent aux activités d’une application liées: au développement, au déploiement, à l’exécution
25
JEE 4 types de Conteneur Couche client Conteneur d'applet Applet Java SE
Conteneur du client de l'application Client de l'applicatio n
Couche Web Conteneur Web JSP Servlet Java Mail JAF Java SE Base de données Couche métier Conteneur d'EJB EJB Java Mail JAF Java SE Couche SI
26
Clients JEE
La plateforme JEE puissent prévoit que plusieurs types de clients accéder à une même application et interagir avec les mêmes composants côté serveur: JEE peut supporter de nombreux types de clients: Web, WAP, stations de travails, téléphones portables, PDA
27
Clients JEE
Client web (léger) Client web RIA (Rich Internet Application) : Applets, Java Web Start, AJAX, Google Web Toolkit, Flex, JavaFX (autres version JavaFx pour mobile et pour TV) Client lourd : des applications clientes s'exécutent dans leur propre conteneur client. Les applications clientes ont des interfaces utilisateurs qui peuvent directement interagir avec le tier EJB en utilisant RMI-IIOP (Remote Methode Invocation over Internet Inter-Orb Protocol) ou encore application C++ utilisant CORBA.
Clients sans fil (J2ME pour les dispositifs sans fil).
WAP (Wireless Application Protocol) , wml (Wireless Markup Language)
28
Composants web
Un composant web est une une réponse à une requête.
entité logicielle qui fournit Les composants web génèrent habituellement l'interface utilisateur d'une application web.
La plate-forme JEE web : les servlets ; définit deux types de composants les JavaServer Pages (JSP).
JSF (Java Server Face)
29
Servlets (1/2)
Une « servlet » est un composant qui étend les fonctionnalités d'un serveur web de manière portable et efficace.
Un serveur web sont héberge des classes Java servlets qui exécutées à l'intérieur du conteneur web. Le serveur web associe une ou plusieurs URLs à chaque servlet et lorsque ces URLs sont appelées via une requête HTTP de l'utilisateur la servlet est déclenchée.
Quand la servlet reçoit une requête du client, elle génère une réponse, éventuellement en utilisant la logique métier contenue dans des EJBs classes javaBeans. Elle retourne alors une réponse HTML ou selon le client (XML, WML, javascript, ...)
30
Servlets (2/2)
Un développeur de servlet utilise l'API servlet pour : Initialiser et finaliser la servlet Accéder à l'environnement de la servlet Recevoir ou rediriger les réponses requêtes et envoyer les Interagir avec d'autres servlets ou composants Maintenir les informations de sessions du client Filtrer avant ou les réponses après traitement les requêtes et Implémenter la sécurité sur le tiers web
31
Java Server Pages
La technologie JavaServer Pages (JSP) fournit un moyen simple et extensible pour générer du contenu dynamique pour le client web.
Une page JSP contient : Des informations de formatage habituellement en HTML ou XML.
(modèle) du document web, Les concepteurs web peuvent modifier cette partie de la page sans affecter les parties dynamiques. Cette approche permet de séparer la présentation du contenu dynamique.
Des éléments JSP et de script pour générer le contenu dynamique du document Web.
La plupart des pages JSP utilisent aussi des JavaBeans et/ou des Enterprise JavaBeans pour réaliser les opérations complexes de l'application. Les JSP permettent en standard d'instancier des beans, de modifier ou lire leurs attributs et de télécharger des applets.
La technologie JSP est extensible en utilisant des balises personnalisées qui peuvent être encapsulées bibliothèques de balises personnalisées (taglibs) dans des
32
Conteneur de composants web
Les composants web sont servlets, conteneurs de JSP et conteneurs web (moteurs de servlets/jsp).
hébergés dans des conteneurs de En sus des fonctionnalités normales d'un conteneur de composants, un conteneur de servlets (servlets container) fournit les services réseaux par lesquels les requêtes et réponses sont émises.
Il décode également les requêtes et formate les réponses dans le format approprié.
Tous les conteneurs de servlets doivent supporter le protocole HTTP et peuvent aussi supporter le protocole HTTPS.
Un conteneur de JSP (JSP container) fournit les services qu'un conteneur de servlets.
mêmes Ces conteneurs sont (Web containers).
généralement appelés conteneurs web
33
Composants Enterprise JavaBeans
Les EJB : un des points forts du J2EE, maitresse de la plateforme Java EE c’est la pièce L'architecture Enterprise JavaBeans est une technologie côté serveur pour développer et déployer des composants java contenant la logique métier d'une application d'entreprise.
Le conteneur EJB charge les composants à la demande et invoque les méthodes en appliquant les règles de sécurité et en contrôlant les transactions A ne pas confondre avec les classes Java Beans
34
EJB
EJB offre une gamme de services implicites Gestion du cycle de vie (session) Gestion de l’état Sécurité Transactions Persistance Localisation des composants transparente (comparable à objets distribués RMI, CORBA) Répartition de charge => Le développeur se focalise sur les aspects métier
35
Les API Java EE
un ensemble d'API qui peuvent être obtenu et utilisé séparément.
API
Entreprise Java Bean (EJB) Servlets et JSP RMI (Remote Method Invocation) et RMI-IIOP JNDI Java Naming and Directory Interface JDBC (Java Database Connectivity) Java Transaction API (JTA) Java Transaction Service (JTS) Java Messaging service (JMS)
Rôle
Contenu web dynamique objet Java distribué. RMI-IIOP est une extension de RMI pour utiliser avec CORBA.
Accès aux services de nommage et aux annuaires d'entreprises, LDAP Accès aux bases de données. J2EE intègre une extension de cette API Support des transactions JavaMail JPA Support de messages via des MOM (Messages Oriented Middleware) Envoie et réception d'email Java Persistence API
36
Les API Java EE
API
JSF (Java Server Faces) Java API for XML Parsing (JAXP) Java Authentication and Authorization Service (JAAS) Java API for XML-based RPC (JAXP-RPC) SOAP with Attachments API for Java (SAAJ) J2EE Connector Architecture (JCA) Java IDL
Rôle
API pour le développement d'applications web (Interface graphique riche) avec JSP, la JSTL (JavaServer Pages Standard Tag Library) Swing, Ajax, WML Analyse et exploitation de données au format XML Echange sécurisé de données API XML Web services Connecteurs pour accéder à des ressources du système d'information de l'entreprises ERP ou progiciel intégré Utilisation de CORBA
37
Technologies J2EE
38
Technologies J2EE (1/2)
La plate-forme J2EE comme la plate-forme J2SE incluent un grand nombre de bibliothèques de code (API) prédéfinies pour les fonctions de base d'une application.
Les technologies mies en œuvre sont les suivantes : L'architecture J2EE Connector est l'infrastructure pour interagir avec une grande de variété systèmes d'information d'entreprise tels que des ERPs, des CRM, et autres progiciels.
L'API JDBC est programmes Java utilisée pour accéder à des données relationnelles à partir de La Java Transaction API (JTA) est un ensemble utilisée pour gérer et coordonner les transactions entre hétérogène de systèmes d'information d'entreprise.
L'API Java Naming and Directory Interface est nommage et d'annuaire de l'entreprise.
utilisée pour accéder aux services de L'API Java Message Service (JMS) est via les utilisée pour émettre et recevoir des messages approche systèmes de messagerie d'entreprise comme IBM MQ Series ou TIBCO Rendezvous. Dans l'architecture J2EE les Message Driven Beans fournissent une à base de composant pour encapsuler les fonctionnalités de messagerie.
La JavaMail API est utilisée pour émettre et recevoir des mails.
Java IDL est utilisée pour appeler des services CORBA L'API Java pour XML (JAXP) est applications existants et pour utilisée pour l'intégration avec les systèmes et implémenter les web services dans la plate-forme J2EE.
39
Le Design Pattern MVC
Le design pattern Modèle–vue–Contrôleur permet d’organiser une application en 3 composants principaux.
le Modèle correspond aux données de l’application (récupérées suite à l’ invocations des EJB, JavaBeans) la Vue est la présentation visuelle de l’application (JSP, Html) le Contrôleur, qui définit l’état de la vue en fonction des données gérées par le modèle (Les Servlets). Traitement des requête du client, choix de l’opération à executer,etc C’est une architecture logiciel : découpages et organisation des fonctionnalités de l’application selon des rôles bien définis
40
JavaBeans
Il est possible d’utiliser la technologie JavaBeans (package Beans.*) entre une page JSP et un beans pour obtenir une meilleure séparation entre Modèle, Vue et Contrôleur (Model View Controller – MVC).
41
Servlets
Les servlets sont des classes Java web en exécutées par le serveur réponse à une requête du client (en utilisant le protocole http).
Les servlets sont définies dans les packages suivants: javax.servlet, contient les classes génériques (indépendantes du protocole) des servlets. La classe HTTPServlet utilise la classe package pour indiquer un ServletException de ce problème de servlet.
javax.servlet.http, contient la classe de serlvet concue pour le protocole HTTP (classe HttpServlet).
En les général les servlets utilisent aussi le package java.io pour entrées/sorties système.
La classe HttpServlet utilise la classe IOException de ce package pour signaler les erreurs d'entrée-sortie.
42
Java Server Pages
La technologie JavaServer Page (JSP) permet de mettre des fragments de code java dans une page HTML statique.
Lorsque la page JSP est le serveur. Celui-ci chargée, le code java est exécuté sur crée une servlet correspondante, qui est ensuite compilée et exécutée en tâche de fond.
La servlet retourne une page HTML ou un rapport en XML qui peut alors être transmis au client ou subir d’autres traitements.
Les JSP sont définies dans une classe d'implémentation appelée le package Une page JSP est un document texte qui un objet décrit comment créer réponse (response) à partir d’un objet requête (request) pour un protocole donné.
Le traitement d’une page JSP peut entraîner la création et/ou l’utilisation d’autres objets.
Le protocole HTTP est le protocole utilisé par défaut.
43
Composants Enterprise JavaBeans
(2/3)
Il y a 3 types d'entreprise beans : les beans de sessions, messages.
d'entité et de Les beans de session et d'entité comportent 2 interfaces : une interface de composant et une interface home.
L'interface home définit les méthodes pour créer, trouver, supprimer et accéder aux méta-données d'un beans.
L'interface de composant définit les méthodes métiers du beans.
Le beans à message n'ont pas d'interfaces home et composant.
Les interfaces composant et home d'un beans sont locales ou distantes.
44
Composants Enterprise JavaBeans
(3/3)
Les interfaces distantes (remote interface) sont des interfaces RMI qui permettent au client du beans d'être situé n'importe où. Dans ce cas les arguments et valeurs de retour beans distant sont communiquées entre le client et le sérialisées pour être transportées sur le réseau, ce qui consomme des ressources.
Les interfaces locales impliquent que les clients du beans soient localisés dans la même machine virtuelle que le beans. Dans ces cas les arguments et valeurs de retours échangés sont transmis par référence. Cette méthode est plus performante que la méthode distante.
La section suivante donne un aperçu des composants EJB. Ils sont décrits en détail dans la suite du document.
45
Composants, conteneurs et
services
Les conteneurs fournissent aux composants un qui inclut accès aux APIs du J2SE, ce l'accès aux APIs Java IDL et JDBC 2.0 core.
Le tableau suivant conteneur.
résume les APIs accessibles en fonction du type de
46
Enterprise Java Beans (1/2)
Le terme Enterprise Java Bean recouvre deux notions: c’est le nom générique d’une architecture permettant la programmation répartie en Java c’est le nom de composants exécutés sur un serveur et appelés par un client distant Les EJBs n’ont en commun que le nom avec les Java Beans traditionnels, qui sont des composants côté clients utilisés pour obtenir une meilleurs séparation suivant le modèle MVC ( model – view – controller).
Les Enterprise Java Beans ont pour but de rendre les applications faciles développer, à déployer et à administrer.
à Les EJBs sont le indépendants de la plate-forme d’exécution, étant écrits en Java: déploiement d’un EJB se fait sans recompilation ni modification du code source.
Les spécifications EJB définissent une architecture pour la construction d’applications Java dont la partie serveur est construite à partir de composants Enterprise Beans.
47
Enterprise Java Beans (2/2)
Leurs caractéristiques principales sont les suivantes: les composants EB sont run anywhere) “écrits une fois, exécutable partout” (write once, ces composants sont des composants métiers de CORBA) côtés serveur (analogues aux objets Les EJBs ne sont pas les seuls composants application J2EE mais ils en sont la partie centrale.
exploités dans une Les EJBs résident sur le serveur d'EJB.
Leurs méthodes sont accessibles aux clients (tiers web, application autonome) en utilisant l'interface distante home du beans.
Cette interface décrit les méthodes du beans (paramètres…) et permet au client de les appeler.
Lorsqu'une méthode est déclenchée, l'appel est enveloppé dans un message RMI transmis au serveur d'EJB, qui méthode de l'ÉB et retourne le résultat au client dans un autre message RMI.
exécute alors la
48
Considérations sur les réseaux
Les clients J2EE peuvent types de réseaux.
être connectés par de nombreux La qualité de service permanente ou intermittente).
sur ces réseaux peut varier considérablement, suivant le type de liaison (débit, connexion Trois aspects du partie cliente : réseau impactent le développement de la le temps de latence du réseau n’est pas nulle, la bande passante le n’est pas infinie, réseau n’est pas toujours fiable.
Une application bien conçue prend en compte ces problèmes et leur apporte des solutions.
Le client rompue.
idéale connecte au serveur uniquement lorsque c’est nécessaire, transmets le minimum de données et se comporte raisonnablement bien lorsque la connexion avec le serveur est
49
Considérations sur la sécurité
Chaque type de qui limitent la réseau comporte des mesures de sécurité différentes, façon dont se connectent les clients.
Par exemple lorsque les clients se connectent par Internet, les communications transitent souvent par un firewall qui filtre laisse passer uniquement certains types de protocoles.
La plupart des firewalls sont hypertexte (HTTP) mais pas configurés pour laisser passer le protocole l’Internet Inter-Orb Protocol (IIOP) utilisé pour transmettre des objets sur le réseau.
Cet aspect incite à utiliser HTTP et non des services comme CORBA ou RMI qui utilisent le protocole IIOP pour le transport des données.
Les contraintes de sécurité affectent aussi l’identification des utilisateurs: quand le client et le serveur sont dans le comme cela peut même domaine de sécurité, être le cas dans une application intranet, l’authentification peut être très simple et utiliser le système d’authentification de l’entreprise dans le cas d’une application Internet les mécanismes à mettre en place sont nettement plus sophistiqués. L’architecture J2EE propose des mécanismes standards pour l’authentification.
IIOP : Internet Inter-Orb Protocol (RMI over IIOP) CORBA : Common Object Request Broker
50
Considérations sur la plate-forme d’exécution du client
Chaque plate-forme cliente influencent la conception de à des capacités propres qui l’application.
Par exemple un navigateur ne peut pas générer des graphiques et a besoin d’un serveur pour obtenir les graphiques sous forme d’images téléchargées à partir du serveur.
Un client programmable peut télécharger uniquement les données numériques et construire lui-même un graphique.
Une autre chose à prendre en compte est la prise en charge des formulaires par le client, qui varie suivant le type de terminal (grands écrans, souris et clavier sur une station de travail, petits écrans et boutons pour des téléphones portables…), et qui impose des limitations à la quantité de données manipulée par l’utilisateur sur son terminal.
Une application qui mettre en place des gère plusieurs types de plates-formes doit stratégies spécifiques pour distribuer les ressources en fonction du type de terminal client.
51
Règles de conception générales des clients J2EE
L’architecture J2EE encourage l’utilisation de clients légers, ce qui n’empêchent pas d’accomplir plusieurs fonctions sur le client J2EE: présentation de l’interface utilisateur: les vues de l’application peuvent être téléchargées à partir du serveur (navigateur) ou traitée sur le client (application), validation des saisies de l’utilisateur: bien que le serveur d’EJB ou le serveur de une données d’entreprise puissent vérifier eux aussi les données, première validation peut avoir lieu sur le client, communication avec le serveur: quand l’utilisateur sollicite une fonction gérée par le serveur, le client doit envoyer une requête vers le serveur dans un protocole compréhensible par les deux parties, gestion des informations états de l’application: les applications doivent conserver des d’états sur ce que fait l’utilisateur dans l’application (garder trace que l’utilisateur effectue un processus particulier…)
52
Règles de conception pour les navigateurs web
Les navigateurs sont le type de client le plus léger. Ils présentent les données à l’utilisateur et reposent sur le serveur pour les fonctionnalités de l’application.
Du point de vue du déploiement de l’application, les navigateurs sont la solution la plus attrayante: ils permettent de mettre facilement, quand à jour l’application le plus l’application change seul le côté serveur est modifié, ils sont présent sur un très grand nombre de plates-formes, notamment sur les terminaux mobiles
53
Présentation de l’interface utilisateur 1/2
Les navigateurs téléchargent les documents à partir d’un serveur.
Les documents contiennent les présenter les données.
données ainsi que des instructions pour Ces documents sont en JSP (et moins souvent tel que général construits dynamiquement à partir de pages à partir de servlets) et écrits dans un langage à balise l’Hypertext Markup Language (HTML).
Les langages à balises permettent d’avoir une présentation raisonnable quel que soit le navigateur utilisé.
Il y a des alternatives à HTML particulièrement pour les terminaux mobiles (Wireless Markup Language (WML), Compact HTML, (CHTML), Extensible HTML (XHTML) Basic, et Voice Markup Language (VoiceML)).
54
Présentation de l’interface utilisateur 2/2
Les navigateurs présentent l’avantage d’avoir une interface familière pour les utilisateurs et d’être largement déployés en entreprise.
L’inconvénient de ce type de client réside dans le manque de possibilité d’interactions avec l’utilisateur.
Il est possible d’utiliser des technologies comme AJAX, JavaScript en combinaison avec d’autres standards comme les CSS et le Document Object Model (DOM), et le XmlHttprequest.
Un autre problème plus important est le temps de réponse potentiellement faible des navigateurs.
Le client dépend du serveur pour la présentation donc il doit contacter le serveur à chaque modification de l’interface. Le client crée une connexion avec le serveur à chaque fois, ce qui peut induire des problèmes de temps de latence.
Envoyer les informations de les présentation en même temps que données peut entraîner une plus grande consommation de bande passante.
55
Technologies web spécifiques à J2EE 1/2
Les technologies web portables, utilisées sur un serveur J2EE sont sécurisées et standardisées.
Une application web est un assemblage de composants de serveurs web, de contenu et d’informations de configuration.
L’environnement d’exécution d’une application web est appelé le conteneur web (web container).
Tous les fichiers d’une application web sont contenus un fichier Web Application Archive (WAR) qui contient également un fichier de description de dépliement rédigé en XML.
Les spécifications de la plate-forme J2EE définissent un contrat entre le conteneur web et les composants web, qui cycle de vie des composants, les comportements que le composant implémente et les services que le serveur rend aux composants.
définit le
56
Technologies web spécifiques à J2EE 2/2
Les spécifications J2EE définissent 2 types de composants web :
les Servlets Java (“servlets”)
et les JavaServer Pages (pages JSP)
Une servlet est une classe Java qui produisant du contenu dynamique en serveur.
étend un serveur J2EE, réponse aux requêtes du Le serveur transmet les l’interface implémenter.
standard requêtes de services à la servlet via javax.servlet, que chaque servlet doit Une page JSP est une page HTML qui comporte des balises spéciales qui produisent du contenu dynamique personnalisé en fonction de la requête.
Les pages JSP sont habituellement déploiement.
transformées en servlets lors du
57
Le conteneur web
Une application J2EE est web.
exécutée à l’intérieur d’un conteneur Le conteneur web distribue les gère le cycle de vie des composants web et requêtes aux composants.
Il fournit aussi des interfaces standards pour accéder au contexte, notamment aux informations de session et aux informations sur la requête courante.
Le conteneur web fournit une interface consistante aux composants, indépendamment du serveur web, c’est ce qui permet de porter et déployer un composant sur différents serveurs web Java sans modification du code.
58
Servlets Java 1/2
Les servlets Java sont des classes qui serveurs web compatibles J2EE.
étendent les Une servlet produit du contenu dynamique en aux requêtes portant sur une ou plusieurs URLs.
réponse Les servlets sont des classes Java modification).
compilées portables tant au niveau du code source (car elles respectent les spécifications sur les Servlets Java) qu’au niveau binaire (car elles sont compilées en byte-code Java, par définition portable d’une plate-forme à l’autre sans En plus de produire du contenu dynamiquement, les servlets supportent plusieurs fonctionnalités applicatives.
59
Servlets Java 2/2
On peut ainsi d’évènements, en implémentant l’interface listener, ou déclencher un ou plusieurs servlets filters, des classes chargées de pré- ou post- traiter la requête ou la réponse d’une servlet lors de déclencher des servlets l’appel à sa méthode service.
en fonction Les servlets peuvent aussi peut alors supporter des être distribuables, le serveur web mécanismes d’équilibrage de charge et transmettre les informations de sessions entre les différents nœuds d’un cluster ; pour cela les servlets doivent être marquées comme distributable dans le descripteur de déploiement de l’application web et respecter des contraintes propres aux servlets distribuables.
Ces contraintes assurent que le code de la servlet continue fonctionner correctement lors du à déplacement d’un nœud de cluster à l’autre.
60
JavaServer Pages (JSP) (1/2)
Les JSP sont la technologie la plus appropriée pour les applications web qui produisent des données et pas la structure de base de la page.
pages Web dynamiquement en modifiant uniquement les champs de Une page JSP contient un balises modèle de document statique et des spécifiques pour inclure du texte ou exécuter une partie de la logique applicative.
Le contenu statique est servi comme du HTML normal.
61
JavaServer Pages (JSP) (2/2)
Les implémentées par toutes les implémentations de serveurs web Java.
spécifications JSP définissent un jeu de balises standards Les balises personnalisées et les éléments de script génèrent du contenu dynamique inclus dans la page lorsqu’elle est demandée.
Les pages JSP peuvent textuel ,mais sont générer n’importe quel type de contenu à l’origine prévues pour générer du contenu structuré tel que du HTML, XML, XHTML,….
Les pages JSP sont plus faciles à écrire que les servlets Cours JSP
62
Où utiliser les JSP ?
Les pages JSP sont habituellement utilisées pour créer du contenu structuré ou des données textuelles non structurées.
Elles sont valeur des particulièrement adaptées lorsque la données change entre les requêtes mais que leur structuration ne change pas (ou peu).
63
Utiliser les JSP pour la présentation des données
Les pages JSP sont particulièrement appropriées pour produire du contenu structuré.
Les vues pour visualiser les en HTML, XHTML et DHTML.
données d'une application d'entreprise sont traditionnellement Les pages JSP sont la suite).
utilisées lorsque le contenu est partiellement statique, avec quelques éléments remplis dynamiquement à l'exécution. Une page JSP contient une partie fixe appelée "template data" (à ne pas confondre avec les mécanismes de modèles décrits par Les balises endroits des personnalisées ou les éléments de script sont peuvent être placés à divers données statiques et sont substitués à l'exécution par du contenu dynamique.
Les pages JSP ne peuvent pas produire de contenu binaire et ne sont pas la production de contenu utiliser des servlets dans ce cas.
très adaptées à à grande variabilité ou à la direction de requêtes, on préférera Les pages JSP peuvent accéder facilement à la logique métier d'une application, en incluant des beans par exemple .
64
Utiliser les JSP pour générer du XML
Les pages JSP sont une bonne technologie pour structure fixe.
générer du XML avec une Elles sont particulièrement adaptées pour générer des messages XML dans des formats standards, où les balises sont fixes et où seules les valeurs d'attribut ou les données brutes varient entre les appels à la page.
Les documents XML peuvent aussi être générés à partir de modèles, en agrégeant par exemple plusieurs documents XML pour constituer un seul document composite.
65
Utiliser les JSP pour générer du texte non-structuré
Il est tout d'une JSP.
à fait possible de générer du texte brut (ASCII, Postscript) à partir Par exemple une JSP peut application.
générer les mails à envoyer aux clients d'une
66
Utiliser les JSP comme modèles (templates)
Les JSP peuvent aussi être utilisées pour agréger du contenu provenant de plusieurs sources, comme cela est expliqué par la suite.
67
Encodage des pages JSP
Les JSPs utilisent la classe javax.servlet.jsp.JSPWriter pour sur le flux de sortie (la réponse envoyée au client).
écrire le contenu Cette classe s' assure que le contenu envoyé au client est correctement encodé, mais cela à un impact : l'encodage automatique du texte empêche de produire du contenu bianire à partir d'une JSP.
68
Eviter d'utiliser trop de balises logiques
Les bibliothèques de balises standard fournissent des balises dites “logic tags” qui permettent de faire des boucles, des itérations, d'évaluer des expressions et de prendre des décisions conditionnelles.
Il faut elles éviter ce genre de balises qui finalement apportent peu de bénéfices car entraînent une séparation moins claire entre la présentation et la logique de l'application.
A la place, il vaut mieux qui fait appel implémenter la logique dans une balise personnalisée à un entreprise beans. Ainsi une fine couche de code (le gestionnaire de balises ou tag handler) lie la balise utilise ses personnalisée à un beans et méthodes. Cette approche permet de lier la vue (page JSP ou servlet) à un accès direct au modèle de données (contenu dans le beans), permettant ainsi de conserver la logique et la présentation séparées.
69
Utiliser les directives d'inclusion et les balises d'inclusion JSP à bon escient
La directive include des JSP et la balise jsp:include ont la des buts différents.
même syntaxe mais Une directive d'inclusion incluse le texte pas de traiter du contenu dynamique. L'inclusion a lieu lorsque la page JSP est compilée.
littéralement dans la page et ne permet Par exemple l'instruction suivante inclut une page dans la JSP lors de la compilation : <%@include file="header.jsp"@%> La balise JSP include inclut du contenu dynamique ou statique à chaque fois que la page est servie et permet donc d'inclure du contenu dynamique à l'exécution (à chaque fois que la page est servie).
70
Exemple
Il faut prendre en compte que le fait que le fichier est inclus la servlet (mais cette dernière solution réclame plus de temps).
à la compilation et donc résultante est plus grosse qu'une servlet qui inclut les pages à l'exécution A chaque fois qu'une page JSP est include, les pages demandée dans le cas d'un inclusion par la balise JSP liées ont recompilées.
De plus les composants conteneur) doivent utilisés (par exemple des JavaBeans ou d'autres objets fournis par le être re-déclarés dans chacune des pages inclues et partagés entre les pages via l'utilisation de l'objet HttpSession.
Les directives d'inclusion peuvent l'emporte) être problématiques pour supporter l'internationalisation.
Ainsi le header HTTP contentType:charset des pages inclues ne peut être assigné différemment dans les pages inclues et la page qui inclut. (le contentType de cette page Note d'implémentation: certains conteneurs web comme Tomcat ne prennent pas automatiquement en compte les modifications faites aux fichiers inclus par la directive include. Si vous changez un fichier inclus, il faut "toucher" (modifier la date de dernière modification) les documents parents qui incluent le fichier.
71
Utiliser des balises éléments de script personnalisées pour éviter les
Il est préférable d'utiliser des balises personnalisées plutôt que des éléments de script (scriptlets) pour les raisons suivantes : le code scriplet n'est pas le code scriptlet réutilisable mélange logique et présentation de l'application dans la même page le code scriptlet ne permet pas de bien séparer les rôles entre les développeurs de pages web et de code Java Un concepteur web aura par exemple du mal à modifier du code Java pour lui appliquer une présentation : <%out.println(""+text);%> le code scriptlet est plus difficile à lire et à maintenir que des balises personnalisées Les informations de débogage d'une scriptlet peuvent être difficiles à interpréter, en définissant du code associé à une balise personnalisée on peut localiser plus facilement l'erreur Le code de scriptlet est plus difficile à tester, avec des balises personnalisées, on dispose de composants personnalisés prêt à subir des tests unitaires Éviter de rediriger des requêtes à partir de pages JSP Quand une page JSP appelle RequestDispatcher.forward elle se comporte comme un contrôleur. Les contrôleurs sont de préférence implémentés dans des servlets, pas dans des composants de présentation.
72
Mauvais exemple de JSP se comportant comme un contrôleur
<%String creditCard =request.getParameter("creditCard"); if (creditCard.equals("Visa")){%>
73
Résumé 1/3
Le serveur web World Wide Web.
d’une application J2EE rend disponible les applications sur le Les pages JSPs et les servlets sont des composants web qui anciennes technologies portabilité inégalée.
succèdent aux côté serveur telles que les CGIs et qui assurent une Le conteneur web fournit des services de haut niveau aux composants web en matière de transactions,accès aux données, gestion des états, sécurité et distribution.
L’utilisation de bibliothèques de balises personnalisées améliore la qualité du code source et facilite la maintenance des applications.
Le patron de conception facilement.
Modèle-Vue-Contrôleur est recommandé pour la plupart des applications web interactives car il permet de créer des applications réutilisables, et d’ajouter de nouveaux types de clients, processus et vues
74
Résumé 2/3
Le serveur web d’une application est une couche de service neutre, habituellement conçu sur le modèle MVC, qui simplifie la création d’applications web interactives.
Le modèle de conception le plus simple a un seul contrôleur qui reçoit les requêtes des navigateurs, les distribue dans l’application et affiche les résultats.
Il est possible protocoles d’utiliser plusieurs contrôleurs web pour gérer nativement des clients web utilisant des différents.
Un mécanisme de modèles (templates) permet d’améliorer la mise en page des écrans de l’application.
Le vue mécanisme de modèle permet d’utiliser un fichier modèle pour assembler des vues individuelles en une composée sur l’application.
Les servlets sont principalement utilisées pour générer des données binaires et contrôler l’application.
Les pages JSP sont principalement données externes.
utilisées pour créer du contenu textuel et des références à des Les filtres de servlets peuvent JSP ou être utilisés pour étendre les fonctionnalités d’une servlet existante, d’un d’un autre filtre de servlet.
75
Résumé 3/3
Les états d’une application web ont 4 types de portées : portée application, portée session, portée requête et portée page.
Les états de portée session ont le plus d’impact sur la charge engendrée par une application web car ils sont proportionnels au nombre d’utilisateurs.
Il est les recommandé d’utiliser des beans de session avec états pour conserver données de session.
Les applications uniquement web peuvent stocker les informations de session dans les attributs de session HTTP.
Certains produits J2EE permettent augmenter sa encore disponibilité et sa scalabilité mais cette possibilité n’est pas standardisée.
à une application d’être distribuée pour Les servlets, JSP et balises personnalisées d’une application web distribuable doivent respecter des contraintes supplémentaires.
76
Composants Enterprise Java Beans
(entreprise java beans tiers) Dans une application J2EE multi-tiers, le tiers Enterprise JavaBeans héberge la partie de systèmeainsi que la gestion de la concurrence, des transactions et de la sécurité.
l’application concernant la logique métier et fournit les services La technologie EJB fournit un modèle de composants distribués qui permet aux développeurs de se concentrer sur les problèmes liés à la logique métier de l’application, en se reposant sur la plate-forme J2EE pour toutes les interactions complexes avec le système.
Dans le modèle de programmation J2EE les composants EJB sont le lien fondamental entre les composants de présentation hébergés par le tiers web et les données de l’application stockées sur les serveurs d’information de l’entreprise.
du système
77
Types de beans Il y a 3 types de beans: les beans de sessions (session beans), les beans et les beans à message (message-driven beans).
d’entité (entity beans) Les beans de session sont des beans seul client. Pour cette raison, les beans de session paraissent du point de vue du client comme anonymes.
destinés à contenir des ressources privées concernant un Les beans un d’entité sont des composants qui représentent la vue objet d’une entité stockée dans entrepôt de données persistant, comme une base de données.
Par rapport au beans de session, chaque beans la primary key.
d’entité peut être identifié par un attribut appelé Les beans à messages sont une nouveauté de l’architecture EJB 2.0 et sont supportés à partir de la plate-forme J2EE 1.3. Les beans à message sont des composants qui traite de manière asynchrone des messages délivrés par l’API Java Message Service (JMS).
Les sections suivantes des beans.
présentent les deux premiers types de beans et les principes généraux
78
Principe des beans Les EJBs sont des objets javax.ejb. Les EJBs sont dérivés de la classe de base EJBObject, contenue dans le package définies dans les spécifications EJB 2.0.
Ce sont des composants capables d’être exécutés en environnement distribué, avec des capacités transactionnelles et une gestion de la persistance.
La philosophie WORA : composants permettent “Write Once, Run Anywhere” a guidé la conception des EJBs. Ces d'étendre dynamiquement le comportement d'un serveur et de connecter facilement des applications à une BD.
Utiliser des EJB revient à “enficher” des entités autonomes sur une plate-forme applicative Java.
Les beans doivent implémenter deux types d'interfaces : - une interface home, chargée de créer et gérer les beans - une interface "normale" qui implémente les méthodes métiers des beans.
Ces interfaces peuvent être soient locales soit distantes.
En plus d'implémenter ces interfaces un beans dispose des caractéristiques décrites ci-après.
79