Apache Tapestry | ||
---|---|---|
Información general | ||
Tipo de programa | marco de referencia para aplicaciónes móviles web | |
Autor | Howard Lewis Ship | |
Desarrollador | Apache Software Foundation | |
Lanzamiento inicial | 2000 | |
Licencia | Apache License 2.0 | |
Estado actual | Activo | |
Información técnica | ||
Programado en | Java | |
Versiones | ||
Última versión estable | 5.6.1 ( 19 de septiembre de 2020 (4 años, 2 meses y 4 días)) | |
Archivos legibles | ||
Apache Tapestry Markup Language document | ||
Archivos editables | ||
Apache Tapestry Markup Language document | ||
Enlaces | ||
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.
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.
Una aplicación mínima usando plantillas requiere solo tres archivos:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<body>
<p>Hola, ${usuario}</p>
</body>
</html>
package org.example.demo.pages;
/**
* La clase de la página (asociada con el archivo de plantilla del mismo nombre).
*/
public class HolaMundo {
/**
* Un getter ordinario.
*/
public String getUsuario() {
return "mundo";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Ejemplo de Tapestry</display-name>
<context-param>
<!-- Indica a Tapestry en que paquete buscar páginas, componentes, servicios y mixins -->
<param-name>tapestry.app-package</param-name>
<param-value>org.example.demo</param-value>
</context-param>
<filter>
<!-- Define el filtro de Tapestry -->
<filter-name>app</filter-name>
<filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
</filter>
<filter-mapping>
<!-- Indica al contenedor de servlets que peticiones enviar al filtro de Tapestry -->
<filter-name>app</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
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.
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.
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]
Versión | Fecha | Descripción |
---|---|---|
1.0 | 2000 | Desarrollada por Howard Lewis Ship para uso propio. |
2.0 | 2002-04 | Primeramente disponible en SourceForge bajo una licencia GNU Lesser General Public License. |
3.0 | 2004-04 | La primera versión bajo Apache, como un subproyecto de Jakarta. |
4.0 | 2006-01 | Incluye soporte para anotaciones JDK 1.5, un nuevo subsistema de validación y un informe de error mejorado. |
5.0 | 2008-12 | Se reescribe prácticamente Tapestry 4, presentando un nuevo modelo de componentes basado en POJOs enfatizando convención sobre configuración y reemplazando Hivemind con una nueva capa de inversión de control sin XML. |
5.1 | 2009-04 | Mejoras de rendimiento y uso de memoria, compresión de GZIP automática, agregación de JavaScript manteniendo compatibilidad con Tapestry 5.0. |
5.2 | 2010-12 | Se añade JSR 303 Bean Validation. Recarga de clases extendida a las implementaciones de los servicios. Se elimina el pool de páginas. |
5.3 | 2011-11 | Se añade soporte para HTML5, inyección de anotaciones JSR-330, mejoras de rendimiento y uso de memoria, nuevos componentes, cambio de manipulación de bytecode de JavaAssist a ASM. |
5.3.1 - 5.3.7 | 2012-2013 | Corrección de errores y mejoras. |
5.3.8 | 2014-11 | Se añade soporte para funcionar con Java 8. |
5.4 | 2015-12 | Varias mejoras en el lado cliente. Nueva capa de JavaScript agnóstica del framework pudiéndose usar jQuery, Prototype u otro. Se emplea RequireJS para la definición y uso de módulos JavaScript. Se incluye Twitter Bootstrap para los estilos. Además de numerosas correcciones de errores, actualización de dependencias, mejoras en la documentación y en diversas funcionalidades así como nuevas características que pueden consultarse en la lista completa de cambios. |