Tapestry Apache - Recursos avançados
Neste capítulo, discutiremos alguns recursos avançados do Apache Tapestry em detalhes.
Inversão de controle
Tapestry fornece biblioteca de Inversão de Controle integrada. Tapestry está profundamente integrado ao IoC e usa IoC para todos os seus recursos. A configuração do Tapestry IoC é baseada no próprio Java em vez de XML, como muitos outros contêineres IoC. Módulos baseados em Tapestry IoC são empacotados em arquivo JAR e simplesmente colocados no classpath com configuração zero. O uso de IoC de tapeçaria é baseado na leveza, o que significa -
Pequenas interfaces de dois ou três métodos.
Métodos pequenos com dois ou três parâmetros.
Comunicação anônima por meio de eventos, em vez de invocações de método explícitas.
Módulos
Módulo é uma maneira de estender a funcionalidade do aplicativo Tapestry. Tapestry tem módulos integrados e um grande número de módulos de terceiros. Hibernate é um dos módulos quentes e muito úteis fornecidos pela Tapestry. Ele também tem módulos que integram JMX, JPA, Spring Framework, JSR 303 Bean Validation, JSON, etc. Alguns dos módulos notáveis de terceiros são -
- Tapestry-Cayenne
- Tapestry5-googleanalytics
- Gang of tapestry 5 - Tapestry5-HighCharts
- Gang of tapestry 5 - Tapestry5-jqPlot
- Gang of tapestry 5 - Tapestry5-Jquery
- Gang of tapestry 5 - Tapestry5-Jquery-mobile
- Gang of tapestry 5 - Tapestry5-Portlet
Exceções de tempo de execução
Uma das melhores características da tapeçaria é Detailed Error Reporting. Tapestry ajuda um desenvolvedor fornecendo relatórios de exceção de última geração. O relatório de exceção de tapeçaria é um HTML simples com informações detalhadas. Qualquer pessoa pode entender facilmente o relatório. Tapestry mostra o erro em HTML, bem como salva a exceção em um texto simples com a data e hora da exceção ocorrida. Isso ajudará o desenvolvedor a verificar a exceção no ambiente de produção também. O desenvolvedor pode permanecer confiante de que consertará quaisquer problemas como modelos quebrados, valores nulos inesperados, solicitação sem correspondência, etc.
Aula ao vivo e recarregamento de modelos
Tapestry irá recarregar os modelos e classes automaticamente quando modificados. Esse recurso permite a reflexão imediata das alterações do aplicativo sem passar pelo ciclo de construção e teste. Além disso, esse recurso melhora muito a produtividade do desenvolvimento de aplicativos.
Considere que o pacote raiz do aplicativo é org.example.myfirstapp. Em seguida, as classes nos caminhos a seguir são verificadas para recarregamento.
- org.example.myfirstapp.pages
- org.example.myfirstapp.components
- org.example.myfirstapp.mixins
- org.example.myfirstapp.base
- org.example.myfirstapp.services
O recarregamento da aula ao vivo pode ser desabilitado configurando o modo de produção para true dentro AppModule.java.
configuration.add(SymbolicConstants.PRODUCTION_MODE,”false”);
Teste de Unidade
O teste de unidade é uma técnica pela qual páginas e componentes individuais são testados. Tapestry oferece opções fáceis para páginas e componentes de teste de unidade.
Teste de unidade de uma página: Tapestry fornece uma aula PageTesterpara testar o aplicativo. Isso atua como o navegador e o contêiner de servlet. Ele renderiza a página sem o navegador no próprio lado do servidor e o documento resultante pode ser verificado quanto à renderização correta. Considere uma página simplesHello, que renderiza hello e o texto hello é colocado dentro de um elemento html com id hello_id. Para testar esse recurso, podemos usar o PageTester conforme mostrado abaixo -
public class PageTest extends Assert {
@Test
public void test1() {
Sring appPackage = "org.example.myfirstapp"; // package name
String appName = "App1"; // app name
PageTester tester = new PageTester(appPackage, appName, "src/main/webapp");
Document doc = tester.renderPage("Hello");
assertEquals(doc.getElementById("hello_id").getChildText(), "hello");
}
}
O PageTester também oferece a opção de incluir informações de contexto, envio de formulário, navegação de link etc., além de renderizar a página.
Teste Integrado
O teste integrado ajuda a testar o aplicativo como um módulo em vez de verificar as páginas individuais como no teste de unidade. No teste integrado, vários módulos podem ser testados juntos como uma unidade. Tapestry oferece uma pequena biblioteca chamadaTapestry Test Utilitiespara fazer testes integrados. Esta biblioteca se integra com a ferramenta de teste Selenium para realizar o teste. A biblioteca oferece uma classe baseSeleniumTestCase, que inicia e gerencia o servidor Selenium, o cliente Selenium e a instância Jetty.
Um dos exemplos de teste integrado é o seguinte -
import org.apache.tapestry5.test.SeleniumTestCase;
import org.testng.annotations.Test;
public class IntegrationTest extends SeleniumTestCase {
@Test
public void persist_entities() {
open("/persistitem");
assertEquals(getText("//span[@id='name']").length(), 0);
clickAndWait("link = create item");
assertText("//span[@id = 'name']", "name");
}
}
Painel de Desenvolvimento
O painel de desenvolvimento é a página padrão que é usada para identificar / resolver os problemas em seu aplicativo. O painel é acessado pelo URLhttp://localhost:8080/myfirstapp/core/t5dashboard. O painel mostra todas as páginas, serviços e bibliotecas de componentes disponíveis no aplicativo.
Compressão de Resposta
A tapeçaria compacta automaticamente a resposta usando GZIP compressione transmitir para o cliente. Este recurso reduzirá o tráfego da rede e ajudará na entrega mais rápida da página. A compressão pode ser configurada usando o símbolotapestry.min-gzip-sizeem AppModule.java. O valor padrão é 100 bytes. A tapeçaria compactará a resposta assim que o tamanho da resposta ultrapassar 100 bytes.
Segurança
O Tapestry oferece muitas opções para proteger o aplicativo contra vulnerabilidades de segurança conhecidas no aplicativo da web. Algumas dessas opções estão listadas abaixo -
HTTPS - As páginas de tapeçaria podem ser anotadas com @Secure para torná-la uma página segura e acessível pelo https protocol só.
Page access control - Controlar a página a ser acessada por um determinado usuário apenas.
White-Listed Page - As páginas de tapeçaria podem ser anotadas com um @WhitelistAccessOnly para torná-lo acessível apenas por meio do localhost.
Asset Security- Sob a tapeçaria, apenas certos tipos de arquivos estão acessíveis. Outros podem ser acessados apenas quando oMD5 hash do arquivo é fornecido.
Serialized Object Date - Tapestry integra um HMAC em dados de objetos Java serializados e os envia ao cliente para evitar adulteração de mensagens.
Cross Site Request Forgery- Tapeçaria fornece a 3 rd módulo parte chamada tapeçaria-csrf-protecção para evitar ataques CSRF.
Security Framework integration- Tapestry não trava em uma única implementação de autenticação / autorização. O Tapestry pode ser integrado a qualquer estrutura de autenticação popular.
Exploração madeireira
Tapestry fornece amplo suporte para registro, a gravação automática do progresso do aplicativo enquanto ele é executado. Tapestry usa a biblioteca de registro Java de fato,SLF4J. A anotação@Logpode estar em qualquer método de componente para emitir a entrada e saída do método e também a possível exceção. Além disso, o objeto logger fornecido pela Tapestry pode ser injetado em qualquer componente usando o@Inject anotação conforme mostrado abaixo -
public class MyPage {
@Inject
private Logger logger;
// . . .
void onSuccessFromForm() {
logger.info("Changes saved successfully");
}
@Log
void onValidateFromForm() {
// logic
}
}
Finalmente, podemos agora dizer que o Apache Tapestry traz as melhores maneiras de construir aplicativos concisos, escaláveis, sustentáveis, robustos e habilitados para Ajax. Tapestry pode ser integrado a qualquer aplicativo Java de terceiros. Também pode ajudar na criação de um grande aplicativo da web, pois é muito fácil e rápido.