Apache Tapestry - Fonctionnalités avancées

Dans ce chapitre, nous aborderons en détail quelques fonctionnalités avancées d'Apache Tapestry.

Inversion de contrôle

Tapestry fournit une bibliothèque d'inversion de contrôle intégrée. Tapestry est profondément intégré à IoC et utilise IoC pour toutes ses fonctionnalités. La configuration Tapestry IoC est basée sur Java lui-même au lieu de XML comme de nombreux autres conteneurs IoC. Les modules basés sur Tapestry IoC sont emballés dans un fichier JAR et simplement déposés dans le chemin de classe avec aucune configuration. L'utilisation de Tapestry IoC est basée sur la légèreté, ce qui signifie -

  • Petites interfaces de deux ou trois méthodes.

  • Petites méthodes avec deux ou trois paramètres.

  • Communication anonyme via des événements, plutôt que des appels de méthode explicites.

Modules

Le module est un moyen d'étendre les fonctionnalités de l'application Tapestry. Tapestry a à la fois des modules intégrés et un grand nombre de modules tiers. Hibernate est l'un des modules chauds et très utiles fournis par Tapestry. Il dispose également de modules intégrant JMX, JPA, Spring Framework, JSR 303 Bean Validation, JSON, etc. Certains des modules tiers notables sont -

  • Tapestry-Cayenne
  • Tapestry5-googleanalytics
  • Bande de tapisserie 5 - Tapestry5-HighCharts
  • Bande de tapisserie 5 - Tapestry5-jqPlot
  • Bande de tapisserie 5 - Tapestry5-JQuery
  • Bande de tapisserie 5 - Tapestry5-Jquery-mobile
  • Bande de tapisserie 5 - Tapestry5-Portlet

Exceptions d'exécution

L'une des meilleures caractéristiques de la tapisserie est Detailed Error Reporting. Tapestry aide un développeur en fournissant des rapports d'exception à la pointe de la technologie. Le rapport d'exception Tapestry est un simple HTML avec des informations détaillées. Tout le monde peut facilement comprendre le rapport. Tapestry affiche l'erreur en HTML et enregistre l'exception dans un texte brut avec la date et l'heure de l'exception. Cela aidera également le développeur à vérifier l'exception dans l'environnement de production. Le développeur peut rester confiant pour résoudre tous les problèmes tels que les modèles cassés, les valeurs nulles inattendues, les demandes sans correspondance, etc.,

Rechargement de cours et de modèles en direct

Tapestry rechargera automatiquement les modèles et les classes une fois modifiés. Cette fonctionnalité permet la réflexion immédiate des modifications de l'application sans passer par le cycle de construction et de test. En outre, cette fonctionnalité améliore considérablement la productivité du développement d'applications.

Considérez que le package racine de l'application est org.example.myfirstapp. Ensuite, les classes dans les chemins suivants sont analysées pour être rechargées.

  • org.example.myfirstapp.pages
  • org.example.myfirstapp.components
  • org.example.myfirstapp.mixins
  • org.example.myfirstapp.base
  • org.example.myfirstapp.services

Le rechargement de la classe en direct peut être désactivé en définissant le mode de production sur true dans AppModule.java.

configuration.add(SymbolicConstants.PRODUCTION_MODE,”false”);

Test unitaire

Le test unitaire est une technique par laquelle des pages et des composants individuels sont testés. Tapestry fournit des options simples pour les pages de test unitaire et les composants.

Test unitaire d'une page: Tapestry fournit une classe PageTesterpour tester l'application. Cela agit à la fois comme navigateur et conteneur de servlet. Il rend la page sans le navigateur du côté serveur lui-même et le document résultant peut être vérifié pour un rendu correct. Considérez une simple pageHello, qui rend bonjour et le texte bonjour est enfermé dans un élément html avec id hello_id. Pour tester cette fonctionnalité, nous pouvons utiliser PageTester comme indiqué ci-dessous -

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"); 
   } 
}

Le PageTester offre également la possibilité d'inclure des informations de contexte, la soumission de formulaire, la navigation par lien, etc., en plus de rendre la page.

Test intégré

Les tests intégrés permettent de tester l'application en tant que module au lieu de vérifier les pages individuelles comme dans les tests unitaires. Dans les tests intégrés, plusieurs modules peuvent être testés ensemble en tant qu'unité. Tapestry fournit une petite bibliothèque appeléeTapestry Test Utilitiesfaire des tests intégrés. Cette bibliothèque s'intègre à l'outil de test Selenium pour effectuer les tests. La bibliothèque fournit une classe de baseSeleniumTestCase, qui démarre et gère le serveur Selenium, le client Selenium et Jetty Instance.

Un des exemples de tests intégrés est le suivant -

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"); 
   } 
}

Tableau de bord de développement

Le tableau de bord de développement est la page par défaut utilisée pour identifier / résoudre les problèmes de votre application. Le tableau de bord est accessible par l'URLhttp://localhost:8080/myfirstapp/core/t5dashboard. Le tableau de bord affiche toutes les pages, services et bibliothèques de composants disponibles dans l'application.

Compression de réponse

Tapestry compresse automatiquement la réponse en utilisant GZIP compressionet diffusez-le au client. Cette fonctionnalité réduira le trafic réseau et accélérera la diffusion de la page. La compression peut être configurée à l'aide du symboletapestry.min-gzip-sizedans AppModule.java. La valeur par défaut est de 100 octets. Tapestry compressera la réponse une fois que la taille de la réponse franchit 100 octets.

Sécurité

Tapestry fournit de nombreuses options pour sécuriser l'application contre les vulnérabilités de sécurité connues dans l'application Web. Certaines de ces options sont répertoriées ci-dessous -

  • HTTPS - Les pages de tapisserie peuvent être annotées avec @Secure pour en faire une page sécurisée et accessible par le https protocol seulement.

  • Page access control - Contrôle de la page à laquelle un certain utilisateur doit accéder uniquement.

  • White-Listed Page - Les pages de tapisserie peuvent être annotées avec un @WhitelistAccessOnly pour le rendre accessible uniquement via le localhost.

  • Asset Security- Sous tapisserie, seuls certains types de fichiers sont accessibles. D'autres ne sont accessibles que lorsque leMD5 hash du fichier est fourni.

  • Serialized Object Date - Tapestry intègre un HMAC dans des données d'objet Java sérialisées et les envoie au client pour éviter la falsification des messages.

  • Cross Site Request Forgery- Tapisserie offre une 3 e -CSRF protection tapisserie module appelé pour prévenir toute attaque CSRF.

  • Security Framework integration- Tapestry ne se verrouille pas dans une seule implémentation d'authentification / d'autorisation. Tapestry peut être intégré à n'importe quel cadre d'authentification populaire.

Enregistrement

Tapestry fournit un support étendu pour la journalisation, l'enregistrement automatique de la progression de l'application lors de son exécution. Tapestry utilise la bibliothèque de journalisation Java de facto,SLF4J. L'annotation@Logpeut être dans n'importe quelle méthode de composant pour émettre l'entrée et la sortie de la méthode ainsi que l'exception possible. De plus, l'objet logger fourni par Tapestry peut être injecté dans n'importe quel composant à l'aide du@Inject annotation comme indiqué ci-dessous -

public class MyPage { 
   @Inject 
   private Logger logger; 
   
   // . . . 
    
   void onSuccessFromForm() { 
      logger.info("Changes saved successfully"); 
   } 
     
   @Log 
   void onValidateFromForm() { 
      // logic 
   } 
}

Enfin, nous pouvons maintenant dire qu'Apache Tapestry offre les meilleurs moyens de créer des applications concises, évolutives, maintenables, robustes et compatibles Ajax. Tapestry peut être intégré à n'importe quelle application Java tierce. Cela peut également aider à créer une grande application Web car c'est assez simple et rapide.