Seleccionar página

!– @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } A.sdfootnoteanc { font-size: 57% } –>

Tapestry es un framework MVC opensource mantenido por la comunidad apache basado en el Java Servlet API 2.2 y pensado para realizar aplicaciones web en Java que sean dinámicas, robustas y altamente escalables, que funciona en todo contenedor de servlets o servidor de aplicaciones. Su filosofía se basa en lo siguiente:

Simplicidad en la creación de aplicaciones web.

Consistencia a la hora de que distintos desarrolladores pueden encontrar soluciones similares a problemas similares.

Eficiencia, las aplicaciones deben ser escalables

Reacción ante los errores, aportando modos de diagnósticos.

Modelo de programación

Sigue un modelo basado en componentes y en el patrón de diseño FrontController1 .

Un componente es un objeto reusable que puede ser considerado como una ”caja negra”, que tiene sus responsabilidades definidas por el diseño y la estructura del framework en el cual se encuentra, y sigue una serie de convenciones (nomenclatura, implementación de ciertas interfaces, etc) que le exige el framework. En tapestry todo son componentes. Cada componente tiene tres partes: Una plantilla HTML, una o varias clases java y un archivo XML para unirlos, en el que se especifican las relaciones entre los parámetros formales en la plantilla y los reales en la clase java. La arquitectura sería la siguiente:

1. Application Engine: Por cada cliente que se conecta a la aplicación se crea una instancia del âœApplication Engineâ que es usado para seguir la actividad del cliente en la aplicación

2. Application Servlet: Sirve de puente entre el âœApplication Engineâ y el contenedor de servlet. Su única función es crear el âœApplication Engineâ tras la primera petición de un cliente a la aplicación y de localizarlo en peticiones futuras.

3. Applicacion Specification: El fichero de especificación de la aplicación es usado para darle a Tapestry una descripción de la aplicación. En él se especifica el nombre de la aplicación, la clase del âœApplication Engineâ, la lista de páginas y nombre de la clase que implementa el Visit Object (si es necesario)

4. Visit Object:Será creado uno por cada una de las conexiones de una cliente a la aplicación. Sirve para almacenar información compartida entre varias páginas de la aplicación.

5. Page Specification: Cada página posee un fichero de especificación en el que se especifica el nombre de la clase que implementa la página y la lista de componentes.

6. Page Template: Este será el fichero html que dará lugar a la representación visual de la página

7. Page implementation: En ella, para cada una los nombres de los parámetros reales, que aparecen en las ligaduras de los parámetros formales a reales en la especificación de los componentes que forman la página, se implementarán métodos get y set

Cada página contiene HTML puro Los componentes son clases abstractas instanciadas por el contenedor.

Capas afectadas

Se centra principalmente en la capa de presentación. Ha sido concebido para generar e interactuar con la interfaz de usuario

MVC push/pull

Pull. Cualquier componente puede ser referenciado desde una página HTML a través del lenguaje OGNL.

Internacionalizacion (i18n) y localización (L10n)

Para la internacionalización Tapestry utiliza lo que denomina catálogos de mensajes que vendrían a ser algo similar a los ResourceBoundles de java donde se guardan pares de cadenas con el formato clave=valor. Cada componente puede tener un set de catálogos de mensajes. Estos catálogos se nombran con el mismo nombre que el componente pero su extensión es .properties. Si una clave no se encuentra en ninguno de los catálogos Tapestry no informa ningún error sino que genera un valor propio.

Sistema de seguridad

No proporciona un sistema de seguridad que contemple login, autentificación ni autorización, pero sí uno de manejo de errores

Su seguridad contra ataques se basa en la del Servlet API y en que todas las peticiones pasan por determinadas clases y métodos, punto en el cual es posoble acoplar mecanismos de seguridad externos.

Sistema de plantillas (templates)

No dispone de un sistema de plantillas global que permita crear vistas por composición con un formato reusable para todas las páginas.

Sistema de validación

La validación la realizan los componentes que reciben los datos de entrada del usuario. No permite métodos propios de validación a no ser que desarrolles tu propio componente de validación.

Sistema de navegación (pageflow)

No proporciona un mecanismo de navegación

Sistema de caché

No proporciona un sistema de caché.

Testeabilidad

Las pruebas de unidad son muy laboriosas de realizar, ya que las clases de los componentes son abstractas.

Mapeo Objeto-Relacional (ORM)

No. Tapestry se centra en la capa de presentación.

Programación Orientada a Aspectos (AOP)

No, pero es posible obtenerla integrando el microkernel Hivemind2 , tambien de la Apache Software Foundation.

Inyección de dependencias (DI)

No, pero es posible obtenerla integrando el microkernel Hivemind.

Ajax

Es posible obtenr funcionalidades Ajax con la biblioteca de componentes Tacos

Configuración

La configuración se realiza a través de archivos xml, uno para cada componente.

Extensibilidad

Tapestry está diseñado para ser un framework de presentación, permitiendo acoplar otro framework por debajo para gestionar la lógica de negocio y la capa de integración.

Madurez

El producto es maduro y la solución parece correcta y robusta. Más allá de esto es menos maduro que otros productos, como por ejemplo struts y está evolucionando hacia Java 5.

Última versión

La última versión liberada de Tapestry es la 4.1.3, que es sobre la que hemos hecho la comparaciones

También existe una muy interesante preview de la version 5.0 que incluye, entre otras cosas, anotaciones en detrimento de los archivos xml

Curva de aprendizaje

La curva de aprendizaje podría considerarse relativamente suave, ya que el modelo de programación basado en componentes es simple.

Documentación

Dispone de documentación oficial con tutorial, FAQ, guía de usuario y códigos de ejemplo.