Az Apache Tapestry egy nyílt forráskódú komponens-orientált Java web alkalmazás keretrendszer koncepcióját tekintve hasonló a JavaServer Faces-hez és Apache Wicket-hez. A Tapestry-t Howard Lewis Ship készítette, és az Apache Software Foundation 2006-ban fogadta el felsőszintű projektként.Drobiazko 2012, p. 1.
A Tapestry nagy hangsúlyt fektet az egyszerűségre, könnyen használhatóságra és fejlesztői munkatermelékenységre. A konvenció a konfiguráció felett (angolul Convention over Configuration) paradigmára épül, kiküszöbölve majdnem az összes XML konfigurációt.http://tapestryjava.blogspot.com/2006/07/tapestry-5-updates.html Tapestry moduláris megközelítést használ a webfejlesztésben azzal, hogy erős kötés van minden weboldalon lévő felhasználói felület komponens (objektum) és az ő Java osztálya között. Ez a komponens alapú architektúra számos ötletet vesz kölcsön a WebObjects-től.Tapestry in Action - Preface by Howard Lewis Ship
Hello World példa
Egy minimális, sablonnal ellátott Tapestry alkalmazásnak csak három fájlra van szüksége:
HelloWorld.tml Az (X)HTML sablon a /helloworld oldalhoz. Tapestry sablonok tartalmazhatnak bármilyen jól formált (X)HTML jelöléseket. <!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 Az oldal osztálya, amely kapcsolódik a sablonhoz. Ez csak egy *username* property-t biztosít, amit a sablon elérhet. 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 A servlet alkalmazás Deployment descriptor-a, amely a Tapestry-t telepíti, mint servlet filter. <?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> <!-- megmondja a Tapestry 5-nek, hol keresse az oldalakat, komponenseket és ezek keverékét --> <param-name>tapestry.app-package</param-name> <param-value>org.example.demo</param-value> </context-param> <filter> <!-- definiálja a Tapestry servlet filter-t --> <filter-name>app</filter-name> <filter-class>org.apache.tapestry5.TapestryFilter</filter-class> </filter> <filter-mapping> <!-- megmondja a servlet konténernek melyik kéréseket melyik Tapestry servlet filter-nek küldje --> <filter-name>app</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
Osztály transzformáció A Tapestry bájtkód manipulációt használ, hogy átalakítson oldal és komponens osztályokat futásidőben. Ez a megközelítés lehetővé teszi az osztály és komponens osztályok számára, hogy egyszerű POJOkként legyenek megírva, néhány elnevezési konvencióval és annotációval potenciálisan triggerelve lényegi kiegészítő viselkedéssel az osztály betöltésekor. A Tapestry 5.0, 5.1 és 5.2 verziói a Javassist bájtkód manipulációs könyvtárat használták. Az ezt követő verziók lecserélték a Javassist-ot egy új Plastic nevű bájtkód manipulációs réteggel, amely az ObjectWeb ASM-en alapul.http://tawus.wordpress.com/2011/04/18/meeting-plastic/
Kliens-oldali támogatás
A Tapestry 5-ös verziói az 5.3-asig becsomagolták a Prototype és script.aculo.us JavaScript keretrendszereket a Tapestry-specifikus könyvtárral együtt, hogy támogatni tudják a Ajax műveleteket első kézből. A harmadik fél által írt modulok szintén elérhetők, hogy integrálják a jQuery-t a Prototype/Scriptaculous helyett illetve mellett.
Az 5.4-es verziótól kezdve a Tapestry tartalmaz egy új JavaScript réteget, amely eltávolítja a beépített komponensek Prototype-hoz való függőségét, lehetővé téve a jQuery és más JavaScript keretrendszer beépíthető legyen modulként.http://tapestryjava.blogspot.com/2012/10/zeroing-in-on-tapestry-54.html
Az 5.4-es verzió továbbá bevezette a JavaScript modulok támogatását a RequireJS modul betöltő rendszer használatával.
Alapvető alapelvek
A Tapestry projekt dokumentáció idézi a "négy alapelv"et, amely irányítja az összes fejlesztési döntést a Tapestry esetén 2008-tól az 5-ös verziótól kezdve:
Statikus struktúra, dinamikus viselkedés — oldal és komponens struktúra kifejezetten statikus kiküszöbölve a nagy oldalak és komponens fák készítésének szükségességét. Alkalmazkodási API – a keretrendszert arra tervezték, hogy alkalmazkodjon a kódhoz, és ne a kódnak kelljen alkalmazkodni a keretrendszernek Megkülönbözteti a nyilvános és belső API-kat – minden API kifejezetten "belső" (privát) kivéve azok, melyek szükségszerűen nyilvánosak. Biztosítja a visszamenőleges kompatibilitást – A Tapestry fejlesztők maximálisan elkötelezettek annak biztosítása mellett, hogy a frissíteni a Tapestry-t a legfrissebb verziójára mindig nagyon könnyű.
Kritika
A Tapestry-t sokan kritizálták, hogy a fő verziók visszafelé nem kompatibilisek, legfőképpen a 4-es és 5-ös közti átvitel problémás, ahol nincs tiszta migrációs út a már létező alkalmazásokhoz. A projekt tagok azt elismerték, hogy ez fő probléma volt a Tapestry felhasználók számára a múltban, de a jövőben a visszafelé kompatibilitást tették meg a fő tervezési célkitűzésként.
Kapcsolódó projektek Tynamo Framework aka Trails 2 a Tapestry 5-ön alapul. JumpStart oktatóanyag Tapestry példákon keresztül.
Kapcsolódó szócikkek Java EE Webalkalmazás keretrendszerek összehasonlítása Faceletek Apache Wicket Java view technológiák és keretrendszerek
Források
Jegyzetek
További információk Tapestry weboldala Howard Lewis Ship Tynamo projekt Getting Started példák
Fordítás
Kategória:Webalkalmazás-keretrendszerek Kategória:Java enterprise platform Tapestry