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.
