COCOON ANTOINE CHEVERT , PASCAL LAMY PLAN Présentation Historique Introduction Installation Les intérêts de cocoon Fonctionnement de Cocoon Base de donnée Historique Cocoon 1 Initié en Janvier 1999 par Stefano Mazzocchi Associé au groupe Apache Basé sur l’API d’accès XML : DOM Cocoon 2 Sorti en Novembre 2001 Accès XML avec l’API SAX Centralisation des fonctions de management Supporte la pré compilation et la mise en cache Introduction Framework de publication Web Interaction avec de nombreuses sources de données (systèmes de fichier, bases de données relationnelles, LDAP, bases de données XML, etc.) Génération à partir de documents XML via le déclenchement d'évènements SAX, des contenus sous des formats variés (HTML, WML, PDF, SVG ,RTF). Permet de séparer : La gestion Le contenu La logique La présentation Installation Fonctionne sous Windows/Linux JDK pré-installé et JAVA_HOME déclarée COCOON est couramment associé au serveur d’application Apache TomCat ou Jetty 2.0.X avec Tomcat et jdk >= 1.2.2 Copie du fichier COCOON.WAR (Web Archive) Déploiement dans TomCat par simple copie. 2.1.4 avec le jdk >= 1.3 Version contenant d’origine le serveur d’application Jetty. Compilation avec ant Les Intérêts de cocoon Génération de différents formats de sortie Le modèle « pyramidal des contrats Web» Le langage XSP Un exemple Format d’Entrée - Format de sortie XML SGBD APPLICATION SERVEUR LDAP Word/EXCEL (Projet POI) JPG/ PNG RTF/TXT PDF/PS/PCL WML HTML XML Le modèle « pyramidal contrats Web » Concept de séparation des taches GESTION CONTENU LOGIQUE STYLE Facilite la réutilisation du code Le langage XSP XSP : eXtensible Server Page XSP est un document XML avec du code java imbriqué Le document XSP est compilé et exécuté avant de retourner le résultat Ce qui donne un document XML intermédiaire dans lequel les instructions java ont été remplacées par leur résultat,au format XML. Ce document XML intermédiaire est soumis a nouveau à un processus de Transformation,avec un programme XSLT, afin que le résultat produit(HTML,WML,PDF…)soit transmis au programme client. Un exemple <xsp:page language="java" xmlns:xsp="http://apache.org/xsp"> <document> <xsp:logic> SimpleDateFormat format = new SimpleDateFormat("EEE, MMM d, yyyy"); String timestamp = format.format( java.util.Calendar.getInstance().getTime()); </xsp:logic> <time><xsp:expr>timestamp</xsp:expr></time> <!-- additional elements --> </document> </xsp:page> Fonctionnement de Cocoon Architecture client serveur Mécanisme de Production Qu’est ce qu’un Pipeline Exemple de Pipeline Définition du fichier d’annuaire : sitemap.xmap Sitemap de l’application web Composant Cocoon Exemple d’application web Architecture client-serveur HTTP 8080 Serveur TOMCAT / JETTY COCOON Données Sérialisation Transformation Génération Mécanisme de Production CLIENT 1 6 TOMCAT COCOON 2 DOC XML 5 DOC HTML 3a 4 DOC WML INTERPRETEUR XSP INTERPRETEUR XSLT 3b DOC PDF INTERPRETEUR FOP 4 « PIPELINE » Fichier HTML XSLT Processor Fichier XML Fichier XSLT Sérialisation Transformation Génération Exemple de pipeline Requête ( matcheur ) <map:match pattern= "hello "> Génération <map:generate src="source.xml"/> <map:transform src="transform.xsl"/> <map:serialize type="HTML"/> Transformation (feuille de style) </map:match> Sérialisation (Format de sortie) SITEMAP.XMAP Annuaire des applications web Les sitemap Cocoon peuvent servir à plusieurs choses, en particulier la définition de composantes et une partie de la logique applicative. Les sitemap servent à déterminer, en fonction de l'URL d'appel, quel producteur, quel transformateur et quel sérialiseur utiliser. Matcher : extrait de l’URL les requêtes Generator : emplacement de la donnée source (fichier, requête) Transformer : règles de transformation (xslt) Serializer : format de sortie (html, pdf, xml… Ces informations sont spécifiées à l'aide de pipelines . SITEMAP.XMAP suite Il est possible de référencer une application web autrement que par le sitemap principal. Il s’agit de créer un fichier sitemap.xmap dans le répertoire de l’application. Il suffit de relier ensuite le sitemap principal au sitemap de l’application. Composant Cocoon A l'heure actuelle, plus de 70 à 80 composants sont présents dans la version cocoon 2.1. GeneratorDirectoryGenerator : convertit la liste des fichiers d'un répertoire en format XML duquel sont produits des événements SAXGenerator FileGenerator: Parse un fichier ou une URI et produit des événements SAXGenerator JSPGenerator : génère du XML et des événements SAX à partir d'une page JSPGenerator ServerPagesGenerator génère du XML et des événements SAX à partir d'une page XSP Transformer XSLTransformer Transforme des évènements SAX d'après une définition XSLTSerializer HTMLSerializer Produit de l'HTML d'après du SAXSerializer PDFSerializer Produit du PDF d'après du SAX (utilisant Apache Formatting Output Processor (FOP)) Serializer SVG2JPGSerializer Produit un JPEG d'après des évènements SVG SAX events (utilisant Apache Batik) Exemple d’application web Fichier XML:toto.xml Fichier XSLT:toto.xsl Fichier sitemap.xmap Le fichier toto.xml sera transformé en fichier HTML Fichier toto.xml <?xml version="1.0"?> <page> <titre>Comment tu vas mon canard!</titre> <para>premiere application web</para> </page> Fichier toto.xsl <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="page"> <html> Récupération de la valeur titre du <head> <title> document toto.xml <xsl:value-of select="titre"/> </title> </head> <body bgcolor="white"> <xsl:apply-templates select="para" /> </body> Application de la règle para </html> </xsl:template> <xsl:template match="para"> <H1><xsl:apply-templates/></H1> </xsl:template> </xsl:stylesheet> Récupération de la valeur para du document toto.xml Sitemap de l’application web <?xml version="1.0"?> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:pipelines> <map:pipeline> <map:match pattern="toto"> <map:generate src="toto.xml"/> <map:transform src="toto.xsl"/> <map:serialize type="html"/> </map:match> </map:pipeline> </map:pipelines> </map:sitemap> Base de donnée Fichier de configuration Cocoon.xconf Comment configurer une base de donnée Comment accéder à une base de donnée avec XSLT avec XSP COCOON.XCONF C’est le fichier de configuration de cocoon Il gère Les paramètres de cache Paramètre de rechargement sitemap Paramètre de base de données Extension utilisée pour xsp Gestion des Threads Etc … Pour accéder à une base de données Copier le driver dans la librairie de cocoon et le déclarer simplement dans web.xml Déclarer la base de données dans cocoon.xconf comme suit : Exemple de déclaration d’une base de données dans cocoon.xconf <jdbc name=« monPool »> <pool-controller min=« 5 » max=« 10 »/> <dburl>jdbc:mysql://localhost/maBase</db url> <user>root</user> <password></password> </jdbc> Exemple d’application web en xslt avec connexion à la base de données Fichier XML:sqlexemple.xml Fichier XSLT:sqlexemple.xsl Pipeline correspondant au sitemap.xmap Fichier sqlexemple.xml Affichage des titres des colonnes <?xml version="1.0"?> <document> Appel de la <col1>ressources</col1> bibliothèque sql <col2>descriptif</col2> <sql:execute-query xmlns:sql="http://apache.org/cocoon/SQL/2.0"> <sql:use-connection>pool1</sql:use-connection> <sql:query> select nom,descriptif from session </sql:query> </sql:execute-query> </document> Sélection du pool de connexions défini dans cocoon.xconf Fichier sqlexemple.xsl <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sql="http://apache.org/cocoon/SQL/2.0"> <xsl:template match="document"> <html> <body bgcolor="#FFFFFF"> <center><table width="75%" border="0"> <tr> <td bgcolor="#CC0033" align="center"><font color="#FFFFFF"><xsl:value-of select="col1"/></font></td> <td bgcolor="#CC0033" align="center"><font color="#FFFFFF"><xsl:value-of select="col2"/></font></td> </tr> <xsl:apply-templates select="sql:rowset/sql:row"/> </table> </center> </body> </html> </xsl:template> <xsl:template match="sql:row"> Règle sql:row qui <tr><xsl:apply-templates/></tr> passe à la ligne </xsl:template> <xsl:template match="sql:nom|sql:descriptif"> suivante <td bgcolor="#0066CC"><font color="#FFFFFF"> <xsl:value-of select="."/></font> </td> </xsl:template> </xsl:stylesheet> Règle sql:rowset qui affiche le résultat de la requête SQL Pipeline défini dans le sitemap.xmap <map:pipeline> <map:match pattern="requete"> <map:generate src="sqlexemple.xml"/> <map:transform type="sql"> <map:parameter name="use-connection" value="Pool1"/> Définition du pool </map:transform> de connexion référencé dans le <map:transform src="sqlexemple.xsl"/> cocoon.xconf <map:serialize/> </map:match> </map:pipeline> XSP 1 Solution concurrente au serveur page mais version xml Se place AVANT les transformations en html ou pdf, au niveau des fichiers xml dans le pipe XSP 2 Les balises à préfixe xsp ne seront pas visibles dans le code xml généré Le code java est inclus dans le xml sous forme de logicsheet que l’on doit déclarer dans l’entête de la page Exemple valid.xsp <?xml version="1.0" encoding="ISO-8859-1"?> <xsp:page Déclaration des language="java" logicsheets utilisées xmlns:xsp="http://apache.org/xsp" xmlns:esql="http://apache.org/cocoon/SQL/v2" Pool utilisé xmlns:xsp-request="http://apache.org/xsp/request/2.0> <page><esql:connection><esql:pool>monPool</esql:pool> <esql:query>select nom_prenom from copain where Requête & paramètre '<xsp-request:get-parameter name="idlogin"/>' = nom_prenom and '<xsp-request:get-parameter name="idpassword"/>' = description</esql:query> <esql:results>vous existez bien dans la base</esql:results> <esql:no-results>vous n'etes pas identifiés dans la base !!!</esql:no-results> <esql:error-results>error</esql:error-results> </esql:execute-query> Affichage des résultats </esql:connection> </page> </xsp:page> Utilisation balise <esql:../> valid.xsp <?xml version="1.0" encoding="ISO-8859-1"?> <xsp:page Déclaration des language="java" logicsheet utilisées xmlns:xsp="http://apache.org/xsp" xmlns:esql="http://apache.org/cocoon/SQL/v2" xmlns:xsp-request="http://apache.org/xsp/request/2.0" Pool utilisé > <page><esql:connection><esql:pool>monPool</esql:pool> Requête &paramètre <esql:query>select nom_prenom from copain where '<xsp-request:get-parameter name="idlogin"/>' = nom_prenom and '<xsp-request:get-parameter name="idpassword"/>' = description</esql:query> <esql:results>vous existez bien dans la base</esql:results> <esql:no-results>vous n'etes pas identifiés dans la base !!!</esql:no-results> <esql:error-results>error</esql:error-results> Affichage des </esql:execute-query> </esql:connection> résultats </page> </xsp:page> Utilisation d'un code java <xsp:page language="java" xmlns:xsp="http://apache.org/xsp"> <elements> <xsp:logic> { for (int i=1; i&lt;11; i++) { <element><xsp:expr>i</xsp:expr></element> } } </xsp:logic> </elements> </xsp:page> Les Actions Utilisés au niveau du SITEMAP.XMAP Notion de dérivation du Pipe Code livré avec COCOON, fiable et natif Plusieures formes d'action prises en charge par cocoon : ActionDatabase ActionForm(dérivé de Struts) Action redirect-to Etc... Code source minimale d'action public abstract class AbstractAction extendsAbstractLogEnabled implements Action { protected static final Map EMPTY_MAP = Collections.unmodifiableMap(new TreeMap()); } Que supporte Cocoon? Toutes les bases de données du moment qu’il y a un driver en java Java, JavaScript, jsp, ejb, Perl Technologie Struts pré installé en 2.1 pour se mettre en accord avec le w3c pour la validation des formulaires html Possibilité d’étendre les fonctionnalités de cocoon en ajoutant des briques d’Avalon Difficultés rencontrées Aucune éditeur graphique Compréhension des actions Documentations insuffisantes ou obsolètes en anglais DEBUG Syntaxe Compilation 2.1.X sous linux Conclusion Outil de publication puissant Connaissance du monde XML indispensable Intéressant pour des sites multiplateformes En savoir plus Cocoon : Building XML Application Éditeur : New Riders Cocoon 2 Programming Éditeur: Sybex http://cocoon.apache.org/ http://www.planetxml.com http://Wiki.cocoon.dev.org http://cortes.cnam.fr:8080 LE PROJET Architecture du Projet NET Agent de capture SGBD Cocoon Réalisation du Projet Agent de capture réalisé en Perl Base de données Mysql JDK 1.3 Serveur Tomcat 3.02 Cocoon 2.0