 Fachthema

Geschäftstüchtig cket eingehen, werden im Folgenden die Ziele des Webframe- works und seine grundsätzliche Funktionsweise dargestellt.

Webarchitekturen Wicket-Ziele Nachstehende Ziele liegen der Entwicklung des Webframe- mit Apache Wicket works zugrunde [Wicket]: H Easy: Das Framework soll einfach, klar und konsistent sein. Der Entwickler muss nach dem Verständnis der Konzepte in Alexander Elsholz, Elena Stoll der Lage sein, die Aktionen des Webframeworks nachvoll- ziehen zu können. Dank dieser Transparenz ist es vergleichs- Apache Wicket wird zum Mainstream – und immer mehr Firmen sprin- weise einfach, das Framework um eigene Abstraktionen gen auf den Zug auf. Die Gründe hierfür sind offensichtlich: Statusbe- zu ergänzen. So können beispielsweise unterschiedlichste haftete, komponentenorientierte und ereignisgesteuerte Webprogram- JavaScript- oder CSS-Frameworks sehr einfach integriert mierung ist mit erprobten UI-Mustern in möglich und setzt kein werden. Auch Wickets Lifecycle ist gut anpassbar. Dies wird Expertenwissen in HTML, CSS oder JavaScript voraus. Der Artikel zeigt zum Beispiel durch das integrierte Testframework deutlich, aus der Praxis, wie testgetriebene Entwicklung von modernen Web­ welches den Standard-Lifecycle ersetzt. Demnach ist die oberflächen mit Wicket möglich ist. Dabei gehen wir auf die Wicket- Webapplikation gut in die eigene IT-Architektur integrierbar. Kernprinzipien ein und stellen Chancen und Herausforderungen dar, die H Reusable: Das Framework soll die Wiederverwendung un- sich bei der Entwicklung mit dem Webframework – insbesondere im terstützen. Dabei sollen die Komponenten als Standard- Umfeld von Geschäftsanwendungen – ergeben. JAR-Dateien verwendet werden können. Die Komponen- tisierung von fachlichen Frontend-Komponenten ist bei- spielsweise auf Basis von Maven oder OSGi [WicketOsgi] Einleitung möglich. Auch eine Anbindung an JSR-286 Portal oder den Widget-Container Shindig ist verfügbar. Die Integration Java-Webframeworks gibt es mittlerweile viele. Dabei etab- folgt dabei dem Ziel der Einfachheit. Die wiederverwend- E liert sich Apache Wicket zunehmend als Alternative zu den baren Komponenten werden über Komposition oder Verer- Platzhirschen wie JSP, JSF, Struts oder Spring MVC. Die Vorteile bung in Java genutzt. liegen auf der Hand: Mit Wicket lassen sich in Java ansprechende, H Non-intrusive: Das Ziel hier ist, Layout und Logik nicht mit- leistungsfähige Benutzungsoberflächen umsetzen, die sich gut in einander zu vermischen. Das Layout soll so wenig wie mög- die Unternehmensarchitektur integrieren. Ereignisbehandlung, lich spezifische Tags enthalten. So ist es möglich, das Layout testgetriebene Entwicklung, Komponentenorientierung­ und durch Webdesigner erstellen zu lassen oder durch Tools bzw. Kapselung von technischen sowie fachlichen Aspekten – all dies Layoutmanager zu generieren. Die Logik soll im Java-Code kann der Entwickler mit Java-Bordmitteln umsetzen. gekapselt sein. So ist die Webanwendung besser zu warten Das schlanke Webframework Wicket basiert auf einem ein- und es können die gängigen Softwareentwicklungsmetho- fachen LifeCycle-Management und der Manipulation von den verwendet werden: Test Driven Development, Refacto- HTML im Java-Code. Der Entwickler programmiert seine ring und Debugging. Oberfläche ähnlich wie bei einer Rich-Client-Technologie H Safe: Wicket unterstützt das Entwickeln von sicheren Web- (, VB, Delphi). Dabei werden UI-Controls zu einer anwendungen. Dazu gehört neben der Typsicherheit in der Oberfläche orchestriert und EventHandler für deren Interak- Implementierung (Java) auch die Beschränkung des direkten tion definiert. Zugriffes auf die Wicket-Seiten. So können nur extra gekenn- Auf der Basis einer umfangreichen Sammlung an Controls zeichnete Seiten (sogenannte BookmarkablePages) direkt und Frameworks im Apache-Wicket-Umfang sowie der vielen über URL angesprochen werden. Auch beim Aspekt Security verfügbaren Erweiterungen (Wicket-Stuff-Projekte, bei Google- steht wieder das Ziel der Einfachheit im Fokus. Eine sehr ein- Code gehostete Erweiterungen usw.) lassen sich so ohne große fache Schnittstelle für die Autorisierung ermöglicht die In- Kenntnisse in CSS und JavaScript moderne, Ajax-basierte Web tegration in Standard-Security-Frameworks wie JAAS oder 2.0-Anwendungen entwickeln. Dabei behält der Entwickler Acegi bzw. die Adaption in individuelle Autorisierungslö- volle Kontrolle über seinen erstellten Code. Es kann auf Quell- sungen. Auch hier existiert eine Reihe von verfügbaren Im- code-Ebene debugged, getestet und refaktorisiert werden. Auf- plementierungen, die direkt nutzbar sind bzw. als Basis für bauend auf die vielen fertigen Controls und APIs lassen sich individuelle Lösungen dienen. einfach individuelle Erweiterungen erstellen, um technische H Efficient/Scalable: Skalierbarkeit und Performance sollen bei Aspekte vom Fachentwickler zu kapseln. Dafür werden keine allen Designentscheidungen berücksichtigt, aber nicht auf Taglibs oder ähnliche Konzepte verwendet. Die Erweiterungen Kosten der anderen Ziele überproportional gewichtet wer- werden viel mehr im bekannten Java-Umfeld implementiert. den. Interessant beim Aspekt Performance ist die mögliche Auch die Entwicklung von Widgets mit klar definierter Nutzung von Standard-Entwicklungstools. Es ist ohne Wei- Java-Schnittstelle wird vom Framework gut unterstützt. Dies teres möglich, aussagekräftige Lasttests zu implementieren ermöglicht eine komponentenorientierte Entwicklung der Prä- bzw. Profiler für die Analyse von Performance- oder Spei- sentationsschicht. UI-Blackbox-Komponenten werden erstellt, cherproblemen zu nutzen. Allgemein können Wicket-Appli- beschrieben und können von anderen Entwicklern in die eige- kationen sehr performant und mit wenig Speicherverbrauch ne Oberfläche integriert werden. implementiert werden. Komponentenbasierte Frameworks sind aufgrund des am Server vorgehaltenen Komponenten- modells speicherintensiver als klassische actionbasierte Al- Wicket – behind the scenes ternativen. Im Vergleich zu JSF schneidet Wicket in Bench- marks deutlich besser ab [WicketPerformance]. Bevor wir auf die Vorteile der Programmierung von modernen, H Complete: ”The Wicket team is committed to deliver a feature Web 2.0-basierten Geschäftsanwendungen auf Basis von Wi- complete, ready-to-use framework for developing Java web www.javaspektrum.de 33 Fachthema 

applications.“ Ein gutes Beispiel hierfür ist jtrac [JTrac], eine Wicket – Vorteile für Geschäftsanwendungen Java-Version des bekannten Projektmanagementwerkzeu- ges Trac [Trac]. jtrac wurde von JSP auf Wicket umgestellt. Wicket eignet sich sehr gut für die Entwicklung von Web Von den zwölf verschiedenen Frameworks, angefangen mit 2.0-basierten Geschäftsanwendungen. Neben der intuitiven, Ajax über Taglibs, Security bis hin zur Page-Inheritance, ist einfach zu bedienenden Oberfläche hat eine Geschäftsanwen- nach der Umstellung nur Wicket übrig geblieben. Dem Fach- dung weitere zentrale Anforderungen: entwickler stellt sich Wicket als homogenes „ready-to-use“- H komponentenorientierte Entwicklung, um parallele Ent- Framework dar. wicklung und Wartbarkeit zu unterstützen, H gute Testbarkeit der entwickelten Komponenten, um eine Wicket-Programmierung hohe Testabdeckung durch automatisierte Unit-Tests zu er- Wie wird Wicket den hoch gesteckten Zielen gerecht? Wicket möglichen, wurde nach dem Grundsatz „just java, just html and meaning- H Erstellung eigener Abstraktionen, um Wiederverwendung ful abstractions“ entwickelt. Die klare Trennung zwischen Lay- von technischem und fachlichem Code zu erreichen sowie out und Logik, ergänzt um einfach anzuwendende transpa- eine einheitliche Darstellung und Funktionsweise der Ge- rente Abstraktionen, ermöglicht es dem Fachentwickler, sich samtanwendung zu forcieren, auf seine Kernaufgabe zu konzentrieren. Er kann die optima- H Unterstützung der projektindividuellen Muster zur Erstel- le Umsetzung der Kundenanforderungen gewährleisten. Pro- lung von Frontends, der Integration anderer Frontends und jektindividuelle Querschnittsaufgaben kann der Architekt bzw. deren Integration in die Gesamtarchitektur. Framework-Entwickler gut in Java kapseln. Auf diese Ansprüche hat Apache Wicket die passenden Ant- Doch wie läuft dabei eine Wicket-Anfrage ab? Ruft der Nut- worten, die wir nachfolgend darstellen. zer eine von Wicket verwaltete URL auf, wird der Request vom WicketServletFilter behandelt. Zunächst löst Wicket die URL Komponentenorientierte Entwicklung des Frontends auf und bestimmt die gesuchte Ressource. Wicket extrahiert die Wicket unterstützt die komponentenorientierte Entwicklung Request-Parameter und gibt diese nach erfolgreicher Typkon- von Webfrontends. Fachlich zusammenhängende Controls vertierung sowie Validierung an das zugehörige Modell. An- werden zu einer UI-Komponente zusammengefasst. Dabei schließend werden die EventListener der Controls aufgerufen. können alle Ressourcen in Form eines Jar-Artefaktes gebün- Die EventHandler werden üblicherweise durch anonyme inne- delt werden. Neben dem Controller, der HTML und den Pro- re Klassen (analog zu Swing oder Eclipse-RCP) definiert. Die perties-Dateien für die Internationalisierung wird eine fach- EventHandler führen die notwendige Geschäftslogik aus und liche Schnittstelle definiert, die die von anderen Komponen- entscheiden, welche Seite bzw. welches Seitenfragment (Ajax) ten nutzbaren Funktionalitäten beschreibt. Diese fachlich ab- zum Client übertragen werden soll. Das zugehörige WebPage- geschlossenen Komponenten (Widgets) werden zu Seiten Objekt der Seite erzeugt für die enthaltenen Controls die Aus- oder höherwertigen Komponenten orchestriert. Dabei findet gabe. Dabei wird die zugehörige Layoutdefinition in der stati- die Kommunikation nur über die definierte öffentliche Java- schen HTML-Datei als Template genutzt und alle HTML-Tags Schnittstelle statt. mit einer Wicket-ID werden durch das generierte Markup des Die Vorteile einer komponentenorientierten Frontend-Ent- zugehörigen Wicket-Controls (dem Controller) ersetzt. wicklung sind: Man kann Wicket in diesem Bezug durchaus als Template- H Einfach entwickelbare und gut wartbare Komponenten, da Engine bezeichnen. Der Entwickler schreibt sein statisches überschaubare, fachlich abgeschlossene, voneinander ent- Layout (Template) auf der einen Seite und entwickelt die koppelte Einheiten entwickelt werden. Dynamik objektorientiert auf der anderen (s. Abb. 1). Wicket H Eine parallele, unabhängige Entwicklung gegen Mock-Im- übernimmt dabei die Zusammenführung beider Artefakte. plementierungen ist möglich. Dabei kann gegen die öffent- Alle Wicket-Controlklassen im Komponentenbaum generie- liche Schnittstelle der genutzten Komponenten gearbeitet ren die dynamischen Inhalte (HTML-Content), die Attribute werden. (HTML oder CSS Attribute) und die Interaktion (JavaScript). H Wiederverwendbarkeit der Komponenten. Dieser sehr zentrale Aspekt im Wicket-Framework ermöglicht Wiederverwendbarkeit wird dabei nicht als zentrales Argu- die Kapselung der komplexen Aspekte der Webentwicklung ment für die UI-Komponentisierung gesehen, sondern für die vom Fachanwender. Entkopplung und damit einhergehend bessere Wartbarkeit. Gerade Geschäftsanwendungen unterliegen in ihrem Lebens- zyklus vielen Anforderungen. In einem solchen dynamischen Umfeld kann Komponentisierung – ob Backend-Geschäfts- komponenten oder Frontend-Widgets – ihre Vorteile voll zur Geltung bringen.

Wicket-Testunterstützung Wicket ist eines der wenigen Webframeworks, das eine integ- rierte Unterstützung für Unit-Tests gewährleistet. Die größten Probleme mit existierenden Web-Unit-Test-Frameworks wie HttpUnit oder Selenium sind: H Initialaufwand für die Integration des Testframeworks in den Entwicklungsprozess. H Performance, . h. ein Unit-Test, der die Laufzeit einer Se- kunde übersteigt, führt zu langen Iterationen und wird zu Recht vom Entwickler nicht akzeptiert. Abb. 1: Komponenten in Wicket H Refactoring/Änderungen, denn bei Anpassungen am Lay- out bzw. an der Interaktionslogik ist es sehr mühsam, die

34 JavaSPEKTRUM 3/2010 Fachthema 

Unit-Tests nachzuziehen. Gerade in stressigen Projektphasen H Darstellung von Pflichtfeldern oder nicht validen Controls, führt diese zum Überspringen der Tests. H Integration von JavaScript-Bibliotheken für Effekte, Kontext- Ein in Wicket integriertes Testframework kann genutzt wer- menüs oder anderen Control-unspezifischen Features. den, um über Java-Unit-Tests die Browserinteraktion zu simu- Behaviors können zu fachlichem Code hinzugefügt oder in lieren. Hierbei wird der RequestCycle, der die Abarbeitung der technischen Erweiterungen von Basiscontrols zentral definiert Webrequests kapselt, durch eine testspezifische Implementie- werden. rung gemockt. Zunächst wird mittels der testspezifischen Be- Ein weiteres sehr mächtiges Konzept in Wicket ist die Kom- füllung des Modells oder mit den Eingabe simulierenden Ope- position von Komponenten, die Erstellung sogenannter Com- rationen die grafische Benutzungsoberfläche in den initialen poundComponents. Mehrere Elemente stellen sich dem Fach- Testzustand gebracht. Anschließend wird die zu testende Akti- entwickler als eine komplexe Komponente dar, welche mit on ausgeführt. Dafür stehen Anweisungen zum Submitten der Java-Mitteln integriert werden kann. Technische, aber auch Form, zum Ausführen von AjaxEvent oder zum Betätigen der fachliche Kompositionen von Controls können so zentral ent- Links zur Verfügung. Ein umfangreiches Potpourri von assert- wickelt und in vielen fachlichen Komponenten wiederverwen- Funktionen – von der Überprüfung des Model-Status einzel- det werden. Grundlage für Komposition sind Panels. Diese ner Controls bis hin zur Überprüfung der Anzahl von Warn- Container bieten eine fast identische Schnittstelle wie Websei- hinweisen oder konkreten Meldungen – ermöglicht das Verifi- ten, können aber individuell orchestriert und in vielen Websei- zieren des Testergebnisses. Natürlich sind über Mocks auch die ten oder Komponenten wiederverwendet werden. Aufrufe von Servicekomponenten auswertbar. Mögliche Anwendungsszenarien sind eine Sprachauswahl, Bereits ein einfacher Unit-Test, der die Seite bzw. die Kompo- ein Währungstextfeld einschließlich Anbindung an die eigenen nente rendert, führt zu einer deutlich effektiveren Webentwick- Datentypen oder ein Layoutmanager für die gitternetzbasier- lung. Einfache Fehler, wie der Mismatch zwischen Java- und te Gestaltung von Formularen ohne die Implementierung ei- HTML-Komponentenbaum oder fehlende Lokalisierungen, nes HTML-Layouts. CompoundComponents bilden auch die können direkt mit Ausführen des Unit-Tests erkannt werden. Grundlage für die erwähnte komponentenorientierte Entwick- Das Redeployment und die manuelle Navigation zur zu tes- lung der Webapplikationen. tenden Seite sowie deren Initialisierung mit entsprechenden Testdaten entfallen. Neben der in Wicket integrierten Lösung zum Testen der Webanwendung existieren eine Reihe weiterer Wicket-Herausforderungen Frameworks mit unterschiedlichen Schwerpunkten. Auf Basis von JDave [JDave] können an Behavior Driven De- Die Entwicklung von Geschäftsanwendungen auf Basis von velopment angelehnte Tests entwickelt werden. Die Erweite- Apache Wicket birgt viele Potenziale. Um diese optimal aus- rung Webdriver ist für konkrete Browsertests nutzbar, um zum schöpfen zu können, müssen sich die Entwickler mit dem Beispiel Browserinkompatibilitäten abzufangen. Des Weiteren Framework näher auseinandersetzen. Wicket bietet viele ein- gibt es auch Adapter für gängige Testframeworks wie Selenium. fache Schnittstellen, oft mit mehreren Lösungsalternativen für Die Erweiterung des Testframeworks, gerade für individuell er- ein Problem. Projektabhängig sollten diese Freiheitsgrade in in- stellte Abstraktionen, ist ebenfalls sinnvoll und einfach möglich. dividuellen Abstraktionen oder Mustern für die Fachentwick- ler sinnvoll eingegrenzt werden. Gerade in größeren Projek- Erstellung technischer und fachlicher Abstraktionen ten ist ein auf das Unternehmen (evtl. auch projektübergrei- Eigene Abstraktionen können in Wicket mit Standardmustern fendes) abgestimmtes Framework zu empfehlen. Wicket bietet in Java umgesetzt werden. Fachentwickler wollen sich nicht mit die Möglichkeit, schnell und mit wenig Aufwand Anwendun- der technischen Integration von Technologien beschäftigen. Sie gen zu entwickeln. Unsere Erfahrung zeigt, dass mit einem wollen klare Anwendungsmuster mit den notwendigen Frei- projekt- oder unternehmensspezifischem, auf Wicket aufbau- heitsgraden zur Verfügung gestellt bekommen, um optimal enden Framework effektiv sehr gut wartbare Web 2.0-Anwen- und effektiv die Anforderungen des Fachbereichs umzusetzen. dungen entwickelt werden können. In Wicket ist die Abstraktion von technischem Code mittels Oft wird die mangelnde Dokumentation von Wicket kriti- Vererbung, Control übergreifendem Verhalten und Kompo- siert. Dies kann mehr und mehr widerlegt werden. Viele Blogs, sition möglich. Durch Vererbung können bestehende Wicket- die hilfsbereite Community und auch einige verfügbare Bücher Standardkomponenten um eigene Konzepte erweitert werden. (aktuell gibt es zwei deutschsprachige Bücher auf dem Markt) Denkbar wären beispielsweise: ermöglichen hier einen guten Einstieg. Als Framework-Ent- H transparente Internationalisierung, wickler kommt man allerdings ab und zu am Lesen des Quell- H verbesserte Unterstützung der MVC-Programmierung durch codes nicht vorbei. die Erweiterung der Controls um aus Swing bekannte Event- Wicket ist kein Standard. Aktuell arbeiten achtzehn Ent- Listener, wickler an dem Wicket-Core-Framework. Dazu kommen die H Implementierung einer FocusPolicy, vielen meist Open-Source-Projekte, die Erweiterungen zur H Erweiterung der Tabelle um Selectionhandling, Renderer Verfügung stellen. Wie das Beispiel von Cocoon zeigt, können oder Kontextmenü auch bei Apache gehostete Webframeworks schnell eingestellt H und vieles mehr. werden. Doch Wicket wird zum Mainstream. In Deutschland Aber auch die Vererbung von Markup ist mit Wicket möglich. setzen bereits viele große Firmen verschiedener Branchen bei So kann zum Beispiel eine einheitliche Seitengestaltung forciert ihrer Webentwicklung auf Wicket. Das ist zwar keine Garantie werden. Analog zur Vererbung der Seiten wird auch der HT- für eine sichere Zukunft, doch diese hat man auch bei „Stan- ML-Code vererbt. Spezielle Wicket-Markup-Tags definieren da- dards“ nicht. Hinzu kommt, dass die genannten Entwickler bei die Position, wo „Sub-Markups“ integriert werden sollen. fast ausschließlich in ihrer Freizeit an Wicket arbeiten bzw. mit Neben der Vererbung unterstützt Wicket auch die Abstrak- Wicket-Beratung ihr Geld verdienen. So ist die Entwicklung tion von Control-unabhängigem Verhalten. Behaviors können von neuen Features nicht immer zeitnah möglich. Trotzdem Control-übergreifend implementiert werden. Beispiele für Be- stehen die meisten von ihnen in der Usergroup den Fragen haviors sind: der Community zur Verfügung. Oft finden sich in Diskussio-

36 JavaSPEKTRUM 3/2010  Fachthema

nen auch Interessenverbände, die in einem Wicketstuff-Projekt Links die individuellen Erweiterungen umsetzen. Wie die aktuelle Version 1.4 zeigt, werden aber weiterhin große, aufwendige [JDave] http://www.jdave.org/modules.html Anpassungen, wie die Erweiterung der Controls und Models [JTrac] http://www.jtrac.info/ um Generics zur typsicheren UI-Entwicklung, angegangen [Trac] http://trac.edgewall.org/ und umgesetzt. [Wicket] Apache Wicket – Introduction, http://wicket.apache.org/introduction.html [WicketOsgi] Antilia, http://code.google.com/p/antilia/ Fazit [WicketPerformance] Seam/JSF vs Wicket, http://ptrthomas.wordpress.com/2009/01/14/seam-jsf-vs-wicket- Wicket etabliert sich zunehmend als Framework zur Entwick- performance-comparison/ lung von Web 2.0-Geschäftsanwendungen. Dank der klaren, einfachen und transparenten Architektur sowie der strikten Trennung zwischen Layout und Logik ist es möglich, anspre- chende, komponentenorientierte, gut wart- und testbare Kom- Alexander Elsholz arbeitet als Senior IT-Architekt ponenten zu entwickeln. Zwar ist ein gewisser Initialaufwand bei der WidasConcepts GmbH, einer IT-Unterneh- für das Erlernen der Konzepte und die Einschränkung der Frei- mensberatung mit dem Fokus auf den IT-Architekturen heitsgrade notwendig, um das volle Potenzial des Frameworks und Anwendungsentwicklung. Zu seinen Schwerpunk- ten gehören die Entwicklung von serviceorientierten auszuschöpfen. Dafür lässt sich Wicket sehr gut um eigene Ab- JEE-Architekturen sowie die Konzeption und die straktionen erweitern, um den Fachentwickler ideal bei der Realisierung von Standardsoftware. Entwicklung seiner Anforderungen zu unterstützen. Er kann E-Mai: [email protected]. sich aus dem Baukasten von Wicket-Standard- und individuel- len Komponenten bedienen und diese auf Basis von bewährten Elena Stoll ist Diplommathematikerin und arbeitet als Anwendungsentwicklerin bei der WidasConcepts UI-Mustern zu fachlichen Anwendungen orchestrieren. Fin- GmbH. Sie beschäftigt sich in erster Linie mit der Kon- det man das richtige Maß an Abstraktion, kann sich der An- zeption und Entwicklung von modernen Weboberflä- wendungsentwickler voll auf seine Hauptaufgabe konzentrie- chen mit Ajax sowie dem Design und der Umsetzung ren, auf die optimale Umsetzung der fachlichen Anforderun- von web-basierten Java-EE-Anwendungen. gen. Die Auseinandersetzung mit verschiedensten Technologi- E-Mail: [email protected]. en, Frameworks und deren Inkompatibilitäten bleibt ihm somit erspart. Kurzgefasst: die Entwicklung von Webanwendungen mit Apache Wicket macht einfach Spaß.

JavaSPEKTRUM 3/2010