XML dans les Serveurs d'applications Serveurs d'applications : rappels L'interface DOM L'interface SAX XML, J2EE et .NET Conclusion
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
Architecture d’un serveur d ’appli. Client HTML Applications légataires Outils de développements (Mainframes) Basé composants Client Java ooo Noyau serveur d'applications Serveur HTTP Documents Gestionnaire de Composants HTML/XML Autres serveurs CGI Gestionnaires de Messages d'applications Client COM RPC DCE Gestionnaire de Données RMI IIOP Services de Sécurité … Gestionnaire de threads Gestionnaire de Connexions Client CORBA Bases de données Moniteur Transactions Files de messages …. Serveurs d'applications
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
Les dialogues sans XML Services BD Trois modèles ! Objets Métiers Templates HTML (ASP,JSP) Compilation API Objet Instantiation/Activation SQL XA requête URL longue HTML Services invocation Objets Métiers HTML Transactions/Requêtes BD Trois modèles ! Serveurs d'applications
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
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
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
Principaux parseurs Xerces Apache (Java, C++) MSXML Microsoft Document XML Xerces Apache (Java, C++) MSXML Microsoft SDK Oracle Oracle JAXP J2EE Sun, ... Parseur DOM Arbre DOM API DOM Application DOM
Exemple d'arbre DOM <Guide> </Guide> Document Racine du document NodeList Element <Guide> NodeList <Guide> <Restaurant id="R1">Le meilleur restaurant</Restaurant> </Guide> Element <Restaurant> NamedNodeMap Attr Id="R1" NodeList Text Le meilleur restaurant DOM
Le meilleur restaurant L'arbre DOM Navigation via un arbre générique de nœuds Node NodeList (Parent/Child) NamedNodeMap Tout nœud hérite de Node Node Document ProcessingInstruction DocumentType Element .... <?xml:stylesheet ...> <!DOCTYPE ...> <Restaurant ....> Child Text Le meilleur restaurant DOM
Quelques interfaces de base Document createElement (Nom_Element): créer un élément avec le nom spécifié en paramètre. createComment (commentaire): créer une ligne de commentaires dans le document. createAttribute (Nom_Attribut): créer un attribut avec le nom pris en paramètre. getElementsByTagName (nom_Tag): retourne tous les descendants des éléments correspondants au Nom_Tag. Nœud insertBefore (Nouveau_Noeud, Noeud_Reference): insère un nouveau nœud fils avant le " nœud référence" déjà existant. replaceChild (Nouveau_Noeud, Ancien_Noeud): remplace le nœud "Ancien_Noeud" par le nœud "Nouveau_Noeud". removeChild (Nœud): supprime le nœud entré en paramètre de la liste des nœuds. appendChild (Nouveau_Noeud): Ajoute un nouveau nœud a la fin de la liste des nœuds. hasChildNodes(): Retourne vrai si le nœud possède un enfant DOM
Autres interfaces Interfaces fondamentales Interfaces étendues XML DOMImplementation Document Comment DocumentFragment Element Attr(ibute) NamedNodeMap CharacterData Text Interfaces étendues XML ProcessingInstruction DocumentType CDATASection Notation Entity EntityReference DOM
Exemple d'utilisation Document: <nom ville ="Paris"> 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); nomfam.appendChild(xmlDoc.createTextNode("Dupont"); // positionnement d'un attribut nom.setAttribute("ville", "Paris"); // sortie System.exit(0); } } Document: <nom ville ="Paris"> <prenom> Jean </prenom> <nomfa> Dupont </nomfa> </nom> DOM
Bilan DOM Une interface objet standard Performance limitée DOM 2.0 Navigation dans l'arbre XML Traitements spécifiques Performance limitée Place mémoire importante Traitement à la fin de l'analyse DOM 2.0 Accède dynamiquement au contenu et à la structure du document Extensions en cours : DOM Level 3 : XPath Support direct de XPath Définition d'un XPath Evaluator Devrait être intégré aux parsers DOM Level 3 : Events Modèle d'événements Associés à un nœud Propagés dans l'arbre DOM DOM Level 3 : Style Accès aux styles Mapping complet DOM
3. L'interface SAX SAX (Simple API for XML) Types d'événement : 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 XP de James Clark, Aelfred, Saxon MSXML3 de Microsoft Xerces de Apache JAXP de SUN SAX
Principe de fonctionnement Méthodes utilisateur Evénement startDocument Parser Document XML Stream XML Evénement startElement …. Evénement endDocument Content Handler SAX
Les méthodes essentielles XMLReader setContentHandler setErrrorHandler parse ContentHandler startDocument endDocument startElement endElement characters ErrorHandler fatalError error warning SAX
Exemple SAX et DOM 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 () <personne> <nom> Cover </nom> <prenom> Harry </prenom> <adresse> <rue> Stendhal </rue> <ville> Paris </ville> </adresse> </personne> personne nom prenom adresse rue ville #text: Cover #text: Paris #text: Stendhal #text: Harry SAX
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
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 Interface générée à l’aide d’outils de Data Binding Objets C++ Objets Java Objets Java Parsing Xerces C++ Parsing XDK Java Binding Java XML XML XML Mapping
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
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 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 Mapping
XML: synthèse des outils XML Schema (ou DTD) Manipulation de l'arbre XML <ville>Paris</ville> <pays>France</pays> <temp echelle="C">18</temp> <ville>Paris</ville> <pays>France</pays> <temp echelle="C">18</temp> XML DOM Parser Bien formé Valide événements – call back <ville>Paris</ville> SAX XSL Stylesheet Data Binder Mal formé/Invalide XSLT XSLFO Objets Métiers (X)HTML <city>Paris</city> <temp degree="F">65</temp> WML XML PDF RTF, Word Mapping
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
Architecture J2EE Serveur d'applications J2EE Conteneur web Conteneur EJB EJB Servlet JSP JNDI JDBC RMI JTA JMS JavaMail JAX JDBC JNDI RMI JTA JMS JavaMail JAX Base de données Autres ressources J2EE
J2EE APIs JNDI RMI JIDL JavaMail JSP JMS JTA, JTS JDBC JAX… accès aux services de nomination et de directory DNS, NDS, NIS+, LDAP, COS RMI invocation de méthodes Java à distance JIDL Java IDL - interface Corba JavaMail Envoie et réception de messages depuis Java JSP Java Server Pages et servlets support HTML dynamique JMS Java Messaging Service JTA, JTS Java transaction Service basé sur OTS de Corba JDBC accès aux BD relationnelles JAX… Interfaces pour XML J2EE
Les API J2EE pour XML JAXP JAXB JAXM JAX-RPC JAXR 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
Architecture .NET de Microsoft SOAP & XML Toolkits VB C++ C# JScript … OLE-DB Fédérateur de BD ASP.NET BCL.NET ADO.NET Common Language Runtime (CLR) Windows et COM+ Services .NET
Une évolution majeure en marche ... Les dialogues avec XML XML/SOAP XSL templates TagLib XSP XML XQuery JCA XML/ SOAP EJB Stub Skel. BD Un seul modèle ! Une évolution majeure en marche ... J2EE et .NET
Bilan Serveurs d'applications XML/SOAP Qu'en pense Bill Gates ? Des composants objet Une plate-forme distribuée Des API pour XML 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 … Questions ? Java & XML