Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Apache Wicket Web Framework: Reinvented the Wheel?Starken und Schwachen: Ein Erfahrungsbericht aus drei Projekten
Ralf KuhnleinFreie Universitat Berlin
Seminar ”Beitrage zum Software Engineering”
Ubersicht
Was ist ein Webframework
Bisherige Projekte
Auswahlprozess WebframeworkVorgehenUberblick uber WebframeworksAusschlusskriterienAusschlusskriterien werden Anforderungen
WicketGetting StartedDokumentationTrennung HTML/JavaTestbarkeit
FazitEmpfehlung
,
Freie Universitat Berlin, 24. November 2011 2
Was ist ein Webframework
Ein Web Application Framework oder Webframework ist einSoftware-Framework, das fur die Entwicklung von dynamischen Webseitenoder Webanwendungen ausgelegt ist. Damit werden sich wiederholendeTatigkeiten vereinfacht, die Wiederverwendung von Code und dieSelbstdokumentation der Software-Entwicklung gefordert.1
1http://de.wikipedia.org/wiki/Web_Application_Framework
,
Freie Universitat Berlin, 24. November 2011 3
Bisherige Projekte
I Softwarestringverwaltung (2007 - heute)I WicketI DatabinderI Hibernate
I Softwareverteilungssystem (2010 - heute)I WicketI SpringI Hibernate
I Projekt”Open Government Data“ Schulsuche (2011)
I WicketI EJBI Hibernate
,
Freie Universitat Berlin, 24. November 2011 4
Auswahlprozess Webframework: Vorgehen
I Uberblick uber Webframeworks verschaffen
I Einzelne ausprobierenI Nicht nach Features suchen
I Ausschusskriterien finden
I Prototyp bauen
I Anfangen!
,
Freie Universitat Berlin, 24. November 2011 5
Auswahlprozess Webframework: Webframeworks A - C
,
Freie Universitat Berlin, 24. November 2011 6
Auswahlprozess Webframework: Webframeworks D - I
,
Freie Universitat Berlin, 24. November 2011 7
Auswahlprozess Webframework: Webframeworks J - P
,
Freie Universitat Berlin, 24. November 2011 8
Auswahlprozess Webframework: Webframeworks Q - T
,
Freie Universitat Berlin, 24. November 2011 9
Auswahlprozess Webframework: Webframeworks V - Z
,
Freie Universitat Berlin, 24. November 2011 10
Auswahlprozess Webframework: TrivialeAusschlusskriterien
I Unklarer Zustand des Projektes: Alle Roten (46/89)
I Java Inkompatibilitat: ASP, PHP, ... (15/89)
I Innerhalb eines Tages nicht zum Laufen zu bringen
I Schlechte Dokumentation
,
Freie Universitat Berlin, 24. November 2011 11
Auswahlprozess Webframework: ZentraleAusschlusskriterien
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 Universitat Berlin, 24. November 2011 12
Auswahlprozess Webframework: Ausschlusskriterien →Anforderungen
I Schlechte DokumentationI Einfache Benutzung
I Kryptisches HTML / XMLI Java Objektmodell
I Lange FehlersucheI Statische CodeprufungI Tests, die genau sagen, wo die Fehler sind
,
Freie Universitat Berlin, 24. November 2011 13
Wicket: Getting StartedOder: Was macht Maven da eigentlich?
I Maven installieren
I Befehl von der Webseite kopieren
I Zweiten Befehl zum Starten kopieren
I → Lauft
,
Freie Universitat 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 Universitat Berlin, 24. November 2011 15
Wicket: Ausfuhren
cd bse−samplemvn jetty:run
,
Freie Universitat Berlin, 24. November 2011 16
Wicket: Dokumentation
I Wicket uberwiegend gut dokumentiertI SelbsterklarendI Java DocI BeispieleI MailinglisteI IrcI WikiI Bucher
I Zusammenspiel mit anderen Frameworks weniger gut dokumentiertI Nichts Unlosbares (bisher)I Notfalls Sourcecode lesen
,
Freie Universitat Berlin, 24. November 2011 17
Wicket: Trennung HTML/Java
Listing 1: Wenige HTML Tags<span wicket:id=”myId” /><wicket:extend><wicket:child><wicket:panel>
Listing 2: Java Komponenten ahnlich Swingadd(new Label(”myId”, ”Hello BSE”));
List<String> items = Arrays.asList(”foo”, ”bar”);
add(new ListView<String>(”items”, items) {@Overrideprotected void populateItem(final ListItem<String> item) {
item.add(new Label(”item”, item.getDefaultModelObjectAsString()));}});
,
Freie Universitat Berlin, 24. November 2011 18
Wicket: Trennung HTML/Java: Hallo World
Listing 3: HomePage.html<html><body>
Hallo <span wicket:id=”halloName”>Irgendein Name</span>!
</body></html>
Listing 4: HomePage.javapublic class HomePage extends WebPage {
public HomePage(final PageParametersparameters) {
add(new Label(”halloName”, ”BSE”);
}}
Verknupfung uber Namensgleichheit
,
Freie Universitat Berlin, 24. November 2011 19
Wicket: Vererbung in HTML
Listing 5: SuperPage.html<html><body><h1>Das soll auf jeder Seite stehen</h1>
<wicket:child>Hier kommt spater die andere Seite hin.
</wicket:child>
<span>und das auch</span></body>
</html>
Listing 6: ImplPage.html<html><body>
das hier wird ersetzt und dient nur derKorrektheit des HTML
<wicket:extend>Hier ist nun die neue Implementierung<span wicket:id=”halloName” />
</wicket:extend>
das auch</body>
</html>
,
Freie Universitat Berlin, 24. November 2011 20
Wicket: Interaktion mit HTML
Listing 7: Navigation zu anderen SeitenBookmarkablePageLink homeLink = new BookmarkablePageLink<Object>(”homeLink”, HomePage.class,new PageParameters());add(homeLink);
Listing 8: EventsAjaxLink hideHomeLinkButton = new AjaxLink<Object>(”hideHomeLinkButton”) {
@Overridepublic void onClick(final AjaxRequestTarget target) {
homeLink.setVisible(false);
target.addComponent(<A sourrounding component of homeLink>);}};
add(hideHomeLinkButton);
,
Freie Universitat Berlin, 24. November 2011 21
Wicket: WebapplicationWelche Seite soll eigentlich geladen werden?
Der Einstiegspunkt wird in der web.xml konfiguriert.
Listing 9: web.xml...<init−param><param−name>applicationClassName</param−name><param−value>de.fu.berlin.WicketApplication</param−value>
</init−param...
Listing 10: WicketApplication.javapublic class WicketApplication extends WebApplication{
@Overridepublic Class<HomePage> getHomePage(){
return HomePage.class;}
}
,
Freie Universitat 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 → AnnotationenI Fehler mit Standard Javatools debugbar
I In die Webseite eingebauter Ajax Debugger
I Skalierbarkeit → Cluster
I Andere Java Frameworks verwendbar
,
Freie Universitat Berlin, 24. November 2011 23
Wicket: Testbarkeit
I Java statische TypprufungI HTML Seiten bleiben mit Wicket Tags valides HTML
I Testen gegen W3C
I Testbarkeit komplett in JavaI JUnit
,
Freie Universitat Berlin, 24. November 2011 24
Wicket: Testen: Hallo World Java
Listing 11: HomePageTests.javapublic class TestHomePage{
@Testpublic void homepageRendersSuccessfully(){
WicketTester tester = new WicketTester(new WicketApplication());//start and render the test pagetester.startPage(HomePage.class);
//assert rendered page classtester.assertRenderedPage(HomePage.class);
tester.assertLabel(”halloName”, ”BSE”);}
}
,
Freie Universitat Berlin, 24. November 2011 25
Fazit
I Leichter EinstiegI Arbeitskollegen finden sich auch schnell zurechtI Aber: Kenntnisse von Objektorientierung / Entwurfsmustern notig
I Bisher nichts UnlosbaresI Viele fertige Fremdlosungen
I Sind oft nicht perfekt dokumentiertI Erhohen die Komplexitat
,
Freie Universitat Berlin, 24. November 2011 26
Fazit: Empfehlung
I WicketI In viele kleine Komponenten zerlegenI Tests schreiben, mindestens
”assertRenderedPage“
I SpringI Dependency injection
I (Hibernate)
I Buch kaufen
I Erst Maven lernen
,
Freie Universitat Berlin, 24. November 2011 27
Danke
Wicket: Reinvented the wheel?Yes and it’s rounder.
Fragen?
,
Freie Universitat Berlin, 24. November 2011 28