XML dans les Serveurs d'applications 1. 2. 3. 4. 5. Serveurs d'applications : rappels L'interface DOM L'interface SAX XML, J2EE et .NET Conclusion G. Gardarin 1. Serveurs d'applications Java, un langage portable Mais aussi une plate-forme distribuée (J2EE) • XML est déjà le standard de description des composants • XML devient le standard de communication .Net la plate-forme concurrente de Microsoft Avantages de XML: • échange sécurisé sur HTTP • un message porte plusieurs objets • interopérabilité des Services Web Serveurs d'applications IV.2 G. Gardarin Architecture d’un serveur d ’appli. Client HTML Outils de développements Basé composants Applications légataires (Mainframes) ooo Client Java Noyau serveur d'applications Client COM Serveur HTTP Documents HTML/XML CGI RPC DCE RMI IIOP … Gestionnaire de Composants Gestionnaires de Messages Autres serveurs d'applications Gestionnaire de Données Services de Sécurité Gestionnaire de threads Gestionnaire de Connexions Client CORBA Bases de données Moniteur Transactions Files de messages …. Serveurs d'applications IV.3 G. Gardarin Principaux serveurs d’application WebLogic de BEA WebSphere Application Server d ’IBM Domino Application Server de Lotus -IBM iPlanet Application Server de Sun Oracle Application Server Sybase Enterprise Application Tomcat+Jboss (Open Source) Tomcat+Jonas (Open Source) Microsoft .NET, Vista & Indigo Serveurs d'applications IV.4 G. Gardarin Les dialogues sans XML Templates HTML (ASP,JSP) Compilation API Objet Instantiation/Activation requête Services HTML invocation SQL Objets Métiers BD Transactions/Requêtes URL longue HTML XA Trois modèles ! Serveurs d'applications IV.5 G. Gardarin XML et programme objet Les services sont souvent programmés en langage objet • Java, C++, C#, VB, PHP ... Java • • • • langage pur objet portable et sûr, semi-interprété le compilateur produit un fichier de byte code par classe possibilité de chargement dynamique de classe support du standard de composants JB et EJB XML • les messages XML doivent être traduits en objets • différents niveau d'interface : Flux d'événements (SAX) Traduction en objet génériques (DOM) Mapping sur objets métiers (Data Binding) Serveurs d'applications IV.6 G. Gardarin XML et les autres langages VB, C# • Possibilités similaires à Java (parseurs MS) C++ • Possibilités similaires à Java (parseurs libres) • Chargement dynamique de classe impossible PHP • Il existe des parseurs libres Serveurs d'applications IV.7 G. Gardarin 2. L'interface DOM Standard W3C fait pour HTML et XML Structure d'objets pour représenter un document • Résultat d'un "parser" • Arbre d'objets reliés entre eux Interface objet pour naviguer dans un document • Orientée objet • Peut être utilisée en: Java, C++ C#, VB Python, PHP DOM IV.8 G. Gardarin Principaux parseurs Document XML Xerces Apache (Java, C++) MSXML Microsoft SDK Oracle Oracle JAXP J2EE Sun, ... Parseur DOM Arbre DOM API DOM Application DOM IV.9 G. Gardarin Exemple d'arbre DOM Document Racine du document NodeList Element <Guide> NodeList Element <Guide> NamedNodeMap <Restaurant id="R1">Le meilleur restaurant</Restaurant> Attr Id="R1" NodeList </Guide> DOM <Restaurant> Text IV.10 Le meilleur restaurant G. Gardarin L'arbre DOM Navigation via un arbre générique de nœuds Node • Node • NodeList (Parent/Child) • NamedNodeMap Document ProcessingInstruction DocumentType <?xml:stylesheet ...> <!DOCTYPE ...> Element .... <Restaurant ....> Tout nœud hérite de Node Child Text Le meilleur restaurant DOM IV.11 G. Gardarin Quelques interfaces de base Document Nœud • insertBefore (Nouveau_Noeud, Noeud_Reference): • createElement (Nom_Element): créer un élément avec le nom spécifié en paramètre. insère un nouveau nœud fils avant le " nœud référence" déjà existant. • createComment (commentaire): • replaceChild (Nouveau_Noeud, Ancien_Noeud): créer une ligne de commentaires dans le document. remplace le nœud "Ancien_Noeud" par le nœud "Nouveau_Noeud". • createAttribute (Nom_Attribut): • removeChild (Nœud): créer un attribut avec le nom pris en paramètre. supprime le nœud entré en paramètre de la liste des nœuds. • getElementsByTagName (nom_Tag): • appendChild (Nouveau_Noeud): Ajoute un nouveau nœud a la fin de la liste des nœuds. retourne tous les descendants des éléments correspondants au Nom_Tag. DOM • hasChildNodes(): Retourne vrai si le nœud possède un enfant IV.12 G. Gardarin Autres interfaces Interfaces fondamentales • • • • • • • • Interfaces étendues XML DOMImplementation Document Comment DocumentFragment Element Attr(ibute) NamedNodeMap CharacterData • • • • • • ProcessingInstruction DocumentType CDATASection Notation Entity EntityReference Comment Text DOM IV.13 G. Gardarin Exemple d'utilisation Public class ExempleDOM public static main (String argc[]) throws IOException, DOMExcetion {XMLDocument xmlDoc = new XmlDocument(); // creation des nœuds ElementNode nom = (ElementNode) xmlDoc.createElement("nom"); ElementNode prenom = (ElementNode) xmlDoc.createElement("prenom"); ElementNode nomfam = (ElementNode) xmlDoc.createElement("nomfam"); // creation de l'arbre xmlDoc.appendChild(nom); nom.appenChild(prenom); prenom.appendChild(xmlDoc.createTextNode("Jean"); nom.appenChild(nomfam); Document: nomfam.appendChild(xmlDoc.createTextNode("Dupont"); <nom ville ="Paris"> // positionnement d'un attribut nom.setAttribute("ville", "Paris"); <prenom> Jean </prenom> // sortie <nomfa> Dupont </nomfa> System.exit(0); } } </nom> DOM IV.14 G. Gardarin Bilan DOM Une interface objet standard Extensions en cours : • Navigation dans l'arbre XML • Traitements spécifiques • DOM Level 3 : XPath Performance limitée • Place mémoire importante • Traitement à la fin de l'analyse Support direct de XPath Définition d'un XPath Evaluator Devrait être intégré aux parsers • DOM Level 3 : Events DOM 2.0 Modèle d'événements Associés à un nœud Propagés dans l'arbre DOM • Accède dynamiquement au contenu et à la structure du document • DOM Level 3 : Style Accès aux styles Mapping complet DOM IV.15 G. Gardarin 3. L'interface SAX SAX (Simple API for XML) • modèle simplifié d'événements • développé par un groupe indépendant. Types d'événement : • début et fin de document ; • début et fin d'éléments ; • attributs, texte, … . Nombreux parseurs publics • • • • SAX XP de James Clark, Aelfred, Saxon MSXML3 de Microsoft Xerces de Apache JAXP de SUN IV.16 G. Gardarin Principe de fonctionnement Méthodes utilisateur Evénement startDocument Document XML Stream XML Parser Evénement startElement …. Evénement endDocument Content Handler SAX IV.17 G. Gardarin Les méthodes essentielles XMLReader ErrorHandler • setContentHandler • setErrrorHandler • parse • fatalError • error • warning ContentHandler • • • • • SAX startDocument endDocument startElement endElement characters IV.18 G. Gardarin Exemple SAX et DOM <personne> <nom> Cover </nom> <prenom> Harry </prenom> <adresse> <rue> Stendhal </rue> <ville> Paris </ville> </adresse> </personne> SAX startDocument () startElement (personne) startElement (nom) characters (Cover) endElement (nom) startElement (prenom) characters (Harry) endElement (prenom) startElement (adresse) startElement (rue) characters (Stendhal) endElement (rue) startElement (ville) characters (Paris) endElement (ville) endElement (adresse) endElement (personne) endDocument () IV.19 personne nom #text: Cover prenom #text: Harry adresse rue #text: Stendhal ville #text: Paris G. Gardarin DOM versus SAX DOM utilise SAX pour la construction de l’arbre d’un document XML SAX est plus léger que DOM Au-dessus de DOM, il est possible d ’implémenter un « method caller » ... SAX IV.20 G. Gardarin 4. Le mapping objet (Data Binding) Définition • Mapping entre un document XML et un graphe d’objets métier C++ ou Java Développements manuels Objets C++ Parsing Xerces C++ XML Mapping Interface générée à l’aide d’outils de Data Binding Objets Java Parsing XDK Java XML IV.21 Objets Java Binding Java XML G. Gardarin Avantages L’activité de développement "parsing" est réduite • Gain en coût de développement des interfaces • Les applications peuvent se concentrer sur le fonctionnel • Les développeurs n'ont pas à se soucier du mapping XML Les Systèmes Techniques sont simplifiés • Capitalisation sur l’interface (utilisation, évolution, …) • Gain en terme de fiabilité (fin de l’utilisation de parseurs variés, parfois écrits à la main) • Les performances de l’interface sont optimisées Les outils de mapping sont intégrés aux serveurs • J2EE = JAXB • .NET = mapper Mapping IV.22 G. Gardarin Comment traiter les tags XML ? Tags connus • • • • déclenchement d'un traitement prédéfini appel de méthode associée avec paramètres transformation et stockage en BD génération de requête base de données Tags inconnus • • • • Mapping les ignorer : pas toujours satisfaisant les interdire (DTD, Schéma) : peu flexible leur appliquer un traitement standard : affichage, erreur, etc. rechercher le traitement approprié : bibliothèque Java IV.23 G. Gardarin XML: synthèse des outils <ville>Paris</ville> <pays>France</pays> <temp echelle="C">18</temp> <ville>Paris</ville> Bien formé <pays>France</pays> <temp Valide echelle="C">18</temp> Mal formé/Invalide XSL Stylesheet Manipulation de l'arbre XSLFO XSLT <city>Paris</city> <temp degree="F">65</te mp> WML Mapping XML (X)HTML PDF IV.24 <ville>Paris</ville> événements – call back Data Binder Parser XML SAX XML DOM XML Schema (ou DTD) Objets Métiers RTF, Word G. Gardarin 5. Plate-forme J2EE Java 2 Enterprise Edition Un langage + une architecture « standardisés » Supportée par plus de 50 constructeurs • SUN, IBM, Oracle, BEA … Architecture pour serveur d'applications • Plate-forme composée de conteneurs • Deux types de conteneurs Conteneur Web Conteneur EJB • Un ensemble d'API standards J2EE IV.25 G. Gardarin Architecture J2EE Serveur d'applications Conteneur EJB Conteneur web J2EE IV.26 JAX Java Mail JMS JTA JNDI RMI JAX Java Mail JMS Base de données JDBC EJB JSP JDBC JTA JNDI RMI Servlet Autres ressources G. Gardarin J2EE APIs JNDI JSP • accès aux services de nomination et de directory • DNS, NDS, NIS+, LDAP, COS • Java Server Pages et servlets • support HTML dynamique JMS RMI • invocation de méthodes Java à distance • Java Messaging Service JTA, JTS • Java transaction Service • basé sur OTS de Corba JIDL • Java IDL - interface Corba JavaMail • Envoie et réception de messages depuis Java J2EE JDBC • accès aux BD relationnelles JAX… • Interfaces pour XML IV.27 G. Gardarin Les API J2EE pour XML JAXP • Interface commune pour SAX, DOM, XSL • Pour traiter les doc. XML avec différents parsers JAXB • Interface de liaison avec des objets (EJB) JAXM • Interface pour envoyer des messages en SOAP • Synchrones ou asynchrones, avec attachements JAX-RPC • Invocation de méthode SOAP et collecte réponse • Permet la construction de services avec clients JAXR • Accès uniforme à des annuaires UDDI, ebXML, … J2EE IV.28 G. Gardarin Architecture .NET de Microsoft VB SOAP & XML C++ C# JScript … OLE-DB ASP.NET BCL.NET ADO.NET Toolkits Fédérateur de BD Common Language Runtime (CLR) Windows et COM+ Services .NET IV.29 G. Gardarin Les dialogues avec XML templates XSP TagLib XML/SOAP XSL Stub Skel. EJB XML XQuery BD XML/ SOAP Un seul modèle ! J2EE et .NET IV.30 XML JCA G. Gardarin Bilan Serveurs d'applications • Des composants objet • Une plate-forme distribuée • Des API pour XML Questions ? XML/SOAP • Le protocole de haut niveau • Peut intégrer les autres • Une nouvelle approche SOA Qu'en pense Bill Gates ? • .NET et ses outils • Une 3e idée géniale • Les Web Services … Java & XML IV.31 G. Gardarin