SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Downloaden Sie, um offline zu lesen
www.javaspektrum.de 33
 Fachthema
Geschäftstüchtig
Webarchitekturen
mit Apache Wicket
Alexander Elsholz, Elena Stoll
Apache Wicket wird zum Mainstream – und immer mehr Firmen sprin-
gen auf den Zug auf. Die Gründe hierfür sind offensichtlich: Statusbe-
haftete, komponentenorientierte und ereignisgesteuerte Webprogram-
mierung ist mit erprobten UI-Mustern in Java möglich und setzt kein
Expertenwissen in HTML, CSS oder JavaScript voraus. Der Artikel zeigt
aus der Praxis, wie testgetriebene Entwicklung von modernen Web­
oberflächen mit Wicket möglich ist. Dabei gehen wir auf die Wicket-
Kernprinzipien ein und stellen Chancen und Herausforderungen dar, die
sich bei der Entwicklung mit dem Webframework – insbesondere im
Umfeld von Geschäftsanwendungen – ergeben.
Einleitung
E
Java-Webframeworks gibt es mittlerweile viele. Dabei etab-
liert sich Apache Wicket zunehmend als Alternative zu den
Platzhirschen wie JSP, JSF, Struts oder Spring MVC. Die Vorteile
liegen auf der Hand: Mit Wicket lassen sich in Java ansprechende,
leistungsfähige Benutzungsoberflächen umsetzen, die sich gut in
die Unternehmensarchitektur integrieren. Ereignisbehandlung,
testgetriebene Entwicklung, Komponenten­orientierung und
Kapselung von technischen sowie fachlichen Aspekten – all dies
kann der Entwickler mit Java-Bordmitteln umsetzen.
Das schlanke Webframework Wicket basiert auf einem ein-
fachen LifeCycle-Management und der Manipulation von
HTML im Java-Code. Der Entwickler programmiert seine
Oberfläche ähnlich wie bei einer Rich-Client-Technologie
(Swing, VB, Delphi). Dabei werden UI-Controls zu einer
Oberfläche orchestriert und EventHandler für deren Interak-
tion definiert.
Auf der Basis einer umfangreichen Sammlung an Controls
und Frameworks im Apache-Wicket-Umfang sowie der vielen
verfügbaren Erweiterungen (Wicket-Stuff-Projekte, bei Google-
Code gehostete Erweiterungen usw.) lassen sich so ohne große
Kenntnisse in CSS und JavaScript moderne, Ajax-basierte Web
2.0-Anwendungen entwickeln. Dabei behält der Entwickler
volle Kontrolle über seinen erstellten Code. Es kann auf Quell-
code-Ebene debugged, getestet und refaktorisiert werden. Auf-
bauend auf die vielen fertigen Controls und APIs lassen sich
einfach individuelle Erweiterungen erstellen, um technische
Aspekte vom Fachentwickler zu kapseln. Dafür werden keine
Taglibs oder ähnliche Konzepte verwendet. Die Erweiterungen
werden viel mehr im bekannten Java-Umfeld implementiert.
Auch die Entwicklung von Widgets mit klar definierter
Java-Schnittstelle wird vom Framework gut unterstützt. Dies
ermöglicht eine komponentenorientierte Entwicklung der Prä-
sentationsschicht. UI-Blackbox-Komponenten werden erstellt,
beschrieben und können von anderen Entwicklern in die eige-
ne Oberfläche integriert werden.
Wicket – behind the scenes
Bevor wir auf die Vorteile der Programmierung von modernen,
Web 2.0-basierten Geschäftsanwendungen auf Basis von Wi-
cket eingehen, werden im Folgenden die Ziele des Webframe-
works und seine grundsätzliche Funktionsweise dargestellt.
Wicket-Ziele
Nachstehende Ziele liegen der Entwicklung des Webframe-
works zugrunde [Wicket]:
H	Easy: Das Framework soll einfach, klar und konsistent sein.
Der Entwickler muss nach dem Verständnis der Konzepte in
der Lage sein, die Aktionen des Webframeworks nachvoll-
ziehen zu können. Dank dieser Transparenz ist es vergleichs-
weise einfach, das Framework um eigene Abstraktionen
zu ergänzen. So können beispielsweise unterschiedlichste
JavaScript- oder CSS-Frameworks sehr einfach integriert
werden. Auch Wickets Lifecycle ist gut anpassbar. Dies wird
zum Beispiel durch das integrierte Testframework deutlich,
welches den Standard-Lifecycle ersetzt. Demnach ist die
Webapplikation gut in die eigene IT-Architektur integrierbar.
H	Reusable: Das Framework soll die Wiederverwendung un-
terstützen. Dabei sollen die Komponenten als Standard-
JAR-Dateien verwendet werden können. Die Komponen-
tisierung von fachlichen Frontend-Komponenten ist bei-
spielsweise auf Basis von Maven oder OSGi [WicketOsgi]
möglich. Auch eine Anbindung an JSR-286 Portal oder den
Widget-Container Shindig ist verfügbar. Die Integration
folgt dabei dem Ziel der Einfachheit. Die wiederverwend-
baren Komponenten werden über Komposition oder Verer-
bung in Java genutzt.
H	Non-intrusive: Das Ziel hier ist, Layout und Logik nicht mit-
einander zu vermischen. Das Layout soll so wenig wie mög-
lich spezifische Tags enthalten. So ist es möglich, das Layout
durch Webdesigner erstellen zu lassen oder durch Tools bzw.
Layoutmanager zu generieren. Die Logik soll im Java-Code
gekapselt sein. So ist die Webanwendung besser zu warten
und es können die gängigen Softwareentwicklungsmetho-
den verwendet werden: Test Driven Development, Refacto-
ring und Debugging.
H	Safe: Wicket unterstützt das Entwickeln von sicheren Web-
anwendungen. Dazu gehört neben der Typsicherheit in der
Implementierung (Java) auch die Beschränkung des direkten
Zugriffes auf die Wicket-Seiten. So können nur extra gekenn-
zeichnete Seiten (sogenannte BookmarkablePages) direkt
über URL angesprochen werden. Auch beim Aspekt Security
steht wieder das Ziel der Einfachheit im Fokus. Eine sehr ein-
fache Schnittstelle für die Autorisierung ermöglicht die In-
tegration in Standard-Security-Frameworks wie JAAS oder
Acegi bzw. die Adaption in individuelle Autorisierungslö-
sungen. Auch hier existiert eine Reihe von verfügbaren Im-
plementierungen, die direkt nutzbar sind bzw. als Basis für
individuelle Lösungen dienen.
H	Efficient/Scalable: Skalierbarkeit und Performance sollen bei
allen Designentscheidungen berücksichtigt, aber nicht auf
Kosten der anderen Ziele überproportional gewichtet wer-
den. Interessant beim Aspekt Performance ist die mögliche
Nutzung von Standard-Entwicklungstools. Es ist ohne Wei-
teres möglich, aussagekräftige Lasttests zu implementieren
bzw. Profiler für die Analyse von Performance- oder Spei-
cherproblemen zu nutzen. Allgemein können Wicket-Appli-
kationen sehr performant und mit wenig Speicherverbrauch
implementiert werden. Komponentenbasierte Frameworks
sind aufgrund des am Server vorgehaltenen Komponenten-
modells speicherintensiver als klassische actionbasierte Al-
ternativen. Im Vergleich zu JSF schneidet Wicket in Bench-
marks deutlich besser ab [WicketPerformance].
H	Complete: ”The Wicket team is committed to deliver a feature
complete, ready-to-use framework for developing Java web
JavaSPEKTRUM 3/201034
Fachthema
applications.“ Ein gutes Beispiel hierfür ist jtrac [JTrac], eine
Java-Version des bekannten Projektmanagementwerkzeu-
ges Trac [Trac]. jtrac wurde von JSP auf Wicket umgestellt.
Von den zwölf verschiedenen Frameworks, angefangen mit
Ajax über Taglibs, Security bis hin zur Page-Inheritance, ist
nach der Umstellung nur Wicket übrig geblieben. Dem Fach-
entwickler stellt sich Wicket als homogenes „ready-to-use“-
Framework dar.
Wicket-Programmierung
Wie wird Wicket den hoch gesteckten Zielen gerecht? Wicket
wurde nach dem Grundsatz „just java, just html and meaning-
ful abstractions“ entwickelt. Die klare Trennung zwischen Lay-
out und Logik, ergänzt um einfach anzuwendende transpa-
rente Abstraktionen, ermöglicht es dem Fachentwickler, sich
auf seine Kernaufgabe zu konzentrieren. Er kann die optima-
le Umsetzung der Kundenanforderungen gewährleisten. Pro-
jektindividuelle Querschnittsaufgaben kann der Architekt bzw.
Framework-Entwickler gut in Java kapseln.
Doch wie läuft dabei eine Wicket-Anfrage ab? Ruft der Nut-
zer eine von Wicket verwaltete URL auf, wird der Request vom
WicketServletFilter behandelt. Zunächst löst Wicket die URL
auf und bestimmt die gesuchte Ressource. Wicket extrahiert die
Request-Parameter und gibt diese nach erfolgreicher Typkon-
vertierung sowie Validierung an das zugehörige Modell. An-
schließend werden die EventListener der Controls aufgerufen.
Die EventHandler werden üblicherweise durch anonyme inne-
re Klassen (analog zu Swing oder Eclipse-RCP) definiert. Die
EventHandler führen die notwendige Geschäftslogik aus und
entscheiden, welche Seite bzw. welches Seitenfragment (Ajax)
zum Client übertragen werden soll. Das zugehörige WebPage-
Objekt der Seite erzeugt für die enthaltenen Controls die Aus-
gabe. Dabei wird die zugehörige Layoutdefinition in der stati-
schen HTML-Datei als Template genutzt und alle HTML-Tags
mit einer Wicket-ID werden durch das generierte Markup des
zugehörigen Wicket-Controls (dem Controller) ersetzt.
Man kann Wicket in diesem Bezug durchaus als Template-
Engine bezeichnen. Der Entwickler schreibt sein statisches
Layout (Template) auf der einen Seite und entwickelt die
Dynamik objektorientiert auf der anderen (s. Abb. 1). Wicket
übernimmt dabei die Zusammenführung beider Artefakte.
Alle Wicket-Controlklassen im Komponentenbaum generie-
ren die dynamischen Inhalte (HTML-Content), die Attribute
(HTML oder CSS Attribute) und die Interaktion (JavaScript).
Dieser sehr zentrale Aspekt im Wicket-Framework ermöglicht
die Kapselung der komplexen Aspekte der Webentwicklung
vom Fachanwender.
Wicket – Vorteile für Geschäftsanwendungen
Wicket eignet sich sehr gut für die Entwicklung von Web
2.0-basierten Geschäftsanwendungen. Neben der intuitiven,
einfach zu bedienenden Oberfläche hat eine Geschäftsanwen-
dung weitere zentrale Anforderungen:
H	komponentenorientierte Entwicklung, um parallele Ent-
wicklung und Wartbarkeit zu unterstützen,
H	gute Testbarkeit der entwickelten Komponenten, um eine
hohe Testabdeckung durch automatisierte Unit-Tests zu er-
möglichen,
H	Erstellung eigener Abstraktionen, um Wiederverwendung
von technischem und fachlichem Code zu erreichen sowie
eine einheitliche Darstellung und Funktionsweise der Ge-
samtanwendung zu forcieren,
H	Unterstützung der projektindividuellen Muster zur Erstel-
lung von Frontends, der Integration anderer Frontends und
deren Integration in die Gesamtarchitektur.
Auf diese Ansprüche hat Apache Wicket die passenden Ant-
worten, die wir nachfolgend darstellen.
Komponentenorientierte Entwicklung des Frontends
Wicket unterstützt die komponentenorientierte Entwicklung
von Webfrontends. Fachlich zusammenhängende Controls
werden zu einer UI-Komponente zusammengefasst. Dabei
können alle Ressourcen in Form eines Jar-Artefaktes gebün-
delt werden. Neben dem Controller, der HTML und den Pro-
perties-Dateien für die Internationalisierung wird eine fach-
liche Schnittstelle definiert, die die von anderen Komponen-
ten nutzbaren Funktionalitäten beschreibt. Diese fachlich ab-
geschlossenen Komponenten (Widgets) werden zu Seiten
oder höherwertigen Komponenten orchestriert. Dabei findet
die Kommunikation nur über die definierte öffentliche Java-
Schnittstelle statt.
Die Vorteile einer komponentenorientierten Frontend-Ent-
wicklung sind:
H	Einfach entwickelbare und gut wartbare Komponenten, da
überschaubare, fachlich abgeschlossene, voneinander ent-
koppelte Einheiten entwickelt werden.
H	Eine parallele, unabhängige Entwicklung gegen Mock-Im-
plementierungen ist möglich. Dabei kann gegen die öffent-
liche Schnittstelle der genutzten Komponenten gearbeitet
werden.
H	Wiederverwendbarkeit der Komponenten.
Wiederverwendbarkeit wird dabei nicht als zentrales Argu-
ment für die UI-Komponentisierung gesehen, sondern für die
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, d. h. ein Unit-Test, der die Laufzeit einer Se-
kunde übersteigt, führt zu langen Iterationen und wird zu
Recht vom Entwickler nicht akzeptiert.
H	Refactoring/Änderungen, denn bei Anpassungen am Lay-
out bzw. an der Interaktionslogik ist es sehr mühsam, die
Abb. 1: Komponenten in Wicket
JavaSPEKTRUM 3/201036
Fachthema
Unit-Tests nachzuziehen. Gerade in stressigen Projektphasen
führt diese zum Überspringen der Tests.
Ein in Wicket integriertes Testframework kann genutzt wer-
den, um über Java-Unit-Tests die Browserinteraktion zu simu-
lieren. Hierbei wird der RequestCycle, der die Abarbeitung der
Webrequests kapselt, durch eine testspezifische Implementie-
rung gemockt. Zunächst wird mittels der testspezifischen Be-
füllung des Modells oder mit den Eingabe simulierenden Ope-
rationen die grafische Benutzungsoberfläche in den initialen
Testzustand gebracht. Anschließend wird die zu testende Akti-
on ausgeführt. Dafür stehen Anweisungen zum Submitten der
Form, zum Ausführen von AjaxEvent oder zum Betätigen der
Links zur Verfügung. Ein umfangreiches Potpourri von assert-
Funktionen – von der Überprüfung des Model-Status einzel-
ner Controls bis hin zur Überprüfung der Anzahl von Warn-
hinweisen oder konkreten Meldungen – ermöglicht das Verifi-
zieren des Testergebnisses. Natürlich sind über Mocks auch die
Aufrufe von Servicekomponenten auswertbar.
Bereits ein einfacher Unit-Test, der die Seite bzw. die Kompo-
nente rendert, führt zu einer deutlich effektiveren Webentwick-
lung. Einfache Fehler, wie der Mismatch zwischen Java- und
HTML-Komponentenbaum oder fehlende Lokalisierungen,
können direkt mit Ausführen des Unit-Tests erkannt werden.
Das Redeployment und die manuelle Navigation zur zu tes-
tenden Seite sowie deren Initialisierung mit entsprechenden
Testdaten entfallen. Neben der in Wicket integrierten Lösung
zum Testen der Webanwendung existieren eine Reihe weiterer
Frameworks mit unterschiedlichen Schwerpunkten.
Auf Basis von JDave [JDave] können an Behavior Driven De-
velopment angelehnte Tests entwickelt werden. Die Erweite-
rung Webdriver ist für konkrete Browsertests nutzbar, um zum
Beispiel Browserinkompatibilitäten abzufangen. Des Weiteren
gibt es auch Adapter für gängige Testframeworks wie Selenium.
Die Erweiterung des Testframeworks, gerade für individuell er-
stellte Abstraktionen, ist ebenfalls sinnvoll und einfach möglich.
Erstellung technischer und fachlicher Abstraktionen
Eigene Abstraktionen können in Wicket mit Standardmustern
in Java umgesetzt werden. Fachentwickler wollen sich nicht mit
der technischen Integration von Technologien beschäftigen. Sie
wollen klare Anwendungsmuster mit den notwendigen Frei-
heitsgraden zur Verfügung gestellt bekommen, um optimal
und effektiv die Anforderungen des Fachbereichs umzusetzen.
In Wicket ist die Abstraktion von technischem Code mittels
Vererbung, Control übergreifendem Verhalten und Kompo-
sition möglich. Durch Vererbung können bestehende Wicket-
Standardkomponenten um eigene Konzepte erweitert werden.
Denkbar wären beispielsweise:
H	transparente Internationalisierung,
H	verbesserte Unterstützung der MVC-Programmierung durch
die Erweiterung der Controls um aus Swing bekannte Event-
Listener,
H	Implementierung einer FocusPolicy,
H	Erweiterung der Tabelle um Selectionhandling, Renderer
oder Kontextmenü
H	und vieles mehr.
Aber auch die Vererbung von Markup ist mit Wicket möglich.
So kann zum Beispiel eine einheitliche Seitengestaltung forciert
werden. Analog zur Vererbung der Seiten wird auch der HT-
ML-Code vererbt. Spezielle Wicket-Markup-Tags definieren da-
bei die Position, wo „Sub-Markups“ integriert werden sollen.
Neben der Vererbung unterstützt Wicket auch die Abstrak-
tion von Control-unabhängigem Verhalten. Behaviors können
Control-übergreifend implementiert werden. Beispiele für Be-
haviors sind:
H	Darstellung von Pflichtfeldern oder nicht validen Controls,
H	Integration von JavaScript-Bibliotheken für Effekte, Kontext-
menüs oder anderen Control-unspezifischen Features.
Behaviors können zu fachlichem Code hinzugefügt oder in
technischen Erweiterungen von Basiscontrols zentral definiert
werden.
Ein weiteres sehr mächtiges Konzept in Wicket ist die Kom-
position von Komponenten, die Erstellung sogenannter Com-
poundComponents. Mehrere Elemente stellen sich dem Fach-
entwickler als eine komplexe Komponente dar, welche mit
Java-Mitteln integriert werden kann. Technische, aber auch
fachliche Kompositionen von Controls können so zentral ent-
wickelt und in vielen fachlichen Komponenten wiederverwen-
det werden. Grundlage für Komposition sind Panels. Diese
Container bieten eine fast identische Schnittstelle wie Websei-
ten, können aber individuell orchestriert und in vielen Websei-
ten oder Komponenten wiederverwendet werden.
Mögliche Anwendungsszenarien sind eine Sprachauswahl,
ein Währungstextfeld einschließlich Anbindung an die eigenen
Datentypen oder ein Layoutmanager für die gitternetzbasier-
te Gestaltung von Formularen ohne die Implementierung ei-
nes HTML-Layouts. CompoundComponents bilden auch die
Grundlage für die erwähnte komponentenorientierte Entwick-
lung der Webapplikationen.
Wicket-Herausforderungen
Die Entwicklung von Geschäftsanwendungen auf Basis von
Apache Wicket birgt viele Potenziale. Um diese optimal aus-
schöpfen zu können, müssen sich die Entwickler mit dem
Framework näher auseinandersetzen. Wicket bietet viele ein-
fache Schnittstellen, oft mit mehreren Lösungsalternativen für
ein Problem. Projektabhängig sollten diese Freiheitsgrade in in-
dividuellen Abstraktionen oder Mustern für die Fachentwick-
ler sinnvoll eingegrenzt werden. Gerade in größeren Projek-
ten ist ein auf das Unternehmen (evtl. auch projektübergrei-
fendes) abgestimmtes Framework zu empfehlen. Wicket bietet
die Möglichkeit, schnell und mit wenig Aufwand Anwendun-
gen zu entwickeln. Unsere Erfahrung zeigt, dass mit einem
projekt- oder unternehmensspezifischem, auf Wicket aufbau-
enden Framework effektiv sehr gut wartbare Web 2.0-Anwen-
dungen entwickelt werden können.
Oft wird die mangelnde Dokumentation von Wicket kriti-
siert. Dies kann mehr und mehr widerlegt werden. Viele Blogs,
die hilfsbereite Community und auch einige verfügbare Bücher
(aktuell gibt es zwei deutschsprachige Bücher auf dem Markt)
ermöglichen hier einen guten Einstieg. Als Framework-Ent-
wickler kommt man allerdings ab und zu am Lesen des Quell-
codes nicht vorbei.
Wicket ist kein Standard. Aktuell arbeiten achtzehn Ent-
wickler an dem Wicket-Core-Framework. Dazu kommen die
vielen meist Open-Source-Projekte, die Erweiterungen zur
Verfügung stellen. Wie das Beispiel von Cocoon zeigt, können
auch bei Apache gehostete Webframeworks schnell eingestellt
werden. Doch Wicket wird zum Mainstream. In Deutschland
setzen bereits viele große Firmen verschiedener Branchen bei
ihrer Webentwicklung auf Wicket. Das ist zwar keine Garantie
für eine sichere Zukunft, doch diese hat man auch bei „Stan-
dards“ nicht. Hinzu kommt, dass die genannten Entwickler
fast ausschließlich in ihrer Freizeit an Wicket arbeiten bzw. mit
Wicket-Beratung ihr Geld verdienen. So ist die Entwicklung
von neuen Features nicht immer zeitnah möglich. Trotzdem
stehen die meisten von ihnen in der Usergroup den Fragen
der Community zur Verfügung. Oft finden sich in Diskussio-
 Fachthema
nen auch Interessenverbände, die in einem Wicketstuff-Projekt
die individuellen Erweiterungen umsetzen. Wie die aktuelle
Version 1.4 zeigt, werden aber weiterhin große, aufwendige
Anpassungen, wie die Erweiterung der Controls und Models
um Generics zur typsicheren UI-Entwicklung, angegangen
und umgesetzt.
Fazit
Wicket etabliert sich zunehmend als Framework zur Entwick-
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-
ponenten zu entwickeln. Zwar ist ein gewisser Initialaufwand
für das Erlernen der Konzepte und die Einschränkung der Frei-
heitsgrade notwendig, um das volle Potenzial des Frameworks
auszuschöpfen. Dafür lässt sich Wicket sehr gut um eigene Ab-
straktionen erweitern, um den Fachentwickler ideal bei der
Entwicklung seiner Anforderungen zu unterstützen. Er kann
sich aus dem Baukasten von Wicket-Standard- und individuel-
len Komponenten bedienen und diese auf Basis von bewährten
UI-Mustern zu fachlichen Anwendungen orchestrieren. Fin-
det man das richtige Maß an Abstraktion, kann sich der An-
wendungsentwickler voll auf seine Hauptaufgabe konzentrie-
ren, auf die optimale Umsetzung der fachlichen Anforderun-
gen. Die Auseinandersetzung mit verschiedensten Technologi-
en, Frameworks und deren Inkompatibilitäten bleibt ihm somit
erspart. Kurzgefasst: die Entwicklung von Webanwendungen
mit Apache Wicket macht einfach Spaß.
Links
[JDave] http://www.jdave.org/modules.html
[JTrac] http://www.jtrac.info/
[Trac] http://trac.edgewall.org/
[Wicket] Apache Wicket – Introduction,
http://wicket.apache.org/introduction.html
[WicketOsgi] Antilia, http://code.google.com/p/antilia/
[WicketPerformance] Seam/JSF vs Wicket,
http://ptrthomas.wordpress.com/2009/01/14/seam-jsf-vs-wicket-
performance-comparison/
Alexander Elsholz arbeitet als Senior IT-Architekt
bei der WidasConcepts GmbH, einer IT-Unterneh-
mensberatung mit dem Fokus auf den IT-Architekturen
und Anwendungsentwicklung. Zu seinen Schwerpunk-
ten gehören die Entwicklung von serviceorientierten
JEE-Architekturen sowie die Konzeption und die
Realisierung von Standardsoftware.
E-Mai: alexander.elsholz@widas.de.
Elena Stoll ist Diplommathematikerin und arbeitet
als Anwendungsentwicklerin bei der WidasConcepts
GmbH. Sie beschäftigt sich in erster Linie mit der Kon-
zeption und Entwicklung von modernen Weboberflä-
chen mit Ajax sowie dem Design und der Umsetzung
von web-basierten Java-EE-Anwendungen.
E-Mail: elena.stoll@widas.de.

Weitere ähnliche Inhalte

Was ist angesagt?

Integrationsszenarien in modernen Anwendungslandschaften - OPITZ CONSULTING -...
Integrationsszenarien in modernen Anwendungslandschaften - OPITZ CONSULTING -...Integrationsszenarien in modernen Anwendungslandschaften - OPITZ CONSULTING -...
Integrationsszenarien in modernen Anwendungslandschaften - OPITZ CONSULTING -...OPITZ CONSULTING Deutschland
 
Thin, Rich und RIA Clients entwirrt -- und Faktoren, die Sie zum geeigneten C...
Thin, Rich und RIA Clients entwirrt -- und Faktoren, die Sie zum geeigneten C...Thin, Rich und RIA Clients entwirrt -- und Faktoren, die Sie zum geeigneten C...
Thin, Rich und RIA Clients entwirrt -- und Faktoren, die Sie zum geeigneten C...Nikolaos Kaintantzis
 
Microservices und das Entity Control Boundary Pattern
Microservices und das Entity Control Boundary PatternMicroservices und das Entity Control Boundary Pattern
Microservices und das Entity Control Boundary PatternBrockhaus Consulting GmbH
 
Modulare Enterprise Systeme - Eine Einführung
Modulare Enterprise Systeme - Eine EinführungModulare Enterprise Systeme - Eine Einführung
Modulare Enterprise Systeme - Eine EinführungAndreas Weidinger
 
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...Andreas Weidinger
 
UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage...
UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage...UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage...
UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage...Andreas Kunz
 
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSWebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSOliver Hader
 
Java EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemacht
Java EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemachtJava EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemacht
Java EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemachtgedoplan
 
Oracle-Lizenzierung bei Virtualisierung und in der Cloud
Oracle-Lizenzierung bei Virtualisierung und in der CloudOracle-Lizenzierung bei Virtualisierung und in der Cloud
Oracle-Lizenzierung bei Virtualisierung und in der CloudOPITZ CONSULTING Deutschland
 
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Oliver Hader
 
Rapid Application Development mit Openobject
Rapid Application Development mit OpenobjectRapid Application Development mit Openobject
Rapid Application Development mit Openobjectopenbig
 

Was ist angesagt? (18)

IceFaces In Randi2 Action
IceFaces In Randi2 ActionIceFaces In Randi2 Action
IceFaces In Randi2 Action
 
Integrationsszenarien in modernen Anwendungslandschaften - OPITZ CONSULTING -...
Integrationsszenarien in modernen Anwendungslandschaften - OPITZ CONSULTING -...Integrationsszenarien in modernen Anwendungslandschaften - OPITZ CONSULTING -...
Integrationsszenarien in modernen Anwendungslandschaften - OPITZ CONSULTING -...
 
Thin, Rich und RIA Clients entwirrt -- und Faktoren, die Sie zum geeigneten C...
Thin, Rich und RIA Clients entwirrt -- und Faktoren, die Sie zum geeigneten C...Thin, Rich und RIA Clients entwirrt -- und Faktoren, die Sie zum geeigneten C...
Thin, Rich und RIA Clients entwirrt -- und Faktoren, die Sie zum geeigneten C...
 
Moderne Java Web-Technologien
Moderne Java Web-TechnologienModerne Java Web-Technologien
Moderne Java Web-Technologien
 
Microservices und das Entity Control Boundary Pattern
Microservices und das Entity Control Boundary PatternMicroservices und das Entity Control Boundary Pattern
Microservices und das Entity Control Boundary Pattern
 
Modulare Enterprise Systeme - Eine Einführung
Modulare Enterprise Systeme - Eine EinführungModulare Enterprise Systeme - Eine Einführung
Modulare Enterprise Systeme - Eine Einführung
 
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...
Apps for the Enterprise - Ein einheitliches Modulsystem für verteilte Unterne...
 
2020 oracle lizenznews
2020 oracle lizenznews2020 oracle lizenznews
2020 oracle lizenznews
 
Modularisierung - was soll das?
Modularisierung - was soll das?Modularisierung - was soll das?
Modularisierung - was soll das?
 
Best Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in ContainernBest Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in Containern
 
UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage...
UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage...UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage...
UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage...
 
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSWebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
 
Java EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemacht
Java EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemachtJava EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemacht
Java EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemacht
 
Oracle-Lizenzierung bei Virtualisierung und in der Cloud
Oracle-Lizenzierung bei Virtualisierung und in der CloudOracle-Lizenzierung bei Virtualisierung und in der Cloud
Oracle-Lizenzierung bei Virtualisierung und in der Cloud
 
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
 
Web Components
Web ComponentsWeb Components
Web Components
 
Rapid Application Development mit Openobject
Rapid Application Development mit OpenobjectRapid Application Development mit Openobject
Rapid Application Development mit Openobject
 
"OC|Webcast: Grundlagen der Oracle Lizenzierung"
"OC|Webcast: Grundlagen der Oracle Lizenzierung""OC|Webcast: Grundlagen der Oracle Lizenzierung"
"OC|Webcast: Grundlagen der Oracle Lizenzierung"
 

Ähnlich wie Elsholz stoll js_03_10

Java Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit LiftJava Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit LiftJohannes Hohenbichler
 
Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadingedoplan
 
GWT Introduction
GWT IntroductionGWT Introduction
GWT Introductionpfleidi
 
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für HealthcareArtikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für HealthcarePeter Affolter
 
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...Lukas Eder
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerSteven Grzbielok
 
Enterprise UI
Enterprise UIEnterprise UI
Enterprise UIgedoplan
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollWolfgang Weigend
 
Beschleunigen Sie Ihre Web-Entwicklung mit AngularJS Framework
Beschleunigen Sie Ihre Web-Entwicklung mit AngularJS FrameworkBeschleunigen Sie Ihre Web-Entwicklung mit AngularJS Framework
Beschleunigen Sie Ihre Web-Entwicklung mit AngularJS FrameworkDieter Ziegler
 
Compliance und Governance in der DevOps-Acht
Compliance und Governance in der DevOps-AchtCompliance und Governance in der DevOps-Acht
Compliance und Governance in der DevOps-AchtBATbern
 
Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Jürg Stuker
 
MEAN SCS in der Cloud
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der CloudTorsten Fink
 

Ähnlich wie Elsholz stoll js_03_10 (20)

Java Magazin - Lift
Java Magazin - LiftJava Magazin - Lift
Java Magazin - Lift
 
Java Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit LiftJava Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit Lift
 
react-de.pdf
react-de.pdfreact-de.pdf
react-de.pdf
 
Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadin
 
GWT Introduction
GWT IntroductionGWT Introduction
GWT Introduction
 
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für HealthcareArtikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
 
OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021
 
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
 
GWT
GWTGWT
GWT
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
Enterprise UI
Enterprise UIEnterprise UI
Enterprise UI
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
 
Beschleunigen Sie Ihre Web-Entwicklung mit AngularJS Framework
Beschleunigen Sie Ihre Web-Entwicklung mit AngularJS FrameworkBeschleunigen Sie Ihre Web-Entwicklung mit AngularJS Framework
Beschleunigen Sie Ihre Web-Entwicklung mit AngularJS Framework
 
Compliance und Governance in der DevOps-Acht
Compliance und Governance in der DevOps-AchtCompliance und Governance in der DevOps-Acht
Compliance und Governance in der DevOps-Acht
 
Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Top 10 Internet Trends 2006
Top 10 Internet Trends 2006
 
Vagrant
VagrantVagrant
Vagrant
 
Workshop Vue js
Workshop Vue jsWorkshop Vue js
Workshop Vue js
 
MEAN SCS in der Cloud
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der Cloud
 
imatics FormEngine
imatics FormEngineimatics FormEngine
imatics FormEngine
 
Wicket Kurzübersicht
Wicket KurzübersichtWicket Kurzübersicht
Wicket Kurzübersicht
 

Mehr von Tomasz Waszczyk

Programowanie automatycznych strategii transakcyjnych czesc podstawowa
Programowanie automatycznych strategii transakcyjnych   czesc podstawowaProgramowanie automatycznych strategii transakcyjnych   czesc podstawowa
Programowanie automatycznych strategii transakcyjnych czesc podstawowaTomasz Waszczyk
 
trading_automatyczny-waszczyk-probka
trading_automatyczny-waszczyk-probkatrading_automatyczny-waszczyk-probka
trading_automatyczny-waszczyk-probkaTomasz Waszczyk
 
Jens valloe christiansen
Jens valloe christiansenJens valloe christiansen
Jens valloe christiansenTomasz Waszczyk
 
Wzory portfel-inwestycyjnyrynek-kapitalowy
Wzory portfel-inwestycyjnyrynek-kapitalowyWzory portfel-inwestycyjnyrynek-kapitalowy
Wzory portfel-inwestycyjnyrynek-kapitalowyTomasz Waszczyk
 
2012 11-03-boersenfuehrerschein-teil6-technische-analyse
2012 11-03-boersenfuehrerschein-teil6-technische-analyse2012 11-03-boersenfuehrerschein-teil6-technische-analyse
2012 11-03-boersenfuehrerschein-teil6-technische-analyseTomasz Waszczyk
 
Quant congressusa2011algotradinglast
Quant congressusa2011algotradinglastQuant congressusa2011algotradinglast
Quant congressusa2011algotradinglastTomasz Waszczyk
 
C plus plus_for_quantitative_finance
C plus plus_for_quantitative_financeC plus plus_for_quantitative_finance
C plus plus_for_quantitative_financeTomasz Waszczyk
 
Sdv 0405 design-pattern_thc_jps_skript
Sdv 0405 design-pattern_thc_jps_skriptSdv 0405 design-pattern_thc_jps_skript
Sdv 0405 design-pattern_thc_jps_skriptTomasz Waszczyk
 
In tech an-innovative_systematic_approach_to_financial_portfolio_management_v...
In tech an-innovative_systematic_approach_to_financial_portfolio_management_v...In tech an-innovative_systematic_approach_to_financial_portfolio_management_v...
In tech an-innovative_systematic_approach_to_financial_portfolio_management_v...Tomasz Waszczyk
 

Mehr von Tomasz Waszczyk (20)

Programowanie automatycznych strategii transakcyjnych czesc podstawowa
Programowanie automatycznych strategii transakcyjnych   czesc podstawowaProgramowanie automatycznych strategii transakcyjnych   czesc podstawowa
Programowanie automatycznych strategii transakcyjnych czesc podstawowa
 
trading_automatyczny-waszczyk-probka
trading_automatyczny-waszczyk-probkatrading_automatyczny-waszczyk-probka
trading_automatyczny-waszczyk-probka
 
Codeconventions 150003
Codeconventions 150003Codeconventions 150003
Codeconventions 150003
 
Repeat after me_8_14_13
Repeat after me_8_14_13Repeat after me_8_14_13
Repeat after me_8_14_13
 
Jens valloe christiansen
Jens valloe christiansenJens valloe christiansen
Jens valloe christiansen
 
Vidyasagar rocond09
Vidyasagar rocond09Vidyasagar rocond09
Vidyasagar rocond09
 
Wzory portfel-inwestycyjnyrynek-kapitalowy
Wzory portfel-inwestycyjnyrynek-kapitalowyWzory portfel-inwestycyjnyrynek-kapitalowy
Wzory portfel-inwestycyjnyrynek-kapitalowy
 
2012 11-03-boersenfuehrerschein-teil6-technische-analyse
2012 11-03-boersenfuehrerschein-teil6-technische-analyse2012 11-03-boersenfuehrerschein-teil6-technische-analyse
2012 11-03-boersenfuehrerschein-teil6-technische-analyse
 
Lm mme090913
Lm mme090913Lm mme090913
Lm mme090913
 
Quant congressusa2011algotradinglast
Quant congressusa2011algotradinglastQuant congressusa2011algotradinglast
Quant congressusa2011algotradinglast
 
1108.1170
1108.11701108.1170
1108.1170
 
Efficient projections
Efficient projectionsEfficient projections
Efficient projections
 
Hsieh etal spl
Hsieh etal splHsieh etal spl
Hsieh etal spl
 
Comparison
ComparisonComparison
Comparison
 
C plus plus_for_quantitative_finance
C plus plus_for_quantitative_financeC plus plus_for_quantitative_finance
C plus plus_for_quantitative_finance
 
4587 11094-1-pb
4587 11094-1-pb4587 11094-1-pb
4587 11094-1-pb
 
G
GG
G
 
Sdv 0405 design-pattern_thc_jps_skript
Sdv 0405 design-pattern_thc_jps_skriptSdv 0405 design-pattern_thc_jps_skript
Sdv 0405 design-pattern_thc_jps_skript
 
Efficient projections
Efficient projectionsEfficient projections
Efficient projections
 
In tech an-innovative_systematic_approach_to_financial_portfolio_management_v...
In tech an-innovative_systematic_approach_to_financial_portfolio_management_v...In tech an-innovative_systematic_approach_to_financial_portfolio_management_v...
In tech an-innovative_systematic_approach_to_financial_portfolio_management_v...
 

Elsholz stoll js_03_10

  • 1. www.javaspektrum.de 33  Fachthema Geschäftstüchtig Webarchitekturen mit Apache Wicket Alexander Elsholz, Elena Stoll Apache Wicket wird zum Mainstream – und immer mehr Firmen sprin- gen auf den Zug auf. Die Gründe hierfür sind offensichtlich: Statusbe- haftete, komponentenorientierte und ereignisgesteuerte Webprogram- mierung ist mit erprobten UI-Mustern in Java möglich und setzt kein Expertenwissen in HTML, CSS oder JavaScript voraus. Der Artikel zeigt aus der Praxis, wie testgetriebene Entwicklung von modernen Web­ oberflächen mit Wicket möglich ist. Dabei gehen wir auf die Wicket- Kernprinzipien ein und stellen Chancen und Herausforderungen dar, die sich bei der Entwicklung mit dem Webframework – insbesondere im Umfeld von Geschäftsanwendungen – ergeben. Einleitung E Java-Webframeworks gibt es mittlerweile viele. Dabei etab- liert sich Apache Wicket zunehmend als Alternative zu den Platzhirschen wie JSP, JSF, Struts oder Spring MVC. Die Vorteile liegen auf der Hand: Mit Wicket lassen sich in Java ansprechende, leistungsfähige Benutzungsoberflächen umsetzen, die sich gut in die Unternehmensarchitektur integrieren. Ereignisbehandlung, testgetriebene Entwicklung, Komponenten­orientierung und Kapselung von technischen sowie fachlichen Aspekten – all dies kann der Entwickler mit Java-Bordmitteln umsetzen. Das schlanke Webframework Wicket basiert auf einem ein- fachen LifeCycle-Management und der Manipulation von HTML im Java-Code. Der Entwickler programmiert seine Oberfläche ähnlich wie bei einer Rich-Client-Technologie (Swing, VB, Delphi). Dabei werden UI-Controls zu einer Oberfläche orchestriert und EventHandler für deren Interak- tion definiert. Auf der Basis einer umfangreichen Sammlung an Controls und Frameworks im Apache-Wicket-Umfang sowie der vielen verfügbaren Erweiterungen (Wicket-Stuff-Projekte, bei Google- Code gehostete Erweiterungen usw.) lassen sich so ohne große Kenntnisse in CSS und JavaScript moderne, Ajax-basierte Web 2.0-Anwendungen entwickeln. Dabei behält der Entwickler volle Kontrolle über seinen erstellten Code. Es kann auf Quell- code-Ebene debugged, getestet und refaktorisiert werden. Auf- bauend auf die vielen fertigen Controls und APIs lassen sich einfach individuelle Erweiterungen erstellen, um technische Aspekte vom Fachentwickler zu kapseln. Dafür werden keine Taglibs oder ähnliche Konzepte verwendet. Die Erweiterungen werden viel mehr im bekannten Java-Umfeld implementiert. Auch die Entwicklung von Widgets mit klar definierter Java-Schnittstelle wird vom Framework gut unterstützt. Dies ermöglicht eine komponentenorientierte Entwicklung der Prä- sentationsschicht. UI-Blackbox-Komponenten werden erstellt, beschrieben und können von anderen Entwicklern in die eige- ne Oberfläche integriert werden. Wicket – behind the scenes Bevor wir auf die Vorteile der Programmierung von modernen, Web 2.0-basierten Geschäftsanwendungen auf Basis von Wi- cket eingehen, werden im Folgenden die Ziele des Webframe- works und seine grundsätzliche Funktionsweise dargestellt. Wicket-Ziele Nachstehende Ziele liegen der Entwicklung des Webframe- works zugrunde [Wicket]: H Easy: Das Framework soll einfach, klar und konsistent sein. Der Entwickler muss nach dem Verständnis der Konzepte in der Lage sein, die Aktionen des Webframeworks nachvoll- ziehen zu können. Dank dieser Transparenz ist es vergleichs- weise einfach, das Framework um eigene Abstraktionen zu ergänzen. So können beispielsweise unterschiedlichste JavaScript- oder CSS-Frameworks sehr einfach integriert werden. Auch Wickets Lifecycle ist gut anpassbar. Dies wird zum Beispiel durch das integrierte Testframework deutlich, welches den Standard-Lifecycle ersetzt. Demnach ist die Webapplikation gut in die eigene IT-Architektur integrierbar. H Reusable: Das Framework soll die Wiederverwendung un- terstützen. Dabei sollen die Komponenten als Standard- JAR-Dateien verwendet werden können. Die Komponen- tisierung von fachlichen Frontend-Komponenten ist bei- spielsweise auf Basis von Maven oder OSGi [WicketOsgi] möglich. Auch eine Anbindung an JSR-286 Portal oder den Widget-Container Shindig ist verfügbar. Die Integration folgt dabei dem Ziel der Einfachheit. Die wiederverwend- baren Komponenten werden über Komposition oder Verer- bung in Java genutzt. H Non-intrusive: Das Ziel hier ist, Layout und Logik nicht mit- einander zu vermischen. Das Layout soll so wenig wie mög- lich spezifische Tags enthalten. So ist es möglich, das Layout durch Webdesigner erstellen zu lassen oder durch Tools bzw. Layoutmanager zu generieren. Die Logik soll im Java-Code gekapselt sein. So ist die Webanwendung besser zu warten und es können die gängigen Softwareentwicklungsmetho- den verwendet werden: Test Driven Development, Refacto- ring und Debugging. H Safe: Wicket unterstützt das Entwickeln von sicheren Web- anwendungen. Dazu gehört neben der Typsicherheit in der Implementierung (Java) auch die Beschränkung des direkten Zugriffes auf die Wicket-Seiten. So können nur extra gekenn- zeichnete Seiten (sogenannte BookmarkablePages) direkt über URL angesprochen werden. Auch beim Aspekt Security steht wieder das Ziel der Einfachheit im Fokus. Eine sehr ein- fache Schnittstelle für die Autorisierung ermöglicht die In- tegration in Standard-Security-Frameworks wie JAAS oder Acegi bzw. die Adaption in individuelle Autorisierungslö- sungen. Auch hier existiert eine Reihe von verfügbaren Im- plementierungen, die direkt nutzbar sind bzw. als Basis für individuelle Lösungen dienen. H Efficient/Scalable: Skalierbarkeit und Performance sollen bei allen Designentscheidungen berücksichtigt, aber nicht auf Kosten der anderen Ziele überproportional gewichtet wer- den. Interessant beim Aspekt Performance ist die mögliche Nutzung von Standard-Entwicklungstools. Es ist ohne Wei- teres möglich, aussagekräftige Lasttests zu implementieren bzw. Profiler für die Analyse von Performance- oder Spei- cherproblemen zu nutzen. Allgemein können Wicket-Appli- kationen sehr performant und mit wenig Speicherverbrauch implementiert werden. Komponentenbasierte Frameworks sind aufgrund des am Server vorgehaltenen Komponenten- modells speicherintensiver als klassische actionbasierte Al- ternativen. Im Vergleich zu JSF schneidet Wicket in Bench- marks deutlich besser ab [WicketPerformance]. H Complete: ”The Wicket team is committed to deliver a feature complete, ready-to-use framework for developing Java web
  • 2. JavaSPEKTRUM 3/201034 Fachthema applications.“ Ein gutes Beispiel hierfür ist jtrac [JTrac], eine Java-Version des bekannten Projektmanagementwerkzeu- ges Trac [Trac]. jtrac wurde von JSP auf Wicket umgestellt. Von den zwölf verschiedenen Frameworks, angefangen mit Ajax über Taglibs, Security bis hin zur Page-Inheritance, ist nach der Umstellung nur Wicket übrig geblieben. Dem Fach- entwickler stellt sich Wicket als homogenes „ready-to-use“- Framework dar. Wicket-Programmierung Wie wird Wicket den hoch gesteckten Zielen gerecht? Wicket wurde nach dem Grundsatz „just java, just html and meaning- ful abstractions“ entwickelt. Die klare Trennung zwischen Lay- out und Logik, ergänzt um einfach anzuwendende transpa- rente Abstraktionen, ermöglicht es dem Fachentwickler, sich auf seine Kernaufgabe zu konzentrieren. Er kann die optima- le Umsetzung der Kundenanforderungen gewährleisten. Pro- jektindividuelle Querschnittsaufgaben kann der Architekt bzw. Framework-Entwickler gut in Java kapseln. Doch wie läuft dabei eine Wicket-Anfrage ab? Ruft der Nut- zer eine von Wicket verwaltete URL auf, wird der Request vom WicketServletFilter behandelt. Zunächst löst Wicket die URL auf und bestimmt die gesuchte Ressource. Wicket extrahiert die Request-Parameter und gibt diese nach erfolgreicher Typkon- vertierung sowie Validierung an das zugehörige Modell. An- schließend werden die EventListener der Controls aufgerufen. Die EventHandler werden üblicherweise durch anonyme inne- re Klassen (analog zu Swing oder Eclipse-RCP) definiert. Die EventHandler führen die notwendige Geschäftslogik aus und entscheiden, welche Seite bzw. welches Seitenfragment (Ajax) zum Client übertragen werden soll. Das zugehörige WebPage- Objekt der Seite erzeugt für die enthaltenen Controls die Aus- gabe. Dabei wird die zugehörige Layoutdefinition in der stati- schen HTML-Datei als Template genutzt und alle HTML-Tags mit einer Wicket-ID werden durch das generierte Markup des zugehörigen Wicket-Controls (dem Controller) ersetzt. Man kann Wicket in diesem Bezug durchaus als Template- Engine bezeichnen. Der Entwickler schreibt sein statisches Layout (Template) auf der einen Seite und entwickelt die Dynamik objektorientiert auf der anderen (s. Abb. 1). Wicket übernimmt dabei die Zusammenführung beider Artefakte. Alle Wicket-Controlklassen im Komponentenbaum generie- ren die dynamischen Inhalte (HTML-Content), die Attribute (HTML oder CSS Attribute) und die Interaktion (JavaScript). Dieser sehr zentrale Aspekt im Wicket-Framework ermöglicht die Kapselung der komplexen Aspekte der Webentwicklung vom Fachanwender. Wicket – Vorteile für Geschäftsanwendungen Wicket eignet sich sehr gut für die Entwicklung von Web 2.0-basierten Geschäftsanwendungen. Neben der intuitiven, einfach zu bedienenden Oberfläche hat eine Geschäftsanwen- dung weitere zentrale Anforderungen: H komponentenorientierte Entwicklung, um parallele Ent- wicklung und Wartbarkeit zu unterstützen, H gute Testbarkeit der entwickelten Komponenten, um eine hohe Testabdeckung durch automatisierte Unit-Tests zu er- möglichen, H Erstellung eigener Abstraktionen, um Wiederverwendung von technischem und fachlichem Code zu erreichen sowie eine einheitliche Darstellung und Funktionsweise der Ge- samtanwendung zu forcieren, H Unterstützung der projektindividuellen Muster zur Erstel- lung von Frontends, der Integration anderer Frontends und deren Integration in die Gesamtarchitektur. Auf diese Ansprüche hat Apache Wicket die passenden Ant- worten, die wir nachfolgend darstellen. Komponentenorientierte Entwicklung des Frontends Wicket unterstützt die komponentenorientierte Entwicklung von Webfrontends. Fachlich zusammenhängende Controls werden zu einer UI-Komponente zusammengefasst. Dabei können alle Ressourcen in Form eines Jar-Artefaktes gebün- delt werden. Neben dem Controller, der HTML und den Pro- perties-Dateien für die Internationalisierung wird eine fach- liche Schnittstelle definiert, die die von anderen Komponen- ten nutzbaren Funktionalitäten beschreibt. Diese fachlich ab- geschlossenen Komponenten (Widgets) werden zu Seiten oder höherwertigen Komponenten orchestriert. Dabei findet die Kommunikation nur über die definierte öffentliche Java- Schnittstelle statt. Die Vorteile einer komponentenorientierten Frontend-Ent- wicklung sind: H Einfach entwickelbare und gut wartbare Komponenten, da überschaubare, fachlich abgeschlossene, voneinander ent- koppelte Einheiten entwickelt werden. H Eine parallele, unabhängige Entwicklung gegen Mock-Im- plementierungen ist möglich. Dabei kann gegen die öffent- liche Schnittstelle der genutzten Komponenten gearbeitet werden. H Wiederverwendbarkeit der Komponenten. Wiederverwendbarkeit wird dabei nicht als zentrales Argu- ment für die UI-Komponentisierung gesehen, sondern für die 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, d. h. ein Unit-Test, der die Laufzeit einer Se- kunde übersteigt, führt zu langen Iterationen und wird zu Recht vom Entwickler nicht akzeptiert. H Refactoring/Änderungen, denn bei Anpassungen am Lay- out bzw. an der Interaktionslogik ist es sehr mühsam, die Abb. 1: Komponenten in Wicket
  • 3. JavaSPEKTRUM 3/201036 Fachthema Unit-Tests nachzuziehen. Gerade in stressigen Projektphasen führt diese zum Überspringen der Tests. Ein in Wicket integriertes Testframework kann genutzt wer- den, um über Java-Unit-Tests die Browserinteraktion zu simu- lieren. Hierbei wird der RequestCycle, der die Abarbeitung der Webrequests kapselt, durch eine testspezifische Implementie- rung gemockt. Zunächst wird mittels der testspezifischen Be- füllung des Modells oder mit den Eingabe simulierenden Ope- rationen die grafische Benutzungsoberfläche in den initialen Testzustand gebracht. Anschließend wird die zu testende Akti- on ausgeführt. Dafür stehen Anweisungen zum Submitten der Form, zum Ausführen von AjaxEvent oder zum Betätigen der Links zur Verfügung. Ein umfangreiches Potpourri von assert- Funktionen – von der Überprüfung des Model-Status einzel- ner Controls bis hin zur Überprüfung der Anzahl von Warn- hinweisen oder konkreten Meldungen – ermöglicht das Verifi- zieren des Testergebnisses. Natürlich sind über Mocks auch die Aufrufe von Servicekomponenten auswertbar. Bereits ein einfacher Unit-Test, der die Seite bzw. die Kompo- nente rendert, führt zu einer deutlich effektiveren Webentwick- lung. Einfache Fehler, wie der Mismatch zwischen Java- und HTML-Komponentenbaum oder fehlende Lokalisierungen, können direkt mit Ausführen des Unit-Tests erkannt werden. Das Redeployment und die manuelle Navigation zur zu tes- tenden Seite sowie deren Initialisierung mit entsprechenden Testdaten entfallen. Neben der in Wicket integrierten Lösung zum Testen der Webanwendung existieren eine Reihe weiterer Frameworks mit unterschiedlichen Schwerpunkten. Auf Basis von JDave [JDave] können an Behavior Driven De- velopment angelehnte Tests entwickelt werden. Die Erweite- rung Webdriver ist für konkrete Browsertests nutzbar, um zum Beispiel Browserinkompatibilitäten abzufangen. Des Weiteren gibt es auch Adapter für gängige Testframeworks wie Selenium. Die Erweiterung des Testframeworks, gerade für individuell er- stellte Abstraktionen, ist ebenfalls sinnvoll und einfach möglich. Erstellung technischer und fachlicher Abstraktionen Eigene Abstraktionen können in Wicket mit Standardmustern in Java umgesetzt werden. Fachentwickler wollen sich nicht mit der technischen Integration von Technologien beschäftigen. Sie wollen klare Anwendungsmuster mit den notwendigen Frei- heitsgraden zur Verfügung gestellt bekommen, um optimal und effektiv die Anforderungen des Fachbereichs umzusetzen. In Wicket ist die Abstraktion von technischem Code mittels Vererbung, Control übergreifendem Verhalten und Kompo- sition möglich. Durch Vererbung können bestehende Wicket- Standardkomponenten um eigene Konzepte erweitert werden. Denkbar wären beispielsweise: H transparente Internationalisierung, H verbesserte Unterstützung der MVC-Programmierung durch die Erweiterung der Controls um aus Swing bekannte Event- Listener, H Implementierung einer FocusPolicy, H Erweiterung der Tabelle um Selectionhandling, Renderer oder Kontextmenü H und vieles mehr. Aber auch die Vererbung von Markup ist mit Wicket möglich. So kann zum Beispiel eine einheitliche Seitengestaltung forciert werden. Analog zur Vererbung der Seiten wird auch der HT- ML-Code vererbt. Spezielle Wicket-Markup-Tags definieren da- bei die Position, wo „Sub-Markups“ integriert werden sollen. Neben der Vererbung unterstützt Wicket auch die Abstrak- tion von Control-unabhängigem Verhalten. Behaviors können Control-übergreifend implementiert werden. Beispiele für Be- haviors sind: H Darstellung von Pflichtfeldern oder nicht validen Controls, H Integration von JavaScript-Bibliotheken für Effekte, Kontext- menüs oder anderen Control-unspezifischen Features. Behaviors können zu fachlichem Code hinzugefügt oder in technischen Erweiterungen von Basiscontrols zentral definiert werden. Ein weiteres sehr mächtiges Konzept in Wicket ist die Kom- position von Komponenten, die Erstellung sogenannter Com- poundComponents. Mehrere Elemente stellen sich dem Fach- entwickler als eine komplexe Komponente dar, welche mit Java-Mitteln integriert werden kann. Technische, aber auch fachliche Kompositionen von Controls können so zentral ent- wickelt und in vielen fachlichen Komponenten wiederverwen- det werden. Grundlage für Komposition sind Panels. Diese Container bieten eine fast identische Schnittstelle wie Websei- ten, können aber individuell orchestriert und in vielen Websei- ten oder Komponenten wiederverwendet werden. Mögliche Anwendungsszenarien sind eine Sprachauswahl, ein Währungstextfeld einschließlich Anbindung an die eigenen Datentypen oder ein Layoutmanager für die gitternetzbasier- te Gestaltung von Formularen ohne die Implementierung ei- nes HTML-Layouts. CompoundComponents bilden auch die Grundlage für die erwähnte komponentenorientierte Entwick- lung der Webapplikationen. Wicket-Herausforderungen Die Entwicklung von Geschäftsanwendungen auf Basis von Apache Wicket birgt viele Potenziale. Um diese optimal aus- schöpfen zu können, müssen sich die Entwickler mit dem Framework näher auseinandersetzen. Wicket bietet viele ein- fache Schnittstellen, oft mit mehreren Lösungsalternativen für ein Problem. Projektabhängig sollten diese Freiheitsgrade in in- dividuellen Abstraktionen oder Mustern für die Fachentwick- ler sinnvoll eingegrenzt werden. Gerade in größeren Projek- ten ist ein auf das Unternehmen (evtl. auch projektübergrei- fendes) abgestimmtes Framework zu empfehlen. Wicket bietet die Möglichkeit, schnell und mit wenig Aufwand Anwendun- gen zu entwickeln. Unsere Erfahrung zeigt, dass mit einem projekt- oder unternehmensspezifischem, auf Wicket aufbau- enden Framework effektiv sehr gut wartbare Web 2.0-Anwen- dungen entwickelt werden können. Oft wird die mangelnde Dokumentation von Wicket kriti- siert. Dies kann mehr und mehr widerlegt werden. Viele Blogs, die hilfsbereite Community und auch einige verfügbare Bücher (aktuell gibt es zwei deutschsprachige Bücher auf dem Markt) ermöglichen hier einen guten Einstieg. Als Framework-Ent- wickler kommt man allerdings ab und zu am Lesen des Quell- codes nicht vorbei. Wicket ist kein Standard. Aktuell arbeiten achtzehn Ent- wickler an dem Wicket-Core-Framework. Dazu kommen die vielen meist Open-Source-Projekte, die Erweiterungen zur Verfügung stellen. Wie das Beispiel von Cocoon zeigt, können auch bei Apache gehostete Webframeworks schnell eingestellt werden. Doch Wicket wird zum Mainstream. In Deutschland setzen bereits viele große Firmen verschiedener Branchen bei ihrer Webentwicklung auf Wicket. Das ist zwar keine Garantie für eine sichere Zukunft, doch diese hat man auch bei „Stan- dards“ nicht. Hinzu kommt, dass die genannten Entwickler fast ausschließlich in ihrer Freizeit an Wicket arbeiten bzw. mit Wicket-Beratung ihr Geld verdienen. So ist die Entwicklung von neuen Features nicht immer zeitnah möglich. Trotzdem stehen die meisten von ihnen in der Usergroup den Fragen der Community zur Verfügung. Oft finden sich in Diskussio-
  • 4.  Fachthema nen auch Interessenverbände, die in einem Wicketstuff-Projekt die individuellen Erweiterungen umsetzen. Wie die aktuelle Version 1.4 zeigt, werden aber weiterhin große, aufwendige Anpassungen, wie die Erweiterung der Controls und Models um Generics zur typsicheren UI-Entwicklung, angegangen und umgesetzt. Fazit Wicket etabliert sich zunehmend als Framework zur Entwick- 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- ponenten zu entwickeln. Zwar ist ein gewisser Initialaufwand für das Erlernen der Konzepte und die Einschränkung der Frei- heitsgrade notwendig, um das volle Potenzial des Frameworks auszuschöpfen. Dafür lässt sich Wicket sehr gut um eigene Ab- straktionen erweitern, um den Fachentwickler ideal bei der Entwicklung seiner Anforderungen zu unterstützen. Er kann sich aus dem Baukasten von Wicket-Standard- und individuel- len Komponenten bedienen und diese auf Basis von bewährten UI-Mustern zu fachlichen Anwendungen orchestrieren. Fin- det man das richtige Maß an Abstraktion, kann sich der An- wendungsentwickler voll auf seine Hauptaufgabe konzentrie- ren, auf die optimale Umsetzung der fachlichen Anforderun- gen. Die Auseinandersetzung mit verschiedensten Technologi- en, Frameworks und deren Inkompatibilitäten bleibt ihm somit erspart. Kurzgefasst: die Entwicklung von Webanwendungen mit Apache Wicket macht einfach Spaß. Links [JDave] http://www.jdave.org/modules.html [JTrac] http://www.jtrac.info/ [Trac] http://trac.edgewall.org/ [Wicket] Apache Wicket – Introduction, http://wicket.apache.org/introduction.html [WicketOsgi] Antilia, http://code.google.com/p/antilia/ [WicketPerformance] Seam/JSF vs Wicket, http://ptrthomas.wordpress.com/2009/01/14/seam-jsf-vs-wicket- performance-comparison/ Alexander Elsholz arbeitet als Senior IT-Architekt bei der WidasConcepts GmbH, einer IT-Unterneh- mensberatung mit dem Fokus auf den IT-Architekturen und Anwendungsentwicklung. Zu seinen Schwerpunk- ten gehören die Entwicklung von serviceorientierten JEE-Architekturen sowie die Konzeption und die Realisierung von Standardsoftware. E-Mai: alexander.elsholz@widas.de. Elena Stoll ist Diplommathematikerin und arbeitet als Anwendungsentwicklerin bei der WidasConcepts GmbH. Sie beschäftigt sich in erster Linie mit der Kon- zeption und Entwicklung von modernen Weboberflä- chen mit Ajax sowie dem Design und der Umsetzung von web-basierten Java-EE-Anwendungen. E-Mail: elena.stoll@widas.de.