Apache Wicket Web Framework: 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/Java 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 Hibernate 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 D - 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:¨ Grails
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 Swing add(new Label(”myId”, ”Hello BSE”));
List
, 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 derDas soll auf jeder Seite stehen
Korrektheit des HTML, Freie Universit¨at Berlin, 24. November 2011 20 Wicket: Interaktion mit HTML
Listing 7: Navigation zu anderen Seiten BookmarkablePageLink homeLink = new BookmarkablePageLink
Listing 8: Events AjaxLink hideHomeLinkButton = new AjaxLink
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 ...
Listing 10: WicketApplication.java public class WicketApplication extends WebApplication { @Override public 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