Tapiz apache

Marco de aplicación web de código abierto
Tapiz apache
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
RepositorioRepositorio de tapices
Escrito enJava
Sistema operativoMultiplataforma ( máquina virtual Java )
TipoMarco de aplicación web
LicenciaLicencia Apache 2.0
Sitio webtapiz.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]

Características destacables

Recarga de clases en vivo
Tapestry monitorea el sistema de archivos para detectar cambios en las clases de páginas Java, clases de componentes, clases de implementación de servicios, plantillas HTML y archivos de propiedades de componentes, e intercambia los cambios en caliente en la aplicación en ejecución sin necesidad de reiniciar. Esto proporciona un ciclo de retroalimentación de código-guardado-visualización muy corto que, según se afirma, mejora enormemente la productividad del desarrollador. [6]
Basado en componentes
Las páginas pueden construirse con pequeños componentes anidados, cada uno de los cuales tiene una plantilla y una clase de componente. Los componentes personalizados son aparentemente fáciles de construir. [7]
Convención sobre configuración
Tapestry utiliza convenciones de nombres y anotaciones, en lugar de XML, para configurar la aplicación. [8]
Uso restringido de HTTPSession
Al hacer un uso mínimo de HTTPSession, Tapestry está diseñado para ser altamente eficiente en un entorno agrupado y replicado por sesiones. [9]
Publicar/Redirigir/Obtener
La mayoría de los envíos de formularios siguen el patrón Publicar/Redireccionar/Obtener (PRG), que reduce los accidentes múltiples en el envío de formularios y hace que las URL sean más amigables y más fáciles de marcar, además de permitir que los botones Atrás y Actualizar del navegador funcionen normalmente. [10]
Inversión de control (IoC)
Tapestry está construido sobre una capa liviana de Inversión de Control con similitudes con Google Guice , pero diseñada para hacer que casi todos los aspectos del comportamiento de Tapestry sean configurables y reemplazables. [8]

Ejemplo de Hola Mundo

Una aplicación Tapestry mínima y con plantilla necesita solo tres archivos:

Hola Mundo.tml
La plantilla (X)HTML para la página /helloworld. Las plantillas Tapestry pueden contener cualquier código (X)HTML bien formado.
<!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>     
Hola Mundo.java
La clase de página asociada con la plantilla. Aquí, simplemente proporciona una propiedad *nombre de usuario* a la que la plantilla puede acceder.
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" ; } }       
web.xml
El descriptor de implementación de la aplicación servlet , que instala Tapestry como un filtro de servlet.
<?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>                 

Transformación de clases

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]

Soporte del lado del cliente

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.

Principios básicos

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]

  • Estructura estática, comportamiento dinámico: la estructura de páginas y componentes es esencialmente estática, lo que elimina la necesidad de construir (y almacenar en la memoria de la sesión) grandes árboles de páginas y componentes.
  • API adaptable: el marco está diseñado para adaptarse al código, en lugar de que el código se adapte al marco.
  • Diferenciar las API públicas de las internas: todas las API son explícitamente "internas" (privadas), excepto aquellas que son necesariamente públicas.
  • Asegúrese de la compatibilidad con versiones anteriores: según se informa, los desarrolladores de Tapestry se han comprometido a garantizar que la actualización a la última versión de Tapestry sea siempre sencilla.

Crítica

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).

Relación con otros marcos

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]

Historia

VersiónFechaDescripción
Versión antigua, ya no se mantiene:1.02000Desarrollado por Howard Lewis Ship para uso interno
Versión antigua, ya no se mantiene:2.02002-04Disponible por primera vez en SourceForge bajo la Licencia Pública General Reducida de GNU . [20]
Versión antigua, ya no se mantiene:3.02004-04El primer lanzamiento bajo Apache, como un subproyecto de Jakarta. [21]
Versión antigua, ya no se mantiene:4.02006-01Se 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.02008-12Una 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.12009-04Mejoras 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.22010-12Se 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.32011-11Se 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.82012-2014Corrección de errores y mejoras menores
Versión estable actual: 5.4-5.4.52015-2019Mejoras 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.52020-03Versión estable actual. Compatibilidad con código de bytes de Java 12, Typescript y Bootstrap 4.

Véase también

Referencias

  • Drobiazko, Igor (2012), Tapestry 5: Rapid web application development in Java, Igor Drobiazko, p. 482, archivado desde el original el 2014-12-15 , consultado el 2013-01-20
  • Kolesnikov, Alexander (15 de enero de 2008), Tapestry 5: Building Web Applications: A step-by-step guide to Java Web development with the developer-friendly Apache Tapestry framework, Packt Publishing , pág. 280, ISBN 978-1-84719-307-0
  • Iok Tong, Ka (1 de enero de 2007), Disfrutando del desarrollo web con Tapestry (3.ª ed.), pág. 497, ASIN  B00262M3HS
  • Lewis Ship, Howard (2004), Tapestry in Action , Manning , pág. 580, ISBN 1932394117

Notas

  1. ^ "Descargar".
  2. ^ "Entrevista a Howard Lewis sobre el barco Tapestry [parte 1] (2012-10-22)". Archivado desde el original el 22 de enero de 2013. Consultado el 28 de enero de 2013 .
  3. ^ Drobiazko 2012, pág. 1.
  4. ^ "Tapestry Central: actualizaciones de Tapestry 5". 24 de julio de 2006.
  5. ^ Tapiz en acción - Prefacio de Howard Lewis Ship
  6. ^ "Recarga de clase - Apache Tapestry".
  7. ^ Drobiazko 2012, pág. 20.
  8. ^ por Drobiazko 2012, pág. 7.
  9. ^ "Rendimiento y agrupamiento - Apache Tapestry".
  10. ^ "Formularios y validación - Apache Tapestry".
  11. ^ "Encuentro con Plastic I: Introducción | Java Magic". 18 de abril de 2011.
  12. ^ "[asm] Plastic: Un envoltorio ASM para Tapestry 5.3". Archivado desde el original el 18 de junio de 2013. Consultado el 21 de febrero de 2013 .
  13. ^ "Tapestry Central: Centrándonos en Tapestry 5.4". 19 de octubre de 2012.
  14. ^ "Principios". 21 de diciembre de 2010. Archivado desde el original el 12 de octubre de 2012. Consultado el 12 de octubre de 2012 .
  15. ^ "Futura compatibilidad de Tapestry5 [sic]". 2009-04-30. Archivado desde el original el 2013-01-21 . Consultado el 2013-01-21 .
  16. ^ "DevRates | Entrevista a Howard Lewis sobre Ship of Tapestry [parte 1]". Archivado desde el original el 22 de enero de 2013. Consultado el 28 de enero de 2013 .
  17. ^ "Wicket: ¿Necesitamos otro marco de capa de presentación?". www.theserverside.com . Archivado desde el original el 9 de septiembre de 2004. Consultado el 11 de enero de 2022 .
  18. ^ "Facelets: JavaServer Facelets". facelets.dev.java.net . Archivado desde el original el 6 de julio de 2007 . Consultado el 11 de enero de 2022 .
  19. ^ "JSF Central - Facelets internos, parte 1: una introducción". www.jsfcentral.com . Archivado desde el original el 13 de enero de 2013 . Consultado el 11 de enero de 2022 .
  20. ^ "Tapestry: Java Web Components Release 2.0 ya está disponible" . Consultado el 20 de enero de 2013 .
  21. ^ "Lanzamiento final de Tapestry 3.0" . Consultado el 20 de enero de 2013 .
  22. ^ "Ya está disponible la versión 4.0 de Tapestry" . Consultado el 20 de enero de 2013 .
  23. ^ "API de validación de Bean de Tapestry y JSR-303". 4 de enero de 2010. Archivado desde el original el 16 de abril de 2010. Consultado el 13 de marzo de 2010 .
  24. ^ "Anuncio de Tapestry 5.2". 17 de diciembre de 2010. Archivado desde el original el 14 de noviembre de 2012. Consultado el 14 de noviembre de 2012 .
  25. ^ "Uso de anotaciones estándar JSR 330 - Apache Tapestry".
  26. ^ "Reescritura de JavaScript". Archivado desde el original el 14 de noviembre de 2012. Consultado el 20 de enero de 2013 .
  • Sitio web oficial
Obtenido de "https://es.wikipedia.org/w/index.php?title=Tapiz_apache&oldid=1216811581"