Webframework Apache Tapestry

Servus miteinander,

ich schaue mir gerade einmal das Webframework Tapestry an und muss sagen – schick!

Zum Einsteig gleich einmal ein Quote von der allseits anstarrenden Wikipedia:

Apache Tapestry ist ein Open-Source-Framework für die Programmiersprache Java, mit dem Webanwendungen erstellt werden können. Es ist kein eigenständiger Server, sondern läuft im Kontext eines Servlet-Containers wie dem Web-Server Tomcat. Tapestry ist ein Toplevel-Projekt der Apache Software Foundation.

Dies sagt eigentlich schon alles grundlegende aus. Tapestry ermöglicht es schnell – und ohne lästige Programmierarbeit wie DALs erstellen oder für die Oberfläche irgendwelche Tweaks zur Formulargenerierung zu bauen – Webapplikationen hochzuziehen.

Für mich das faszinierende ist, dass Tapestry alle aktuell eingesetzten Techniken im Bereich Java im Web abdeckt.

Neben einer Hibernate Einbindung und dem obligatorischen Webseitenrendering bietet Tapestry auch eine Reihe von bereits inkludierten Sicherheitsmechanisem mit welchen man sich gegen etwaige dunkle Gesellen wehren kann.

Hier einmal ein kleines Beispiel:

1. Datenbanktabelle Repräsentation als Java Klasse

Hier mittels Hinbernat-Annotation realisiert. Das ganze basiert auf einer sogenannten  HSQL-Datenbank.

Die Annotationen dienen dazu, um Datenfeldverhalten zu modellieren. In diesem Code snippet zum Beispiel setzte ich das flag @Id, sage es soll dem User nicht sichtbar sein (@NonVisual) und soll einen automatisch generierten Wert annehmen (@GeneratedValue).

Mit diesen – und noch weiteren – kann ich jedes einzelne Feld Eigenschaften zuweisen.

@Entity
public class Item {
   @Id
   @NonVisual
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private int id;
   private String title;
   private String url;
   @NonVisual
   private int votes;

   // Getter und Setter folgen...
}

2. reagiere auf eine Action und speichere eine Änderung in die Datenbank

Diese Methode wird automatisch aufgerufen sobald der im letzten Snippet aufgezeigte <t:actionlink t:id=“vote“> geklickt wurde.

Mit dem Hinweis @CommitAfter sorgt dafuer, dass das interne SQL Statement vor dem return abgearbeitet wird.

    @CommitAfter
    public Object onActionFromVote(Item i) {
    	i.setVotes(i.getVotes() + 1);
    	session.persist(i);
    	return listZone.getBody();
    }

3. Quellcode in der View

Hier ist zu sehen, das Tapestry eine Reihe von eigenen „Fake“-Html Tags mit bringt welche alle mit <t:xxx> anfangen.

Diese dienen dazu um automatisch die Oberfläche zu rendern. Gut zu erkennen ist, dass man für den Aufbau einer Liste nur das Tag <t:loop> benötigt. Den Rest übernimmt das Framework für einen.

    <t:zone t:id="listZone" elementName="div">
    <t:loop source="items" value="item">
    	<li>
    		<t:actionlink t:zone="listZone" t:id="vote" context="item">+</t:actionlink>
    		${item.votes} x <a href="${item.url}">${item.title}</a>
    	</li>
    </t:loop>
    </t:zone>

Ich bin noch am Anfang meiner Einarbeitung in Tapestry, aber bereits jetzt bin ich davon überzeugt.

Wer in den Genuss von solch starken Frameworks auch für andere Sprache kommen möchte, den würde ich zum Beispiel für Php das Zend-Framework ans Nerdherz legen.

Wer mehr wissen möchte, dem sei neben der offiziellen Tapestry Seite und dem Wikipedia Artikel auch der praxisbezogene Artikel im Blog von tSpin empfohlen.

– der Bayer

5 Gedanken zu “Webframework Apache Tapestry

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s