Autor(es) original(es) | Barco de Howard Lewis |
---|---|
Desarrollador(es) | Fundación de software Apache |
Versión estable | 5.8.4 [1] / 2024-02-06; hace 9 meses |
Repositorio | Repositorio de tapices |
Escrito en | Java |
Sistema operativo | Multiplataforma ( máquina virtual Java ) |
Tipo | Marco de aplicación web |
Licencia | Licencia Apache 2.0 |
Sitio web | tapiz.apache.org |
Apache Tapestry es un marco de aplicaciones web Java orientado a componentes de código abierto [ aclaración necesaria ] conceptualmente similar a JavaServer Faces y Apache Wicket . [2] Tapestry fue creado por Howard Lewis Ship, [ ¿cuándo? ] y fue adoptado por la Apache Software Foundation como un proyecto de alto nivel en 2006. [3]
Tapestry pone énfasis en la simplicidad, la facilidad de uso y la productividad del desarrollador. Se adhiere al paradigma de Convención sobre Configuración , eliminando casi toda la configuración XML . [4] Tapestry utiliza un enfoque modular para el desarrollo web al tener un fuerte vínculo entre cada componente de interfaz de usuario (objeto) en la página web y su clase Java correspondiente . Esta arquitectura basada en componentes toma prestadas muchas ideas de WebObjects . [5]
Una aplicación Tapestry mínima y con plantilla necesita 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, ${nombreusuario} </p> </body> </html>
paquete org.example.demo.pages ; /** Una clase de página (asociada automáticamente con el archivo de plantilla del mismo nombre) */ public class HelloWorld { /** Un getter ordinario */ public String getUsername () { return "World" ; } }
<?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> <!-- Indicar a Tapestry 5 dónde buscar páginas, componentes y mixins --> <param-name> tapestry.app-package </param-name> <param-value> org.example.demo </param-value> </context-param> <filter> <!-- Definir el filtro del servlet Tapestry --> <filter-name> app </filter-name> <filter-class> org.apache.tapestry5.TapestryFilter </filter-class> </filter> <filter-mapping> <!-- Indica al contenedor de servlets qué solicitudes enviar al filtro de servlets de Tapestry --> <filter-name> app </filter-name> <url-pattern> /* </url-pattern> </filter-mapping> </web-app>
Tapestry utiliza la manipulación de bytecode para transformar las clases de páginas y componentes en tiempo de ejecución. Este enfoque permite que las clases de páginas y componentes se escriban como POJOs simples , con algunas convenciones de nombres y anotaciones que potencialmente desencadenan un comportamiento adicional sustancial en el momento de carga de la clase. Las versiones 5.0, 5.1 y 5.2 de Tapestry usaban la biblioteca de manipulación de bytecode de Javassist. Las versiones posteriores reemplazaron a Javassist con una nueva capa de manipulación de bytecode llamada Plastic que se basa en ObjectWeb ASM . [11] [12]
Las versiones de Tapestry 5 hasta la 5.3 incluían los frameworks JavaScript Prototype y script.aculo.us , junto con una biblioteca específica de Tapestry, para admitir operaciones Ajax como ciudadanos de primera clase. Hay módulos de terceros disponibles para integrar jQuery en lugar de Prototype/Scriptaculous o además de ellos.
A partir de la versión 5.4, Tapestry incluye una nueva capa de JavaScript que elimina la dependencia de los componentes integrados de Prototype, lo que permite conectar jQuery u otro marco de JavaScript. [13]
La versión 5.4 también introduce soporte para módulos JavaScript que utilizan el sistema de carga de módulos RequireJS.
La documentación del proyecto Tapestry cita cuatro "principios" que rigen todas las decisiones de desarrollo de Tapestry, a partir de la versión 5 en 2008: [14]
Tapestry ha sido criticado por no ser compatible con versiones anteriores en las principales versiones, especialmente en la transición de la versión 4 a la versión 5, donde no había disponible una ruta de migración limpia para las aplicaciones existentes. [15] Los miembros del equipo del proyecto han reconocido que esto era un problema importante para los usuarios de Tapestry en el pasado, y la compatibilidad con versiones anteriores se convirtió en un objetivo de diseño importante para Tapestry en el futuro. Desde el comienzo del desarrollo de la versión 5, la compatibilidad con versiones anteriores se incluyó como uno de los cuatro nuevos "Principios básicos" de Tapestry, y dos de los otros tres tenían como objetivo hacer posible la evolución del marco sin sacrificar la compatibilidad con versiones anteriores. Los miembros del equipo del proyecto afirman que todas las versiones de Tapestry desde la 5.0 han sido altamente compatibles con versiones anteriores.
Las primeras críticas a Tapestry 5 también mencionaban la documentación como una deficiencia. Los miembros del proyecto afirman ahora que esta deficiencia se ha solucionado en gran medida con una Guía del usuario completamente revisada y actualizada y otra documentación.
Desde la versión 5.0, Tapestry incluye las bibliotecas JavaScript Prototype y Scriptaculous. Según Howard Lewis Ship, en el período 2008-2009 eran opciones razonables. Sin embargo, desde entonces, la popularidad de Prototype ha disminuido y la de jQuery ha aumentado drásticamente. En respuesta, la comunidad Tapestry desarrolló módulos que permitían utilizar jQuery además de Prototype o en lugar de él. Mientras tanto, la versión actual de Tapestry, 5.4, elimina por completo la dependencia de Prototype y la reemplaza con una capa de compatibilidad en la que se puede conectar jQuery o Prototype (o potencialmente cualquier otro marco de JavaScript).
Según Howard Lewis Ship, Tapestry fue concebido inicialmente como un intento de implementar en Java algunos de los conceptos y enfoques generales encontrados en WebObjects, que en ese momento estaba escrito en Objective-C y era de código cerrado. [16]
Apache Wicket se desarrolló como respuesta a la complejidad de las primeras versiones de Tapestry, según el creador de Wicket, Jonathan Locke. [17]
Facelets , la tecnología de visualización predeterminada en JavaServer Faces , se inspiró supuestamente en las primeras versiones de Tapestry, como un intento de cubrir la necesidad de "un marco como Tapestry, respaldado por JavaServer Faces como el estándar de la industria". [18] [19]
Versión | Fecha | Descripción |
---|---|---|
Versión antigua, ya no se mantiene:1.0 | 2000 | Desarrollado por Howard Lewis Ship para uso interno |
Versión antigua, ya no se mantiene:2.0 | 2002-04 | Disponible por primera vez en SourceForge bajo la Licencia Pública General Reducida de GNU . [20] |
Versión antigua, ya no se mantiene:3.0 | 2004-04 | El primer lanzamiento bajo Apache, como un subproyecto de Jakarta. [21] |
Versión antigua, ya no se mantiene:4.0 | 2006-01 | Se introdujo soporte para anotaciones JDK 1.5, un nuevo subsistema de validación de entrada y un informe de errores mejorado [22] |
Versión antigua, pero aún mantenida:5.0 | 2008-12 | Una reescritura casi completa de Tapestry 4, que introduce un nuevo modelo de componente basado en POJO que enfatiza la convención sobre la configuración y reemplaza a Hivemind con una nueva capa de inversión de control sin XML. |
Versión antigua, pero aún mantenida:5.1 | 2009-04 | Mejoras de rendimiento y memoria, compresión GZIP automática, agregación de JavaScript, pero sigue siendo compatible con versiones anteriores de Tapestry 5.0. |
Versión antigua, pero aún mantenida:5.2 | 2010-12 | Se agregó la validación de Bean JSR 303. [23] Se extendió la recarga de clases en vivo a las implementaciones de servicios. Se eliminó la agrupación de páginas. [24] |
Versión antigua, pero aún mantenida:5.3 | 2011-11 | Se agregó soporte para doctype HTML5, anotaciones JSR-330 para inyección, [25] mejoras de rendimiento y memoria, nuevos componentes, cambio de manipulación de código de bytes de JavaAssist a ASM |
Versión antigua, pero aún mantenida:5.3.1 - 5.3.8 | 2012-2014 | Corrección de errores y mejoras menores |
Versión estable actual: 5.4-5.4.5 | 2015-2019 | Mejoras importantes del lado del cliente. Nueva capa de JavaScript para compatibilidad con jQuery/Prototype conmutable, utiliza Require.js para su sistema de módulos de JavaScript y Twitter Bootstrap para su estilo predeterminado. [26] |
Versión estable actual: 5.5 | 2020-03 | Versión estable actual. Compatibilidad con código de bytes de Java 12, Typescript y Bootstrap 4. |