Apache Tapestry
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.

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.
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.

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.

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ámogotni 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.

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

Jegyzetek

Jegyzetek

További információk 
 Tapestry weboldala
 Howard Lewis Ship
 Tynamo projekt 
 Getting Started példák

Fordítás 

Webalkalmazás-keretrendszerek
Java enterprise platform
Tapestry
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 Foundationban fogadta el felsőszintű projektként . 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 . 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 . 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 Application3//EN " " http://java.sun.com/dtd/web-app_2_3.dtd " > <web-app> <display-name>Tapestry Example</display-name> <context-param> <!-- megmondja a Tapestrynek , 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 Tapestry0,1 és2 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 . Kliens-oldali támogatás A Tapestryös verziói az3-asig becsomagolták a Prototype és script.aculo.us JavaScript keretrendszereket a Tapestry-specifikus könyvtárral együtt , hogy támogotni 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 . Az4-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 . Az4-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éntól azö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 aes ésö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 a Tapestryö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 Jegyzetek Jegyzetek További információk Tapestry weboldala Howard Lewis Ship Tynamo projekt Getting Started példák Fordítás Webalkalmazás-keretrendszerek Java enterprise platform Tapestry