Les services Web (fin) Les architectures orientées composants Jeremy Fierstone Jean-marc Farinone 1 Résumé de l'épisode précédent 2 Les services Web Jeremy Fierstone Email : [email protected] SAR5 – Novembre 2002 Merci à Mireille Blay-Fornarino, Didier Donsez Michel Riveill, Microsoft, Sun … pour leurs slides 3 SOA : une architecture annuaire n o i t a e c c il n b o u n p n 1. ne a d'u 2. recherche d'un service fournisseur 3. mise en correspondance client de services JMF 4 Services web (= web services) ❚ WSDL = Web Services Description Language = format XML pour décrire un service web ❚ SOAP = Simple Object Access Protocol = protocole d'envoi de messages formatés en XML entre client et serveur web services ❚ La couche transport utilisé est soit HTTP (d'où le nom de web services) soit SMTP (i.e. le mail) ❚ échange de messages synchrones (en attente de réponse) ou asynchrone (publication, lecture de réponse plus tard) ❚ UDDI = Universal Description Discovery and Integration = annuaire de services qui recense des services Web. JMF 5 Les services Web WSDL : Web Services Description Language Merci à Didier Donsez 6 WSDL Spécification (09/2000) Objectif Décrire les services comme un ensemble d’opérations et de messages abstraits relié (bind) à des protocoles et des serveurs réseaux Grammaire XML (schema XML) Ariba, IBM, Microsoft TR W3C v1.1 (25/03/2001) Modulaire (import d’autres documents WSDL et XSD) Séparation entre la partie abstraite et concrète 7 WSDL Interface Implementation <definitions> <definitions> <import> <import> <types> <service> <message> <port> <portType> <binding> 8 Éléments d’une définition WSDL <types> Contient les définitions de types utilisant un système de typage (comme XSD). <message> Décrit les noms et types d’un ensemble de champs à transmettre <porttype> Spécifie une liaison d’un <porttype> à un protocole concret (SOAP1.1, HTTP1.1, MIME, …). Un <porttype> peut avoir plusieurs liaisons ! <port> Décrit un ensemble d’opérations. Chaque opération a zéro ou un message en entrée, zéro ou plusieurs messages de sortie ou de fautes <binding> Paramètres d’une invocation, valeur du retour, … Spécifie un point d’entrée (endpoint) comme la combinaison d’un <binding> et d’une adresse réseau. <service> Une collection de points d’entrée (endpoint) relatifs. 9 Élément <types> Contient les définition de types utilisant un système de typage (comme XSD). Exemple <!-- type defs --> <types> <xsd:schema targetNamespace="urn:xml-soap-address-demo" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <xsd:complexType name="phone"> <xsd:element name="areaCode" type="xsd:int"/> <xsd:element name="exchange" type="xsd:string"/> <xsd:element name="number" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="address"> <xsd:element name="streetNum" type="xsd:int"/> <xsd:element name="streetName" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string"/> <xsd:element name="zip" type="xsd:int"/> <xsd:element name="phoneNumber" type="typens:phone"/> </xsd:complexType> </xsd:schema> </types> 10 Outils Générateur WSDL à partir de déploiement SOAP ou EJB, … Générateur de proxy SOAP à partir de WSDL Toolkits (Wsdl2Java / Java2Wsdl, …) Propriétaires (non normalisés) 11 Les services Web UDDI : Universal Description, Discovery and Integration 12 UDDI Spécification (09/2000) Ariba, IBM, Microsoft +260 autres sociétés Objectifs annuaire mondial d'entreprises pour permettre d'automatiser les communications entre prestataires, clients, etc. plusieurs entrées indexées : nom, carte d'identité des sociétés, description des produits, services applicatifs invocables à distance (références des connexions) Indexation des catalogues propriétaires (ebXML, RosettaNet, Ariba, Commerce One, etc.) Grammaire XML (schéma XML) Soumission/interrogation basées sur SOAP et WSDL 13 Exemples d'annuaire UDDI moteur de recherche de service web : http://soapclient.com/uddisearch.html annuaires les plus connus : L’opérateur de référence UDDI : http://uddi.xml.org/ Microsoft : http://uddi.microsoft.com IBM : http://uddi.ibm.com 14 UDDI Schema Interface Implementation <businessEntity> <businessService> <tModel> <bindingTemplate> <businessService> <tModel> <bindingTemplate> 15 Références Services Web : SOAP : Spécification SOAP 1.1 : http://www.w3c.org/TR/SOAP Spécification SOAP 1.2 : http://www.w3c.org/TR/soap12 Implémentations : http://www.soapware.org Exemples en ligne : http://soapclient.com/soaptest.html UDDI : Spécifications officielles : http://www.w3c.org Documentations et exemples en ligne : http://www.xmlbus.com Spécification : http://www.uddi.org Serveur UDDI : http://uddi.microsoft.com et http://uddi.ibm.com Cours : Didier Donsez, Web Services Michel Riveill, SOAP 16 Un environnement pour WS : Axis Jean Marc Farinone Email : [email protected] 17 Un environnement pour des WS : Axis ❚ Page d'accueil : http://ws.apache.org/axis/ ❚ Cliquer sur les premiers liens pour charger une version d'Axis (1.4 le 28 mars 2008). On récupère un .zip à extraire. ❚ Axis est un environnement de développement pour WS (classes pour faire des services et clients WS) mais aussi une application Web. ❚ Voir tutorial d'axis à http://ws.apache.org/axis/java/userguide.html JMF 18 Développement d'un client et serveur WS ❚ Le service web sera encapsulé dans l'appli web Axis. ❚ Le client est un programme Java ❚ Un service web complet : Reponse.jws public class Reponse { public String reponds(String st) { return "bonjour " + st; } public String disCoucou() { return "Coucou "; } } ❚ Ben oui c'est une classe Java. Le fichier doit avoir pour extension .jws JMF 19 Le serveur WS Reponse.jws ❚ Il est placé dans l'application web Axis. ❚ Qui a la première utilisation, va compiler ce fichier Java, exécuter la méthode appelée et retourner le résultat (si tout se passe bien !) ❚ Une manière d'accéder à ce Web Service est, dans un client web, de demander la page d'URL : http://localhost:8080/axis/Reponse.jws ❚ Une démonstration SVP. OK ! ❚ Pourquoi cela fonctionne ? ❚ Réponse : en fait tout ce qui se termine par .jws est traité par la servlet AxisServlet (voir le web.xml de l'application web Axis) JMF 20 Le client WS HelloClient.java package hello; import import import import import org.apache.axis.client.Call; org.apache.axis.client.Service; org.apache.axis.encoding.XMLType; org.apache.axis.utils.Options; javax.xml.rpc.ParameterMode; public class HelloClient { public static void main(String [] args) throws Exception { Options options = new Options(args); String endpoint = "http://localhost:" + options.getPort() + "/axis/Reponse.jws"; args = options.getRemainingArgs(); if (args == null || args.length != 1) { System.err.println("Usage: java HelloClient [nom]"); return; } String nom = args[0]; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new java.net.URL(endpoint) ); call.setOperationName( "reponds" ); call.addParameter( "st", XMLType.XSD_STRING, ParameterMode.IN ); call.setReturnType( XMLType.XSD_STRING ); String ret = (String) call.invoke( new Object [] { nom }); System.out.println("resultat retourné } } JMF : \n" + ret); 21 Et XML (SOAP) dans tout çà ? ❚ Nous n'avons fait que (!) de la programmation Java. ❚ Quid de SOAP ? ❚ En fait les messages échangés entre le client et le serveur WS sont en SOAP. ❚ Si, si. JMF 22 TCPMonitor : tcpmon ❚ Axis propose un outil qui permet de voir les messages TCP échangés entre un client et un serveur : TCPMonitor ❚ Il suffit d'indiquer que le client envoit les messages à ... TCPMonitor, que TCPMonitor envoit les messages au serveur, et tout échange entre client et serveur est tracé dans cet outil. ❚ On lance cet outil par : java org.apache.axis.utils.tcpmon JMF 23 Utilisation de TCPMonitor 1/4 ❚ Le client est programmé par : String endpoint = "http://localhost:7777" + "/axis/Reponse.jws"; ... Service service2 = new Service(); Call call2 = (Call) service2.createCall(); call2.setTargetEndpointAddress( new java.net.URL(endpoint) ); .... ❚ Lorsque TCPMonitor est lancé on obtient le premier écran : JMF 24 Utilisation de TCPMonitor 2/4 ❚ Indiqué le port écouté dans le champ de texte qui suit dans "Listen Port #". Ici 7777. ❚ Et cliquer le bouton Add JMF 25 Utilisation de TCPMonitor 3/4 ❚ Dans le nouvel onglet obtenu, cocher "XML Format" et cliquer "Switch Layout". ❚ Puis lancer le client. ❚ Les messages véhiculés entre client et serveur WS seront affichés. JMF 26 Utilisation de TCPMonitor 4/4 JMF 27 Bibliographie ❚ http://fr.wikipedia.org/wiki/Service_Oriented _Architecture ❚ http://java.sun.com/javaee/5/docs/tutorial/do c/bnayk.html : la partie du Java EE 5 tutorial consacrée aux services web ❚ http://www.w3.org/2002/ws/desc/ : page d'accueil du "Web Services Description Working Group" ❚ http://ws.apache.org/axis/ : implémentation open source Axis pour construire des services web JMF 28 Architecture de composants Jean-Marc Farinone Maître de conférences CNAM Paris [email protected] 29 composant = ? (1/2) ❚ Un "programme" (du "logiciel") qui s'intègre bien avec d'autres ❚ En général qui s'intègre bien avec un environnement d'exécution ❚ environnement d'exécution = un conteneur ❚ Ce conteneur lui apporte des services (de création, de lancement automatique de méthodes, etc.) ❚ Le composant amène des parties applicatives 30 composant = ? (2/2) ❙ = un objet (donc méthodes donc code) qui vérifient quelques contraintes pour pouvoir bien se marier avec son environnement ❙ Souvent des "petites" contraintes syntaxiques ❙ L'environnement peut amener de grosses fonctionnalités (sécurité, transactionnel, etc.) ❙ exemple de composants Java : applet, JavaBeans, etc. 31 SCA : Service Component Architecture ❙ "= un ensemble de spécifications qui décrivent un modèle pour bâtir des applications s'inscrivant dans une architecture orientée service (appelée aussi SOA). ❙ Les applications basées sur SCA sont en fait un assemblage de composants, chaque composant implémente une partie de la logique métier et peut dépendre de services, ..." ❙ source : Wikipedia http://fr.wikipedia.org/wiki/Service_Component_Arc hitecture 32 SCA : une présentation ❙ A priori indépendant des langages de programmation et des couches réseau sous jacentes (HTTP, RMI, CORBA, ...) ❙ Les principaux acteurs : BEA, IBM, IONA Technologies, Oracle, SAP, Siebel Systems, Sybase ❙ Spécifications à : • http://xml.coverpages.org/SCAAssemblyModel-V09.pdf (SCA Version 0.9, November 2005) 33 Un exemple d'architecture de composants ❙ Java EE = Java Entreprise Edition (anciennement Java 2 EE) ❙ Amène une architecture pour de la programmation distribuée (RMI, JMS, …) et de composants (servlets, JSP, EJB, etc.) ❙ Pour les servlets/JSP : composants qui s'exécutent dans une JVM contenu dans un serveur (web) ❙ Pour les EJB : composants qui s'exécutent dans une JVM conteneur d'EJB 34 Une servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MaPremiereServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Etape 1. Spécifier le type MIME du contenu de la réponse response.setContentType("text/html"); // Etape 2. Récupère le PrintWriter pour envoyer des données au client PrintWriter out = response.getWriter(); // Step 3. Envoyer l’information au client out.println("<html>"); out.println("<head><title>Bonjour Servlet</title></head>"); out.println("<body>"); out.println("<h1> Bonjour à tous les étudiants de la valeur RSX102</h1>"); out.println("Il est : " + new java.util.Date()); out.println("</body></html>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } • Traité quand le navigateur demande l’URL ... qui mène à la JMF servlet ! 35 Une JSP • fichier MaDate.jsp <html><head><title>Obtenu par une JSP</title></head> <body> <h3>Bonjour de ma part </h3> <hr> La date courante est : <%= new java.util.Date() %> </body> </html> • Traité quand le navigateur demande l’URL de la JSP : http://serveurWeb:<port>/.../MaDate.jsp JMF 36 JSP et Servlets • Servlet = du code Java contenant de l'HTML • JSP = une page HTML contenant du code Java • Concrètement avec les JSP : – les parties statiques de la page JSP sont écrites en HTML – les parties dynamiques de la page JSP sont écrites en Java JMF 37 JSP, Servlets et Web services • Les servlets et JSP sont souvent des clients de web services • On a l'architecture : I n t e r n e t Serveur web dynamic build HTML Files JMF Servlets ou JSP Web service 38 Servlets vs. JSP : Architecture MVC • modèle = les données accédées par un code Java (JDBC, RMI, EJB, etc.) • vues = JSP • contrôleur = servlets JMF 39 Architecture MVC (suite) • Syntaxe dans la servlet pour lancer la JSP : public void doPost(HttpServletRequest request, HttpServletResponse response){ ServletContext context = getServletContext(); // héritée de GenericServlet RequestDispatcher dispatcher = context.getRequestDispatcher("/maPageMiseEnForme.jsp"); dispatcher.forward(request, response); } JMF 40 Les Entreprise JavaBeans (EJB) Jean-Marc Farinone [email protected] Maître de Conférences Conservatoire National des Arts et Métiers CNAM Paris (France) 41 L'idée essentielle ❚ Se concentrer sur la logique métier à développer (= modéliser, coder les notions du domaine, …) et sous-traiter les problèmes connus de : ❙ ❙ ❙ ❙ Persistance Transactions Sécurité Réserve (pool) d’objets, monter en charge, etc. à un conteneur. ❚ Donc fabriquer des composants qui s'intégreront bien entre eux et avec le conteneur ❚ C'est le "mariage entre le monde transactionnel et le monde des composants orienté objet" ❚ Version 3.0 depuis le 27 juin 2005 ❚ Compatibilité et interopérabilité avec les EJB 2.1 42 Architecture des EJB (1/2) ❚ On passe d'une architecture N-tiers classique : Couche Présentation Couche intermédiaire Couche Système d'information de l'entreprise RMI CORBA 43 Architecture des EJB (2/2) ❚ … à une architecture qui encapsule les composants Couche Présentation Couche Système d'information de l'entreprise Couche intermédiaire Serveur d'application EJB EJB 44 Ce qu'amène le conteneur ❚ amène des services de nommage, de gestion du cycle de vie, persistance, sécurité, transaction répartie ❚ ces services peuvent demander de lancer des méthodes fournies par le bean ❚ encapsulation d’un composant : les clients devront passer par le conteneur pour accéder à un EJB 45 Les différents catégories d'EJB ❚ EJB session modèlise une suite d'interactions ❙ sans état (stateless) : => plusieurs clients différents peuvent être associés au même EJB en même temps ❙ avec état (stateful) => c’est le même client qui utilise cet EJB session avec état pendant une suite d'invocations ❚ EJB entité modèlise des données ❙ BMP (Bean Managed Persistance) ❙ CMP (Container Managed Persistance) ❚ EJB orienté message (écoute derrière des files ou des sujets et sont activés de manière asynchrone) 46 Bibliographie ❙ http://cedric.cnam.fr/~farinone/Java : site pour la programmation Java et Java Entreprise Edition 47