Seleccionar página

!– @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } –>

Apache Cocoon 2 es un framework opensource de publicación basado en XML/XLS y enfocado a la separación entre contenido, presentación y lógica de la aplicación, basándose en los principios de separación de responsabilidades.

La especialidad de Cocoon es la presentación, pudiendo generar vistas con muy diferentes formatos a partir de una sola representación interna.

Está diseñado en distintos bloques y cada uno de ellos tiene una responsabilidad determinada. las aplicaciones desarrolladas con Cocoon son consideradas como bloques del propio framework.

La arquitectura general del framework encontramos las siguientes capas:

Core Cocoon: Es el corazón de Cocoon. Encontramos un entorno para el control de sesiones, ficheros para configuración de Cocoon, para hacer manejo de contextos, aplicar mecanismos de caché, Pipeline, generación, compilación, carga y ejecución de programas.

Cocoon Components: En esta capa encontramos los generadores de XML, transformadores de XML, matchers de ficheros y serializadores para formatear los ficheros.

Built-in Logicsheets: Son hojas lógicas que necesita Cocoon para ficheros como sitemap, xsp, esql, request, response.

Site specific configuration, components, logicsheets and content: Es el nivel más externo en el cual un desarrollador puede hacer configuración, creación de componentes, creación de hojas lógicas y contenido definido por el usuario de Cocoon para su aplicación

Modelo de programación

El funcionamiento de Cocoon está basado en el concepto de tubería (pipeline). Cada componente de la tubería acepta una entrada, realiza una operación y devuelve una salida, que es aceptada por otro componente.

La unidad básica de trabajo de Cocoon es el XML procedente de las páginas XSP (eXtensible Server Pages). La Las XSPs manejan la misma idea de las JSPs, es decir, páginas de servidor, con lo cual se tiene dinamismo con posibilidad de conectividad a bases de datos y con las ventajas del XML. Una XSP es simplemente un documento XML en donde se puede incluir contenido tanto estático como dinámico para generar XML de forma dinámica.

El desarrollo consiste prácticamente en escribir los archivos XSP, y solo se emplea Java para cosas puntuales, como el control del flujo del programa.

El framework define una serie de componentes, que pueden ser personalizados por el desarrollador de la aplicación. Los componentes son los siguientes:

Productores: Son los ficheros fuentes de donde proviene el XML. Estos pueden ser estáticos o dinámicos (es decir creados mediante XSP). La operación de un productor se basa en transformar los datos del fichero en eventos SAX.

Procesadores: Atrapan el XML de los productores para aplicarle diversos procesos, como por ejemplo hacer conectividad a una base de datos, aplicar transformaciones XSL a los documentos XML, convertir los XSP en clases Java, etc. Son el proceso principal del Pipeline. El más común es el transformador XSLT.

Formateadores: Son el punto final en un Pipeline. Recogen la representación interna del XML resultante (que está dada en eventos SAX) y la preparan para enviar como respuesta al cliente en el formato adecuado.

El formateador o serializador más común es el serializador XML que simplemente obtiene los eventos SAX y los lleva a un documento XML.

A nivel de usuario, el funcionamiento sería así:

1. El usuario solicita un documento de cualquier tipo al servidor.

2. La solicitud se analiza para concluir si se puede atender o no. Si no se puede atender se produce un mensaje de error.

3. Si se puede atender se analiza a qué productor XML corresponde se genera un documento XML con el cual se trabajará.

4. Se extraen las instrucciones del XML generado en el paso anterior y éstas se le pasan al procesador apropiado para que se le apliquen al XML. Al procesar el XML podría salir un XML con más instrucciones que serán tratadas en algún otro ciclo.

5. El XML procesado se le pasa al elemento que aplica el formato. Si el documento es un documento final,XML aplica el formato y le envía el documento formateado al cliente. En el caso que el documento XML procesado, sea código que deba ejecutarse (como en el caso de una XSP ya compilada), éste se pasa como productor de XML y se vuelve a procesar hasta que se llega a un documento XML final.

Capas afectadas

Presentación, negocio e integración. Además de estar especializado en la presentación, Cocoon permite el acceso a bases de datos desde las XSPs.

MVC push/pull

Podría decirse que utiliza un sistema pull ya que cada página XSP puede acceder todas las variables que declare, pero al no existir objetos que modelen los datos de la aplicación tampoco tendría mucho sentido.

Internacionalizacion (i18n) y localización (L10n)

La internacionalización en Cocoon está basada en un transformador que usa dicccionarios XML predefinidos en distintos idiomas. El diccionario a usar se selecciona en base al Locale del usuario. Estos transformadores pueden agregarse a la tubería y actuar así sobre el XSP.

Sistema de seguridad

Provee de un sistema de autenticación y autorización basado en la especificación Servlet.

También proporciona un sistema de manejo de errores.

Sistema de plantillas (templates)

Permite incluir en una página XSP fragmentos de otras páginas, creando la vista general juntando diferentes trozos reutilizables, según dicta el patrón de diseño Composite View .

Sistema de validación

Proporciona una serie de validadores estándar y permite escribir tus propios validadores en java o javascript.

Sistema de navegación (pageflow)

Dispone de un sistema de navegación basado el concepto de continuations. Un continuation es un objeto que almacena el estado de la aplicación (variables, pila, contador de programa…). A partir de ese objeto se puede restaurar la aplicación exactamente en el mismo estado en el que se guardó.

Sistema de caché

En un sistema basado en el parseo y transformación de páginas XML necesita imperiosamente un mecanismo de caché. El bloque Core Cocoon proporciona ese mecanismo y almacena en memoria las páginas creadas.

Testeabilidad

Como el desarrollo se centra en archivos XML asociados a un DTD, es imposible tener errores de sintaxis. Esto compensa el hecho de que es muy dificil testear la aplicación en tiempo de ejecución debido a su naturaleza.

Mapeo Objeto-Relacional (ORM)

No proporciona un mecanismo de mapeo O/R.

Programación Orientada a Aspectos (AOP)

No permite AOP.

Inyección de dependencias (DI)

No existe la DI.

Ajax

Cocoon dispone de un bloque para dar soporte a la tecnología Ajax de forma transparente, centrada principalmente en el manejo de formularios (envío, validación, etc).

Configuración

La configuración está basada, obviamente, en archivos XML.

Cocoon cuenta con varios ficheros para hacer la configuración y personalización del mismo. Entre éstos, el más importante a nivel de usuario es el sitemap.xml. En este fichero se declaran los componentes y las pipelines.

Extensibilidad

Cocoon 2.2 está diseñado para integrarse con Spring a través del bloque Spring Configurator. Esto le permitiría usar las ventajas de Spring como IoC o integración con sistemas ORM.

Madurez

Cocoon 2 es la nueva versión de Cocoon, totalmente reescrita con un mejor diseño. Podría considerarse el sistema de publicación de contenidos basado en XML/XLS más sólido.

Última versión

La última versión estable liberada es Apache Cocoon 2.2

Curva de aprendizaje

El tiempo de aprendizaje se ve modificada por el hecho de que el desarrollo consiste básicamente en escribir los XSP, para lo que hay que estar familiarizado con el lenguaje XSLT (XSL Transformations).

Documentación

La documentación oficial proporciona tutorial, FAQ, How-Tos, wiki, guía de usuario y desarrollador, y más. Sin embargo no profundiza demasiado y se encuentra incompleta para las últimas versiones.

Share