Apache Wicket : Reinvented the Wheel? St¨arken und Schw¨achen: Ein Erfahrungsbericht aus drei Projekten

Ralf Kuhnlein¨ Freie Universit¨at Berlin

Seminar ”Beitr¨age zum Software Engineering” Ubersicht¨

Was ist ein Webframework

Bisherige Projekte

Auswahlprozess Webframework Vorgehen Uberblick¨ uber¨ Webframeworks Ausschlusskriterien Ausschlusskriterien werden Anforderungen

Wicket Getting Started Dokumentation Trennung HTML/ Testbarkeit

Fazit Empfehlung

, Freie Universit¨at Berlin, 24. November 2011 2 Was ist ein Webframework

Ein Web Application Framework oder Webframework ist ein Software-Framework, das fur¨ die Entwicklung von dynamischen Webseiten oder Webanwendungen ausgelegt ist. Damit werden sich wiederholende T¨atigkeiten vereinfacht, die Wiederverwendung von Code und die Selbstdokumentation der Software-Entwicklung gef¨ordert.1

1http://de.wikipedia.org/wiki/Web_Application_Framework , Freie Universit¨at Berlin, 24. November 2011 3 Bisherige Projekte

I Softwarestringverwaltung (2007 - heute) I Wicket I Databinder I I Softwareverteilungssystem (2010 - heute) I Wicket I Spring I Hibernate I Projekt Open Government Data“ Schulsuche (2011) ” I Wicket I EJB I Hibernate

, Freie Universit¨at Berlin, 24. November 2011 4 Auswahlprozess Webframework: Vorgehen

I Uberblick¨ uber¨ Webframeworks verschaffen

I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien finden

I Prototyp bauen

I Anfangen!

, Freie Universit¨at Berlin, 24. November 2011 5 Auswahlprozess Webframework: Webframeworks A - C

, Freie Universit¨at Berlin, 24. November 2011 6 Auswahlprozess Webframework: Webframeworks - I

, Freie Universit¨at Berlin, 24. November 2011 7 Auswahlprozess Webframework: Webframeworks J - P

, Freie Universit¨at Berlin, 24. November 2011 8 Auswahlprozess Webframework: Webframeworks Q - T

, Freie Universit¨at Berlin, 24. November 2011 9 Auswahlprozess Webframework: Webframeworks V - Z

, Freie Universit¨at Berlin, 24. November 2011 10 Auswahlprozess Webframework: Triviale Ausschlusskriterien

I Unklarer Zustand des Projektes: Alle Roten (46/89)

I Java Inkompatibilit¨at: ASP, PHP, ... (15/89)

I Innerhalb eines Tages nicht zum Laufen zu bringen

I Schlechte Dokumentation

, Freie Universit¨at Berlin, 24. November 2011 11 Auswahlprozess Webframework: Zentrale Ausschlusskriterien

I Erzwungene Codedopplung: GWT

I Schlechte Toolunterstutzung:¨

I Kryptisches HTML: JSF, Struts, Tapestry

I XML-Konfiguration statt Code: Struts

I Lange Fehlersuche / Kryptische Fehlermeldungen: Grails, JSF, Struts, GWT

, Freie Universit¨at Berlin, 24. November 2011 12 Auswahlprozess Webframework: Ausschlusskriterien → Anforderungen

I Schlechte Dokumentation I Einfache Benutzung I Kryptisches HTML / XML I Java Objektmodell I Lange Fehlersuche I Statische Codeprufung¨ I Tests, die genau sagen, wo die Fehler sind

, Freie Universit¨at Berlin, 24. November 2011 13 Wicket: Getting Started Oder: Was macht Maven da eigentlich?

I Maven installieren

I Befehl von der Webseite kopieren

I Zweiten Befehl zum Starten kopieren

I → L¨auft

, Freie Universit¨at Berlin, 24. November 2011 14 Wicket: Projekt Erstellen http://wicket.apache.org/start/quickstart.html

mvn archetype:generate −DarchetypeGroupId=org.apache.wicket −DarchetypeArtifactId=wicket− archetype−quickstart −DarchetypeVersion=1.5.3 −DgroupId=de.fu.berlin −DartifactId=bse−sample −DarchetypeRepository=https://repository.apache.org/ −DinteractiveMode=false

, Freie Universit¨at Berlin, 24. November 2011 15 Wicket: Ausfuhren¨ cd bse−sample mvn jetty:run

, Freie Universit¨at Berlin, 24. November 2011 16 Wicket: Dokumentation

I Wicket uberwiegend¨ gut dokumentiert I Selbsterkl¨arend I Java Doc I Beispiele I Mailingliste I Irc I Wiki I Bucher¨ I Zusammenspiel mit anderen Frameworks weniger gut dokumentiert I Nichts Unl¨osbares (bisher) I Notfalls Sourcecode lesen

, Freie Universit¨at Berlin, 24. November 2011 17 Wicket: Trennung HTML/Java

Listing 1: Wenige HTML Tags

Listing 2: Java Komponenten ¨ahnlich add(new Label(”myId”, ”Hello BSE”));

List items = Arrays.asList(”foo”, ”bar”); add(new ListView(”items”, items) { @Override protected void populateItem(final ListItem item) { item.add(new Label(”item”, item.getDefaultModelObjectAsString())); }});

, Freie Universit¨at Berlin, 24. November 2011 18 Wicket: Trennung HTML/Java: Hallo World

Listing 3: HomePage.html Listing 4: HomePage.java public class HomePage extends WebPage { public HomePage(final PageParameters parameters) { Hallo Irgendein Name! add(new Label(”halloName”, ”BSE”); }}

Verknupfung¨ uber¨ Namensgleichheit

, Freie Universit¨at Berlin, 24. November 2011 19 Wicket: Vererbung in HTML

Listing 6: ImplPage.html Listing 5: SuperPage.html das hier wird ersetzt und dient nur der

Das soll auf jeder Seite stehen

Korrektheit des HTML

Hier kommt sp¨ater die andere Seite hin. Hier ist nun die neue Implementierung und das auch das auch

, Freie Universit¨at Berlin, 24. November 2011 20 Wicket: Interaktion mit HTML

Listing 7: Navigation zu anderen Seiten BookmarkablePageLink homeLink = new BookmarkablePageLink(”homeLink”, HomePage.class, new PageParameters()); add(homeLink);

Listing 8: Events AjaxLink hideHomeLinkButton = new AjaxLink(”hideHomeLinkButton”) { @Override public void onClick(final AjaxRequestTarget target) { homeLink.setVisible(false);

target.addComponent(); }}; add(hideHomeLinkButton);

, Freie Universit¨at Berlin, 24. November 2011 21 Wicket: Webapplication Welche Seite soll eigentlich geladen werden?

Der Einstiegspunkt wird in der web.xml konfiguriert.

Listing 9: web.xml ... applicationClassName de.fu.berlin.WicketApplication

Listing 10: WicketApplication.java public class WicketApplication extends WebApplication { @Override public Class getHomePage() { return HomePage.class; } }

, Freie Universit¨at Berlin, 24. November 2011 22 Wicket: Weitere Features

I Implementierungen fur¨ alle HTML Standardkomponenten

I Ajax

I Eigene Komponenten erstellen analog zu Webpages

I Sicherheit https → Annotationen I Fehler mit Standard Javatools debugbar I In die Webseite eingebauter Ajax Debugger

I Skalierbarkeit → Cluster

I Andere Java Frameworks verwendbar

, Freie Universit¨at Berlin, 24. November 2011 23 Wicket: Testbarkeit

I Java statische Typprufung¨ I HTML Seiten bleiben mit Wicket Tags valides HTML I Testen gegen W3C I Testbarkeit komplett in Java I JUnit

, Freie Universit¨at Berlin, 24. November 2011 24 Wicket: Testen: Hallo World Java

Listing 11: HomePageTests.java public class TestHomePage { @Test public void homepageRendersSuccessfully() { WicketTester tester = new WicketTester(new WicketApplication()); //start and render the test page tester.startPage(HomePage.class);

//assert rendered page class tester.assertRenderedPage(HomePage.class);

tester.assertLabel(”halloName”, ”BSE”); } }

, Freie Universit¨at Berlin, 24. November 2011 25 Fazit

I Leichter Einstieg I Arbeitskollegen finden sich auch schnell zurecht I Aber: Kenntnisse von Objektorientierung / Entwurfsmustern n¨otig

I Bisher nichts Unl¨osbares I Viele fertige Fremdl¨osungen I Sind oft nicht perfekt dokumentiert I Erh¨ohen die Komplexit¨at

, Freie Universit¨at Berlin, 24. November 2011 26 Fazit: Empfehlung

I Wicket I In viele kleine Komponenten zerlegen I Tests schreiben, mindestens assertRenderedPage“ ” I Spring I Dependency injection

I (Hibernate)

I Buch kaufen

I Erst Maven lernen

, Freie Universit¨at Berlin, 24. November 2011 27 Danke

Wicket: Reinvented the wheel? Yes and it’s rounder. Fragen?

, Freie Universit¨at Berlin, 24. November 2011 28