28
Apache Wicket Web Framework: Reinvented the Wheel? St¨ arken und Schw¨ achen: Ein Erfahrungsbericht aus drei Projekten Ralf K¨ uhnlein Freie Universit¨ at Berlin Seminar ”Beitr¨ age zum Software Engineering”

Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

Apache Wicket Web Framework: Reinvented the Wheel?Starken und Schwachen: Ein Erfahrungsbericht aus drei Projekten

Ralf KuhnleinFreie Universitat Berlin

Seminar ”Beitrage zum Software Engineering”

Page 2: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 3: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 4: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 5: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 6: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

Auswahlprozess Webframework: Webframeworks A - C

,

Freie Universitat Berlin, 24. November 2011 6

Page 7: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

Auswahlprozess Webframework: Webframeworks D - I

,

Freie Universitat Berlin, 24. November 2011 7

Page 8: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

Auswahlprozess Webframework: Webframeworks J - P

,

Freie Universitat Berlin, 24. November 2011 8

Page 9: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

Auswahlprozess Webframework: Webframeworks Q - T

,

Freie Universitat Berlin, 24. November 2011 9

Page 10: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

Auswahlprozess Webframework: Webframeworks V - Z

,

Freie Universitat Berlin, 24. November 2011 10

Page 11: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 12: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 13: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 14: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 15: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 16: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

Wicket: Ausfuhren

cd bse−samplemvn jetty:run

,

Freie Universitat Berlin, 24. November 2011 16

Page 17: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 18: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 19: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 20: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 21: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 22: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 23: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 24: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 25: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 26: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 27: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

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

Page 28: Apache Wicket Web Framework: Reinvented the Wheel ... · I Uberblick uber Webframeworks verscha en I Einzelne ausprobieren I Nicht nach Features suchen I Ausschusskriterien nden I

Danke

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

Fragen?

,

Freie Universitat Berlin, 24. November 2011 28