cocoon - SDP

publicité
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<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
Téléchargement