Tapeçaria Apache - Apache Tapestry

Tapeçaria Apache
Apache Tapestry logo.svg
Autor (es) original (is) Navio Howard Lewis
Desenvolvedor (s) Apache Software Foundation
Versão estável
5.6.x 5.6.3 / 16 de março de 2021 ; 32 dias atrás  ( 2021-03-16 )
5.7.x 5.7.1 / 16 de março de 2021 ; 32 dias atrás  ( 2021-03-16 )
Repositório Repositório de Tapeçaria
Escrito em Java
Sistema operacional Plataforma cruzada ( Java Virtual Machine )
Modelo Estrutura de aplicativo da web
Licença Licença Apache 2.0
Local na rede Internet tapeçaria .apache .org

Apache Tapestry é uma estrutura de aplicativo da web Java orientada a componentes de código aberto , conceitualmente semelhante a JavaServer Faces e Apache Wicket . Tapestry foi criado por Howard Lewis Ship e foi adotado pela Apache Software Foundation como um projeto de nível superior em 2006.

Tapestry enfatiza a simplicidade, facilidade de uso e produtividade do desenvolvedor. Ele segue o paradigma da Convenção sobre a Configuração , eliminando quase todas as configurações XML. Tapestry usa uma abordagem modular para o desenvolvimento da web, tendo uma forte ligação entre cada componente da interface do usuário (objeto) na página da web e sua classe Java correspondente . Essa arquitetura baseada em componentes pega muitas idéias de WebObjects .

Características notáveis

Recarregamento de aulas ao vivo
Tapestry monitora o sistema de arquivos em busca de mudanças nas classes de página Java, classes de componentes, classes de implementação de serviço, modelos HTML e arquivos de propriedades de componentes, e troca a quente as mudanças no aplicativo em execução sem exigir uma reinicialização. Isso fornece um ciclo de feedback de visualização de código-salvamento muito curto que supostamente melhora a produtividade do desenvolvedor.
Baseado em componentes
As páginas podem ser construídas com pequenos componentes aninhados, cada um tendo um modelo e uma classe de componente. Componentes personalizados são supostamente triviais de construir.
Convenção sobre configuração
Tapestry usa convenções de nomenclatura e anotações, em vez de XML, para configurar o aplicativo.
Uso sobressalente de HTTPSession
Fazendo uso mínimo da HTTPSession, o Tapestry é projetado para ser altamente eficiente em um ambiente em cluster replicado por sessão.
Publicar / Redirecionar / Obter
A maioria dos envios de formulários segue o padrão Post / Redirect / Get (PRG), que reduz os acidentes de envio de múltiplos formulários e torna os URLs mais amigáveis ​​e marcáveis, além de permitir que os botões Voltar e Atualizar do navegador funcionem normalmente.
Inversão de controle (IoC)
Tapestry é construído em uma camada leve de Inversão de Controle com semelhanças com o Google Guice , mas projetado para tornar quase todos os aspectos do comportamento do Tapestry configuráveis ​​e substituíveis.

Hello World Example

Um aplicativo Tapestry mínimo, com modelo, precisa de apenas três arquivos:

HelloWorld.tml
O modelo (X) HTML para a página / helloworld. Os modelos de tapeçaria podem conter qualquer marcação HTML (X) bem formada.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<body>
    <p>Hello, ${username}</p>
</body>
</html>
HelloWorld.java
A classe de página associada ao modelo. Aqui, ele apenas fornece uma propriedade * username * que o modelo pode acessar.
package org.example.demo.pages;

/** A page class (automatically associated with the template file of the same name) */
public class HelloWorld {

    /** An ordinary getter */
    public String getUsername() {
        return "World";
    }
}
web.xml
O Descritor de Implementação do aplicativo de servlet , que instala Tapestry como um 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>Tapestry Example</display-name>
    <context-param>
        <!-- Tell Tapestry 5 where to look for pages, components and mixins -->
        <param-name>tapestry.app-package</param-name>
        <param-value>org.example.demo</param-value>
    </context-param>
    <filter>
        <!-- Define the Tapestry servlet filter -->
        <filter-name>app</filter-name>
        <filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
    </filter>
    <filter-mapping>
        <!-- Tell the servlet container which requests to send to the Tapestry servlet filter -->
        <filter-name>app</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

Transformação de classe

Tapestry usa manipulação de bytecode para transformar páginas e classes de componentes em tempo de execução. Essa abordagem permite que as classes de página e de componente sejam escritas como POJOs simples , com algumas convenções de nomenclatura e anotações que podem desencadear um comportamento adicional substancial no tempo de carregamento da classe. Tapestry versões 5.0, 5.1 e 5.2 usaram a biblioteca de manipulação de bytecode Javassist . As versões subsequentes substituíram o Javassist por uma nova camada de manipulação de bytecode chamada Plastic, que é baseada no ObjectWeb ASM .

Suporte do lado do cliente

As versões Tapestry 5 até 5.3 empacotaram os frameworks JavaScript Prototype e script.aculo.us , junto com uma biblioteca específica para Tapestry, de modo a oferecer suporte a operações Ajax como cidadãos de primeira classe. Módulos de terceiros estão disponíveis para integrar jQuery em vez de, ou além de, Prototype / Scriptaculous.

A partir da versão 5.4, Tapestry inclui uma nova camada JavaScript que remove a dependência dos componentes embutidos no Prototype, permitindo que jQuery ou outra estrutura JavaScript seja conectada.

A versão 5.4 também introduz suporte para módulos JavaScript usando o sistema de carregamento de módulo RequireJS.

Princípios fundamentais

A documentação do projeto Tapestry cita quatro "princípios" que regem todas as decisões de desenvolvimento para Tapestry, começando com a versão 5 em 2008:

  • Estrutura estática, comportamento dinâmico - a estrutura da página e do componente é essencialmente estática, eliminando a necessidade de construir (e armazenar na memória da sessão) grandes páginas e árvores de componentes.
  • API adaptável - a estrutura é projetada para se adaptar ao código, em vez de fazer com que o código se adapte à estrutura
  • Diferencie APIs públicas e internas - todas as APIs são explicitamente "internas" (privadas), exceto aquelas que são necessariamente públicas.
  • Garanta a compatibilidade com versões anteriores - Os desenvolvedores do Tapestry estão supostamente comprometidos em garantir que a atualização para a versão mais recente do Tapestry seja sempre fácil.

Crítica

Tapestry foi criticado por não ser compatível com as versões anteriores nas versões principais, especialmente observado na transição da versão 4 para a versão 5, onde nenhum caminho de migração limpo estava disponível para os aplicativos existentes. Os membros da equipe do projeto reconheceram isso como um grande problema para os usuários do Tapestry no passado, e a compatibilidade com versões anteriores tornou-se o principal objetivo do design para o Tapestry no futuro. Desde o início do desenvolvimento da versão 5, a compatibilidade com versões anteriores foi listada como um dos quatro novos "Princípios Básicos" da Tapestry, e dois dos outros três tinham como objetivo tornar a evolução do framework possível sem sacrificar a compatibilidade com versões anteriores. Os membros da equipe do projeto afirmam que todas as versões do Tapestry desde a 5.0 são altamente compatíveis com versões anteriores.

As primeiras críticas ao Tapestry 5 também mencionaram a documentação como uma lacuna. Os membros do projeto agora afirmam que essa deficiência foi amplamente corrigida com um Guia do usuário completamente revisado e atualizado e outra documentação.

Desde a versão 5.0, Tapestry agrupou as bibliotecas Prototype e Scriptaculous JavaScript. De acordo com Howard Lewis Ship, no período de 2008-2009 essas escolhas foram razoáveis. Desde então, no entanto, a popularidade do Prototype diminuiu e a do jQuery aumentou dramaticamente. Em resposta, a comunidade Tapestry desenvolveu módulos que permitiam que o jQuery fosse usado além de, ou em vez de, Prototype. Enquanto isso, a versão atual do Tapestry, 5.4, remove a dependência do Prototype inteiramente, substituindo-a por uma camada de compatibilidade na qual jQuery ou Prototype (ou potencialmente qualquer outro framework JavaScript) pode ser conectado.

Relação com outras estruturas

De acordo com Howard Lewis Ship, Tapestry foi inicialmente concebido como uma tentativa de implementar em Java alguns dos conceitos e abordagens gerais encontrados em WebObjects, que na época era escrito em Objective-C e em código fechado.

O Apache Wicket foi desenvolvido como uma resposta à complexidade das primeiras versões do Tapestry, de acordo com o criador do Wicket, Jonathan Locke.

Facelets , a tecnologia de visualização padrão no JavaServer Faces , foi inspirada nas primeiras versões do Tapestry, como uma tentativa de preencher a necessidade de "uma estrutura como Tapestry, apoiada pelo JavaServer Faces como o padrão da indústria".

História

Versão Data Descrição
Versão antiga, não mais mantida: 1.0 2000 Desenvolvido por Howard Lewis Ship para uso interno
Versão antiga, não mais mantida: 2.0 2002-04 Disponibilizado pela primeira vez no SourceForge sob a GNU Lesser General Public License .
Versão antiga, não mais mantida: 3,0 2004-04 O primeiro lançamento no Apache, como um subprojeto Jakarta.
Versão antiga, não mais mantida: 4,0 2006-01 Introduziu o suporte para anotações JDK 1.5, um novo subsistema de validação de entrada e relatório de erro aprimorado
Versão mais antiga, mas ainda mantida: 5.0 12/08/2008 Uma reescrita quase completa do Tapestry 4, introduzindo um novo modelo de componente baseado em POJO enfatizando a convenção sobre a configuração e substituindo o Hivemind por uma nova camada de Inversão de Controle sem XML.
Versão mais antiga, mas ainda mantida: 5,1 04/2009 Melhorias de desempenho e memória, compactação GZIP automática, agregação de JavaScript, mas permaneceu compatível com as versões anteriores do Tapestry 5.0.
Versão mais antiga, mas ainda mantida: 5,2 2010-12 Adicionada validação JSR 303 Bean . Recarregamento de classe ao vivo estendido para implementações de serviço. Pooling de páginas removido.
Versão mais antiga, mas ainda mantida: 5,3 2011-11 Adicionado suporte para doctype HTML5, anotações JSR-330 para injeção, melhorias de desempenho e memória, novos componentes, troca de JavaAssist para manipulação de bytecode ASM
Versão mais antiga, mas ainda mantida: 5.3.1 - 5.3.8 2012-2014 Correções de bugs e pequenas melhorias
Versão estável atual: 5,4-5,4,5 2015-2019 Principais melhorias do lado do cliente. Nova camada JavaScript para suporte a jQuery / Prototype comutável, usa Require.js para seu sistema de módulo JavaScript, Twitter Bootstrap para seu estilo padrão.
Versão estável atual: 5,5 2020-03 Versão estável atual. Suporte para bytecode Java 12, Typescript e Bootstrap 4.

Veja também

Referências

  • Drobiazko, Igor (2012), Tapestry 5: Rapid web application development in Java , Igor Drobiazko, p. 482, arquivado do original em 15/12/2014 , recuperado em 20/01/2013
  • Kolesnikov, Alexander (15 de janeiro de 2008), Tapestry 5: Building Web Applications: Um guia passo a passo para o desenvolvimento da Web em Java com a estrutura Apache Tapestry amigável para desenvolvedores , Packt Publishing , p. 280, ISBN   1-84719-307-2
  • Iok Tong, Ka (1 de janeiro de 2007), Enjoying Web Development with Tapestry (3rd ed.), P. 497, ASIN   B00262M3HS
  • Lewis Ship, Howard (2004), Tapestry in Action , Manning , p. 580, ISBN   1932394117

Notas

links externos