Architecture des systèmes d information répartis L architecture multi-tiers Sorina Ionica 1
Présentation du cours Répartition des cours Cours + TD Services web Cours + TD JEE Sécurité web Contrôle des connaissances Contrôle continuu 1 er CC : le 31 octobre (a confirmer) Projet 2
Présentation J2EE : norme proposée par Sun Microsystems qui permet de développer des applications d entreprise distribuées Définition de standards ouverts permettant de construire des architectures à base de services à destination de l entreprise Elaborée sur la base du langage de programmation et des technologies java. 3
Avantages Produits qui s exécutent sur n importe quel système qui prenne en charge la plateforme J2EE Applications portables qui deviennent indépendantes des fabricants Architecture fournie par J2EE J2EE gère multithreading, synchronisation, allocation des ressources, gestion du cycle de vie Possibilité pour les développeurs de se concentrer sur les processus métier Standardisation => plus grand choix de produits interopérables + rentabilisation des investissements 4
Avantages API J2EE faciles à apprendre pour les développeurs java => augmentation de la productivité Développements plus rapides => réduction des délais de mise sur le marché et des coûts de développement Chaque composant d une application peut être développé indépendamment et réutilisé 5
Composants et conteneurs J2EE Composants web Servlets et JSP Composants de la couche web s exécutant dans un conteneur web Préparation dynamique du contenu Traitement et formatage liés à la présentation Composants métier EJB ou beans entreprise Composants professionnels à gros grain Gestion des données ou des traitements S'exécutent dans un conteneur d'un serveur d'application 6
Architecture multicouche J2EE Couche client Conteneur d'applet Applet Couche Web Conteneur Web J2EE Couche métier Conteneur d'ejb J2SE EJB Conteneur du client de l'application JSP Servlet Client de l'application JDK JDK JDK Couche SI Base de données 7
Composants client Applications client 1. Client léger : applications composées de pages HTML ; le module d'exécution est un navigateur 2. Client lourd : interface grafique évoluée ; traitement délégué aux composants métier Applets : - Petite application qui s'exécute dans le navigateur (nécessite le Java plug-in) 8
Diversité des types de clients Client mobile (téléphone, PDA, ) SOAP/XML over HTTP Serveur J2EE Couche Web Client divers hors Java (.NET, PHP, C, ) Client léger (Navigateur) SOAP/XML over HTTP HTTP RMI Conteneur Web JSP Servlet Couche métier Conteneur d'ejb EJB RMI EJB Client riche java (SWING, SWT) 9
Les servlets 10
Les servlets - Présentation (1) Définition Programme Java S'exécute dynamiquement sur le serveur Web Permet l'extension des fonctions du serveur web accès à des bases de données transactions d'e-commerce, etc. Peut être chargé automatiquement lors du démarrage du serveur Web lors de la première requête du client. Une fois chargés, les servlets restent actifs dans l'attente d'autres requêtes du client. 11
Les servlets - Caractéristiques Une servlet est une classe java issue des classes prédéfinies javax.servlet.* javax.servlet.http.* Créer une sous-classe de javax.servlet.http.httpservlet public class ServletDeBase extends HttpServlet{} 12
Les servlets - Développement Surcharger la méthode adéquate doget(httpservletrequest req, HttpServletResponse res); dopost(httpservletrequest req, HttpServletResponse res); import javax.servlet.*; import javax.servlet.http.*; public class ServletDeBase extends HttpServlet { public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException { } } // lecture de la requête // traitements // envoi de la réponse 13
Les servlets - cycle de vie 1. La servlet est chargée au démarrage du serveur ou lors de la première requête 2. La méthode init() est invoquée par le conteneur 3. Lors de la première requête, le conteneur crée les objets Request et Response spécifiques à la requête 4. La méthode service() est appelée à chaque requête dans un nouveau thread. Les objets Request et Response lui sont passés en paramètre 5. Grâce à l'objet Request, la méthode service() va pouvoir analyser les informations en provenance du client 6. Grâce à l'objet Response, la méthode service() va fournir une réponse au client 7. La méthode destroy() est appelée lors du déchargement de la servlet, c'est-à-dire lorsqu'elle n'est plus requise par le serveur. La servlet est alors signalée au garbage collector. 14
Les servlets - Développement Les contextes - un contexte = un fichier dans conf\catalina\localhost\servletstd1.xml <Context path="/servletstd1" reloadable="true" docbase="d:\eclipse\servletstd1" workdir="d:\eclipse\servletstd1\work" > <Logger classname="org.apache.catalina.logger.systemoutlogger" verbosity="4" timestamp="true"/> </Context> 15
Les servlets - Développement Déclaration des servlets dans le contexte Décrire la servlet dans le fichier D:\eclipse\ServletsTD1\WEB-INF\web.xml <web-app> <display-name>mes servlets</display-name> <description> Premières servlets </description> <servlet> <servlet-name>servlethello</servlet-name> <servlet-class>servletstd1.helloservlet</servlet-class> <description>servlet d'essai</description> </servlet> <servlet-mapping> <servlet-name>servlethello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app> 16
Les servlets - Développement Au niveau du conteneur Serveur Tomcat Contexte : TD1 HelloServlet Browser HTML Contexte : Tetris Apple t ChargerScores MajScores J D B C Scores Client Serveur 17
Les servlets et les BD Connections aux bases de données via JDBC La connexion reste toujours sur le serveur => sécurisation des données Connexion dans la servlet OU Possibilité de créer des pools de connexion 18
Accès aux données - JDBC 1.Créer une connexion à la base (DataSource) 2.Créer une requête (Statement) 3.Exécuter une requête 4.Traiter les résultats 19
Le JNDI JNDI (Java Naming and Directory Interface) Accès aux services de nommage et d annuaire Recherche de composants métier dans un environ. J2EE Inclut la prise en charge du protocole LDAP (Lightweight Directory Access Protocol), le service de nommage de CORBA et le registre RMI (Remote Method Invocation) 20
Le JNDI (Java Naming and Directory Interface) utilisée dans les spécifications de plusieurs API : JDBC, EJB, JMS,... Deux imports : import javax.naming.* ; import javax.naming.directory.* ; 21
Configuration Declaration de la ressource dans le fichier c:\serveur\tomcat5_5\conf\serveur.xml <!-- JNDI de la base test --> <Resource name="base_test" type="javax.sql.datasource" password="" driverclassname="com.mysql.jdbc.driver" maxidle="2" maxwait="500" username="root" url="jdbc:mysql://localhost/test?autoreconnect=true" maxactive="500" />
Configuration Declaration de la ressource dans le fichier conf\catalina\localhost\servletstd1.x ml <Context path="/servletstd1" reloadable="true" docbase="c:\eclipseworkspace\servletstd1" workdir="c:\eclipseworkspace\servletstd1\work" > <ResourceLink name="base_test" global="base_test" type="javax.sql.datasource"/> </Context>
Connexion Créer un objet de type Context pour chercher dans le contexte Context initctx = new InitialContext(); Context envctx = (Context) initctx.lookup("java:comp/env"); ds=(datasource) envctx.lookup("base_test"); La methode principale de DataSource est getconnection() : Connection BD=ds.getConnection();
Statement Obtenir un objet implémentant l'interface Statement Connection BD =... Statement stmt = BD.createStatement(); Exécuter une requête String s = "SELECT * FROM personne"; ResultSet r = stmt.executequery(s);
Requêtes pour la mise à jour Requêtes de mise à jour et de création e.g. update, drop, create Statement stmt = conn.createstatement(); int i = stmt.executeupdate("drop TABLE personne"); Observation : retournent un nombre JDBC 26
Traitement des résultats ResultSet r = stmt.executequery(s); while (r.next()) {... out.println(r.getstring("nom ")); out.println(r.getstring("prenom"));... }
TD1 : Mise en place de l'environnement Allez sur la page du cours : http://home.mis.u-picardie.fr/~ionica/asi.htm Installation - Serveur d'application qui execute le code et reponde aux requetes : Apache-Tomcat -Platforme de developpement : Eclipse -JDK : bibliotheques + outils compilation 28