Aller au contenu principal

Apache Tapestry


Apache Tapestry


Apache Tapestry es un framework para desarrollar aplicaciones web de código abierto desarrollado sobre el lenguaje Java basado en componentes. Tapestry fue creado por Howard Lewis Ship y adoptado por Apache Software Foundation como proyecto superior en 2006.

Tapestry hace énfasis en la simplicidad, fácilidad de uso y la productividad para el desarrollador. Se adhiere al paradigma convención sobre configuración eliminando prácticamente todo el uso de XML. Usa una aproximación modular al desarrollo web, poseyendo una fuerte unión entre el componente en la página web y su correspondiente clase Java. La arquitectura basada en componentes toma prestadas varias ideas de WebObjects. Emplea el Modelo–vista–controlador y una arquitectura push.

Tapestry se basa en el estándar Java Servlet API, funcionando sobre cualquier contenedor de servlets o contenedor de aplicaciones. Asume responsabilidades clave como la construcción y envío de URLs, almacenamiento del estado persistente en el cliente o en el servidor, validación de entradas de usuario, localización/internacionalización e informe de excepciones. Las aplicaciones se describen en términos de objetos, métodos y propiedades y no en términos de URLs y parámetros como en los frameworks basados en acciones.

Características destacadas

Recarga dinámica de clases
Tapestry monitoriza el sistema de archivos buscando cambios en las clases Java de las páginas, componentes e implementaciones de servicios, plantillas HTML y archivos properties de los componentes. Cuando hay algún cambio la recarga dinámica aplica los nuevos archivos sin requerir un reinicio de la aplicación. Esto proporciona un ciclo corto de codificar-guardar-ver mediante el que se reclama una productividad mejorada enormemente para el desarrollador.
Basado en componentes
Las páginas pueden ser construidas con pequeños componentes anidables que pueden ser reutilizados múltiples veces en una misma página, en diferentes páginas del mismo proyecto o en diferentes proyectos mediante librerías de componentes. Cada uno posee una clase de componente y opcionalmente una plantilla. Construir nuevos componentes es trivial.
Convención sobre configuración
Tapestry usa convenciones de nombres y anotaciones en vez de XML para configurar la aplicación.
Mínimo uso de HttpSession
Tapestry está diseñado para hacer un uso mínimo de HttpSession para ser altamente eficiente en un entorno cluster con sesiones replicadas.
Post/Redirect/Get
La mayoría de los envíos de peticiones siguen el patrón Post/Redirect/Get (PRG) que reduce los problemas de enviar múltiples veces un formulario y mostrando siempre URLs amigables y agregables a los marcadores, haciendo que los botones atrás y refrescar de los navegadores funcionen correctamente.
Inversión de control (IoC)
posee una capa propia de Inversión de control disponible para los servicios de la aplicación haciendo que muchos de los aspectos del comportamiento de Tapestry configurables y reemplazables. El contenedor de dependencias está específicamente diseñado para ser usado en Tapestry aunque puede ser usado por cualquier otro tipo de aplicación y fuera del ámbito web.
Informativo
Cuando se produce una excepción Tapestry presenta una página con un informe de error en el que se incluye mucha información para determinar la causa del error, incluyendo la traza de la excepción, líneas precisas de código y mostrando un extracto del código donde se ha producido la excepción. El informe de error se muestra también cuando se producen excepciones en peticiones Ajax.
Políglota
El lenguaje de programación empleado habitualmente para el código asociado a las páginas y componentes es Java pero se puede emplear cualquier otro lenguaje soportado por la JVM. Tapestry acepta cualquiera de ellos (Groovy, Scala, ...).
Modular, adaptable y extensible
Los servicios proporcionados por Tapestry pueden ser configurados para adaptarse a las necesidades de la aplicación o reemplazados por otras implementaciones, también pueden proporcionase nuevos servicios.

Principios

La documentación de Tapestry cita cuatro principios que gobiernan las decisiones de desarrollo para Tapestry 5 empezando desde la versión 5 en 2008.

  • Estructura estática, comportamiento dinámico: la estructura de las páginas y componentes es esencialmente estática no teniendo la necesidad de construir (y almacenar en memoria) árboles grandes de páginas y componentes.
  • API adaptativa: el framework está diseñado para que se adapte al código del desarrollador en vez de que el desarrollador se adapte al framework.
  • Diferenciación entre API pública e interna: permite a los desarrolladores no hacer uso de APIs internas del framework que pueden cambiar en un futuro de modo que posteriores actualizaciones a nuevas versiones sean más sencillas y sigan siendo compatibles.
  • Asegurar compatibilidad hacia atrás: los desarrolladores de Tapestry están comprometidos a asegurar la compatibilidad y que actualizar a siguientes versiones sea sencillo.

Ejemplo Hola mundo

Una aplicación mínima usando plantillas requiere solo tres archivos:

HolaMundo.tml
La plantilla (X)HTML para la página /holamundo. Las plantillas de Tapestry puede contener cualquier marcado (X)HTML bien formado.
HolaMundo.java
La clase de la página está asociada con la plantilla. En este ejemplo simplemente proporciona una propiedad *usuario* que la plantilla puede acceder.
web.xml
El archivo descriptor de despliegue de las aplicaciones web Java que instala Tapestry como un filtro de servlets.

Transformación de clases

Tapestry usa manipulación de bytecode para transformar las clases de las páginas y componentes en tiempo de ejecución. Esta aproximación permite que las páginas y componentes sean escritas como simples POJOs, con unas pocas convenciones de nombres y anotaciones Tapestry puede invocar la funcionalidad en tiempo de ejecución. A partir de la versión 5.3 usa una capa de manipulación de bytecode llamada Plastic que está basada en ObjectWeb ASM.

Soporte del lado del cliente

Desde la versión 5.4, Tapestry incluye una nueva capa de JavaScript que elimina la dependencia sobre Prototype permitiendo usar jQuery o cualquier otro framework JavaScript. Esta capa de abstracción permite que las operaciones Ajax sean ciudadanos de primera clase.

La versión 5.4 también incorpora el soporte para la carga de módulos de JavaScript usando RequireJS.

Giuseppe Zanotti Luxury Sneakers

Relación con otros frameworks

De acuerdo con Howard Lewis Ship, Tapestry fue inicialmente concebido como un intento de implementar en Java algunos conceptos generales y aproximaciones presentes en WebObjects que en su momento estaba escrito en Objective-C y era de código cerrado.[1]

Apache Wicket fue desarrollado como una respuesta a la complejidad de las versiones iniciales de Tapestry de acuerdo a su creador Jonathan Locke.[2]

Facelets, la tecnología de presentación por defecto de JavaServer Faces está inspirada en versiones anteriores de Tapestry como un intento de disponer de "un framework como Tapestry pero como un estándar para la industria basado en JavaServer Faces".[3][4]

Historia

Proyectos relacionados

  • Proyecto Tynamo Archivado el 16 de octubre de 2014 en Wayback Machine. que ofrece funcionalidades adicionales.
  • JumpStart tutorial Archivado el 12 de octubre de 2014 en Wayback Machine. Tapestry mediante ejemplos.

Véase también

  • Comparison of web application frameworks
  • Java view technologies and frameworks
  • Java Platform, Enterprise Edition

Bibliografía

Notas

Enlaces externos

  • Página de inicio de Apache Tapestry
  • Documentación de Apache Tapestry
  • Ejemplos para iniciarse en Apache Tapestry Archivado el 10 de octubre de 2014 en Wayback Machine.
  • Proyecto Tynamo Archivado el 16 de octubre de 2014 en Wayback Machine.
  • Página personal de Howard Lewis Ship

Text submitted to CC-BY-SA license. Source: Apache Tapestry by Wikipedia (Historical)