Cocoon y XSPs
Cocoon es un sistema de publicación electrónico basado en XML/XSL orientado a documentos.
Es 100% Java y está basado en estándares. Además es probablemente el framework de
este tipo más maduro y reconocido. Como publishing framework aporta las ventajas descritas
en el apartado anterior y además tiene características de valor añadido como:
- Open source.
- Altamente configurable y personalizable.
- Incorpora la característica de poder escribir páginas de servidor aptas para el trabajo con XML (XSPs).
- Permite diferenciar el procesado del documento en función del dispositivo o tipo de software que realiza la petición.
- Incorpora un sistema de caché que permite un rendimiento muy elevado.
Cocoon puede trabajar como un programa en línea de comandos pero su uso normal es como Servlet para la publicación a través de la Web.
Estructura de Cocoon
Desde el punto de vista estructural Cocoon se compone principalmente de los siguientes
elementos:

- Productores: Son las fuentes del XML. Pueden ser desde ficheros XML estáticos
hasta objetos Java que generen XML dinámicamente. Dentro de los productores
cabe destacar las XSP (eXtensible Server Pages). Son parecidas a las JSP sólo
que en lugar de compilar a un servlet, compilan a un Producer, que es la interfaz
que debe implementar cada productor de XML que se integre con Cocoon.
- Procesadores: Son los encargados de tratar el XML de los productores y
someterlo a diversos procesos consecutivos. Por ejemplo las XSP son
transformadas a clases Java por un procesador, otro procesador permite hacer
peticiones a bases de datos en función de instrucciones en XML y otro por
ejemplo puede aplicar transformaciones XSL al XML.
- El Reactor: Es la pieza central encargada de extraer del xml generado por los
productores las instrucciones de proceso que determinan que procesadores
actuarán. Como estas instrucciones pueden ser cambiadas por los procesadores
se puede alterar dinámicamente el flujo de proceso del xml.
- Formateadores: Son los encargados de recoger la representación interna del
xml resultante de los procesadores y prepararlo para enviarlo como respuesta al
cliente en el formato adecuado (texto, html, xml, wml...).
Cabe destacar que Cocoon es un producto muy abierto. Podemos crearnos nuestros
propios productores, procesadores y formateadores e integrarlos perfectamente. Además
podemos cambiar el parser XML y el motor de transformación XSL por el que más nos
convenga.
Para aprender más acerca de cómo crear Producers y Formatters se puede visitar
http://xml.apache.org/cocoon/dynamic.html.
Funcionamiento de Cocoon
A nivel funcional, el trabajo de Cocoon desde una petición del usuario a la devolución del
documento final, a grandes rasgos, pasa por las siguientes fases:
- El usuario pide un documento.
- Se analiza la petición para saber a que productor de XML corresponde.
- El productor genera un documento XML.
- El reactor extrae las instrucciones de proceso del documento y se lo pasa al
procesador adecuado. Y así sucesivamente hasta que no queden más instrucciones a
procesar. Hay que tener en cuenta que los procesadores pueden añadir más
instrucciones de proceso.
- El resultado le llega al formateador. Si es un documento final le aplica el formato
solicitado según el tipo de documento y se le envía al cliente. Si lo que llega es código
ejecutable (XSP compilada), el Loader lo recoge y lo coloca como productor empezando
otra vez desde el paso 3.
Este sería un modelo muy simplificado, donde se ha omitido, por ejemplo la caché de
Cocoon. Para aprender más sobre la caché de Cocoon ver el capítulo de referencias al final de
este curso.
eXtensible Server Pages (XSP)
Las páginas XSP vienen a solventar las dificultades de las JSP en el trabajo con XML.
Para leer una comparativa XSP vs JSP puede acudirse a:
http://www.oreillynet.com/lpt/a/620.
Una XSP no es más que un documento XML donde podemos incluir contenido estático y
lógica para generar XML dinámicamente. Dentro del modelo de Cocoon serían productores.
Aquí vemos cómo a partir de un contenido se obtienen diversas vistas para distintos
formatos.