Tapiz Apache - Funciones avanzadas
En este capítulo, discutiremos en detalle algunas características avanzadas de Apache Tapestry.
Inversión de control
Tapestry proporciona una biblioteca de inversión de control incorporada. Tapestry está profundamente integrado en IoC y utiliza IoC para todas sus funciones. La configuración de Tapestry IoC se basa en el propio Java en lugar de XML como muchos otros contenedores de IoC. Los módulos basados en Tapestry IoC se empaquetan en un archivo JAR y simplemente se colocan en la ruta de clase sin configuración. El uso de Tapestry IoC se basa en la ligereza, lo que significa:
Pequeñas interfaces de dos o tres métodos.
Pequeños métodos con dos o tres parámetros.
Comunicación anónima a través de eventos, en lugar de invocaciones de métodos explícitos.
Módulos
El módulo es una forma de ampliar la funcionalidad de la aplicación Tapestry. Tapestry tiene tanto módulos incorporados como una gran cantidad de módulos de terceros. Hibernate es uno de los módulos interesantes y muy útiles proporcionados por Tapestry. También tiene módulos que integran JMX, JPA, Spring Framework, JSR 303 Bean Validation, JSON, etc. Algunos de los módulos de terceros notables son:
- Tapestry-Cayenne
- Tapestry5-googleanalytics
- Cuadrilla de tapiz 5 - Tapestry5-HighCharts
- Cuadrilla de tapiz 5 - Tapestry5-jqPlot
- Cuadrilla de tapiz 5 - Tapestry5-Jquery
- Pandilla de tapiz 5 - Tapestry5-Jquery-mobile
- Cuadrilla de tapiz 5 - Tapestry5-Portlet
Excepciones de tiempo de ejecución
Una de las mejores características del tapiz es Detailed Error Reporting. Tapestry ayuda a un desarrollador al proporcionar informes de excepciones de última generación. El informe de excepción de tapiz es HTML simple con información detallada. Cualquiera puede entender fácilmente el informe. Tapestry muestra el error en HTML y también guarda la excepción en un texto sin formato con la fecha y hora en que ocurrió la excepción. Esto ayudará al desarrollador a verificar la excepción en el entorno de producción también. El desarrollador puede confiar en solucionar cualquier problema, como plantillas rotas, valores nulos inesperados, solicitud no coincidente, etc.
Recarga de plantillas y clases en vivo
Tapestry recargará las plantillas y clases automáticamente cuando se modifiquen. Esta característica permite el reflejo inmediato de los cambios de la aplicación sin pasar por el ciclo de compilación y prueba. Además, esta característica mejora enormemente la productividad del desarrollo de la aplicación.
Considere que el paquete raíz de la aplicación es org.example.myfirstapp. Luego, las clases en las siguientes rutas se escanean para recargar.
- org.example.myfirstapp.pages
- org.example.myfirstapp.components
- org.example.myfirstapp.mixins
- org.example.myfirstapp.base
- org.example.myfirstapp.services
La recarga de la clase en vivo se puede deshabilitar configurando el modo de producción en true en AppModule.java.
configuration.add(SymbolicConstants.PRODUCTION_MODE,”false”);
Examen de la unidad
La prueba unitaria es una técnica mediante la cual se prueban páginas y componentes individuales. Tapestry proporciona opciones sencillas para unificar páginas y componentes de prueba.
Prueba unitaria de una página: tapiz proporciona una clase PageTesterpara probar la aplicación. Esto actúa como navegador y como contenedor de servlets. Representa la página sin el navegador en el lado del servidor y el documento resultante se puede verificar para una representación correcta. Considere una página simpleHello, que muestra hola y el texto de saludo está encerrado dentro de un elemento html con id hello_id. Para probar esta función, podemos usar PageTester como se muestra a continuación:
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");
}
}
PageTester también ofrece la opción de incluir información de contexto, envío de formularios, navegación de enlaces, etc., además de representar la página.
Pruebas integradas
Las pruebas integradas ayudan a probar la aplicación como un módulo en lugar de verificar las páginas individuales como en las pruebas unitarias. En las pruebas integradas, se pueden probar varios módulos juntos como una unidad. Tapestry proporciona una pequeña biblioteca llamadaTapestry Test Utilitiespara hacer pruebas integradas. Esta biblioteca se integra con la herramienta de prueba Selenium para realizar la prueba. La biblioteca proporciona una clase baseSeleniumTestCase, que inicia y administra el servidor Selenium, el cliente Selenium y la Instancia Jetty.
Uno de los ejemplos de pruebas integradas es el siguiente:
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");
}
}
Panel de desarrollo
El panel de desarrollo es la página predeterminada que se utiliza para identificar / resolver los problemas en su aplicación. Se accede al panel mediante la URLhttp://localhost:8080/myfirstapp/core/t5dashboard. El tablero muestra todas las páginas, servicios y bibliotecas de componentes disponibles en la aplicación.
Compresión de respuesta
Tapestry comprime automáticamente la respuesta usando GZIP compressiony transmitirlo al cliente. Esta característica reducirá el tráfico de la red y ayudará a una entrega más rápida de la página. La compresión se puede configurar mediante el símbolotapestry.min-gzip-sizeen AppModule.java. El valor predeterminado es 100 bytes. Tapestry comprimirá la respuesta una vez que el tamaño de la respuesta cruce los 100 bytes.
Seguridad
Tapestry ofrece muchas opciones para proteger la aplicación contra vulnerabilidades de seguridad conocidas en la aplicación web. Algunas de estas opciones se enumeran a continuación:
HTTPS - Las páginas de tapiz se pueden anotar con @Secure para que sea una página segura y accesible por el https protocol solamente.
Page access control - Controlar la página a la que accederá un determinado usuario únicamente.
White-Listed Page - Las páginas de tapiz se pueden anotar con un @WhitelistAccessOnly para hacerlo accesible solo a través del localhost.
Asset Security- Bajo tapiz, solo se puede acceder a ciertos tipos de archivos. Se puede acceder a otros solo cuando elMD5 hash del archivo se proporciona.
Serialized Object Date - Tapestry integra un HMAC en datos de objetos Java serializados y los envía al cliente para evitar la manipulación de mensajes.
Cross Site Request Forgery- Tapiz ofrece un 3 er módulo de parte llamada-csrf-protección tapiz para prevenir cualquier ataque CSRF.
Security Framework integration- Tapestry no se bloquea en una única implementación de autenticación / autorización. Tapestry se puede integrar con cualquier marco de autenticación popular.
Inicio sesión
Tapestry proporciona un amplio soporte para el registro, el registro automático del progreso de la aplicación mientras se ejecuta. Tapestry utiliza la biblioteca de registro de Java de facto,SLF4J. La anotación@Logpuede estar en cualquier método de componente para emitir la entrada y salida del método y también la posible excepción. Además, el objeto logger proporcionado por Tapestry se puede inyectar en cualquier componente utilizando el@Inject anotación como se muestra a continuación -
public class MyPage {
@Inject
private Logger logger;
// . . .
void onSuccessFromForm() {
logger.info("Changes saved successfully");
}
@Log
void onValidateFromForm() {
// logic
}
}
Finalmente, ahora podemos decir que Apache Tapestry ofrece las mejores formas de construir aplicaciones concisas, escalables, sostenibles, robustas y habilitadas para Ajax. Tapestry se puede integrar con cualquier aplicación Java de terceros. También puede ayudar a crear una gran aplicación web, ya que es bastante fácil y rápido.