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 1er 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 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 web 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 J2EE Couche Web Couche métier Conteneur Web Conteneur d'EJB J2SE Conteneur du client de l'application Client de l'application EJB JSP Servlet 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 Serveur J2EE Client mobile (téléphone, PDA, …) SOAP/XML over HTTP SOAP/XML over HTTP Couche Web Conteneur Web JSP Client divers hors Java (.NET, PHP, C, …) HTTP Servlet RMI Couche métier Client léger (Navigateur) Conteneur d'EJB RMI Client riche java (SWING, SWT) EJB EJB 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. 2. 3. 4. 5. 6. 7. La servlet est chargée au démarrage du serveur ou lors de la première requête La méthode init() est invoquée par le conteneur Lors de la première requête, le conteneur crée les objets Request et Response spécifiques à la requête 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 Grâce à l'objet Request, la méthode service() va pouvoir analyser les informations en provenance du client Grâce à l'objet Response, la méthode service() va fournir une réponse au client 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 Scores J D B C MajScores 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 26 JDBC 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