Vorwort: Über dieses Buch
Ein deutschsprachiges Vaadin-Buch, herausgegeben im Selbstverlag und vertrieben über eine Online-Plattform, bei der ein Buch schon während seiner Entstehung freigegeben werden kann. Wie kam es zu diesem Vorhaben?
Die Idee zu diesem Buch entstand, als ich als Seminarleiter mit meiner Vaadin Grundlagenschulung bei Kunden unterwegs war. Während man mit einem solchen Einsteigerseminar ein recht solides Grundverständnis für dieses spannende Framework schaffen kann, bleiben naturgemäß bei den Teilnehmern auch nach der Schulung noch Detailfragen offen, oder es stellen sich bestimmte Fragen überhaupt erst zu einem späteren Zeitpunkt. Manche Themen können aufgrund der begrenzten Zeit nur oberflächlich behandelt oder, wenn überhaupt, nur grob angerissen werden. Besonders wenn man sich dann als Neuling das erste Mal auf eigene Faust mit dem Framework die Hände schmutzig macht, ergeben sich die meisten Fragen und Verständnisschwierigkeiten. Der Trainer ist dann schon längst wieder zu Hause und steht bei den alltäglichen Problemen, auf die man als Entwickler mit einer neuen Technologie zwangsweise stoßen wird, nicht mehr zur Verfügung.
Wenn man dann den Teilnehmern zusätzlich ein übersichtliches Grundlagenbuch anbieten könnte — das wäre eine feine Sache und würde das Seminar zusätzlich abrunden. Die Idee, ein Buch zu schreiben und meine Kenntnisse und Erfahrungen mit Vaadin darin festzuhalten, wurde daher immer konkreter. Die Anfrage eines Fachbuchverlages, ob ich nicht Interesse daran hätte, ein Vaadin-Buch für Fortgeschrittene zu schreiben, gab mir schließlich den letzten Impuls.
Dem Verlag habe ich nach reiflicher Überlegung abgesagt. Meine Vollzeitstelle bei der OIO GmbH ließ es für mich realistischerweise einfach nicht zu, mit einer bestimmten vorgegebenen Abgabefrist ein Vaadin-Buch mit fortgeschrittenen Themen zu verfassen — und das Ganze auch noch auf Englisch und nicht in meiner Muttersprache. Das war mir dann doch etwas zu heikel, und ich lehnte das Angebot dankend ab.
Die Idee ließ mich jetzt allerdings nicht mehr los. Ich musste eine andere Möglichkeit finden, meine Vaadin-Kenntnisse nutzbringend niederzuschreiben, ohne dabei jedoch dem Druck eines festen Veröffentlichungstermins zu unterliegen.
Leanpub als Plattform für selbstverlegende Autoren kam mir da genau gelegen. Ich kann das Buch in meinem eigenen Tempo voranbringen und auch schon einen halbfertigen Stand veröffentlichen, sobald dieser meiner Leserschaft schon einen Mehrwert bietet. Aus diesem Grund ist das Buch bis zu seiner Fertigstellung ausschließlich unter https://leanpub.com/vaadinbuch zu beziehen.
Warum dieses Buch?
Ein deutschsprachiges Vaadin-Buch, veröffentlicht ohne Verlag im Rücken, rein elektronisch über eine Online-Plattform vertrieben? Und daneben eine große Konkurrenz auf dem Buchmarkt, nicht zuletzt in Form des offiziellen und kostenlosen Book of Vaadin von Vaadin Ltd., dem Hersteller des Frameworks. Wieso mache ich das?
Nun, der Hauptgrund ist schlicht: ich habe den Anspruch, es besser zu machen als die anderen Autoren. Zudem gibt es auf dem deutschsprachigen Buchmarkt noch keine Vaadin-Bücher, die über eine oberflächliche Einführung in das Framework hinaus gehen. Das will ich ändern.
Fast alle englischsprachigen Vaadin-Bücher, die es zurzeit (aktuell im Januar 2016) auf dem Markt gibt, wurden von Autoren geschrieben, die Englisch nicht als Muttersprache sprechen. Dementsprechend holprig lesen sich die jeweiligen Texte dann zum Teil auch (wohingegen die inhaltliche Qualität der Bücher meist hoch ist). Inhaltlich gehen die verfügbaren Bücher nicht allzu sehr in die Tiefe.
Ausgenommen davon ist das kostenlose Book of Vaadin, welches von Marko Grönroos, einem Mitarbeiter von Vaadin Ltd., geschrieben und gepflegt wird. Das Buch zeichnet sich durch eine recht detaillierte Beschreibung des Frameworks aus — was naheliegend ist, da das Buch ja direkt aus dem Hause des Herstellers von Vaadin stammt.
Dennoch gibt es auch für dieses Buch noch Verbesserungspotenzial. Obwohl das Buch recht umfangreich ist und ein sehr weites Themenspektrum abbildet, geht es auf viele Punkte nur relativ oberflächlich oder gar nicht ein (wie z. B. Ressourcen, Konverter oder JavaScript Components). Das ist natürlich auch der Tatsache geschuldet, dass das Book of Vaadin sehr viele Themen abdecken muss, die vielleicht nicht für jeden Leser von Relevanz sind. Schließlich besteht auch hier das Problem, dass das englischsprachige Buch nicht von einem Muttersprachler verfasst worden ist und sich damit stellenweise etwas sperrig liest.
Mit dem vorliegenden Vaadin Grundlagenbuch möchte ich der Entwicklergemeinde eine deutschsprachige Alternative zu der vorhandenen Literatur bieten.
Was will dieses Buch vermitteln?
Dieses Buch verfolgt das Ziel, der Software-Entwicklerin und dem Software-Entwickler eine solide und überschaubare Einführung in das Vaadin Framework zu geben. Mein Hauptanliegen ist es dabei, gerade so viele Themen in dem Buch unterzubringen, wie unbedingt dazu notwendig sind, erfolgreich seine ersten einfachen Anwendungen mit Vaadin zu schreiben.
Das Buch will seine Leser daher nicht mit Informationen überfrachten. Insbesondere soll es nicht notwendig sein, sich erst durch einen mehrere hundert Seiten dicken Trümmer lesen zu müssen, bevor man eine erste einfache Vaadin-Anwendung schreiben kann.
Eines meiner mir gesetzten Ziele als Autor ist es, eine Auswahl an Themen zu treffen, die für den Vaadin-Einstieg unbedingt bekannt sein müssen, bevor eine vernünftige – das heißt wartbare und sauber strukturierte – Vaadin-Anwendung geschrieben werden kann. Genau das sind die Themen, die Sie in diesem Grundlagenbuch vorfinden werden. Themen und Informationen, die in der täglichen Arbeit mit Vaadin zumindest am Anfang noch keine allzu große Relevanz aufweisen und erst in späteren Projektphasen wichtig werden, werden daher ausgespart.
Das angestrebte Ziel des Buches ist es also, eine übersichtliche, aber dennoch nicht zu oberflächliche Einführung in das Thema zu geben. Nachdem Sie dieses Buch gelesen haben, kennen Sie das Vaadin Framework zwar nicht in all seinen Details. Sie wissen dafür aber wie das Framework im Inneren tickt und wie man es grundsätzlich anwendet. Durch diesen Ansatz soll die knappe Zeit, die einem als Entwickler und Entwicklerin zur Verfügung steht, nicht über Gebühr beansprucht werden.
Was möchte dieses Buch nicht sein?
Dieses Grundlagenbuch will kein detailliertes Referenzwerk zu jedem Detail und jedem Nebenaspekt des Vaadin Frameworks sein. Es soll auch vermieden werden, dass wichtige Grundlagen, die man sich unbedingt aneignen muss, zwischen fortgeschrittenen und zu Beginn irrelevanten Spezialthemen verloren gehen.
Aber was ist, wenn man später, bei der täglichen Arbeit mit dem Framework, an dem Punkt ankommt, an dem die einfachen Grundlagenkenntnisse nicht mehr für das aktuell zu lösende Problem ausreichen? Wenn man wissen muss, wie man die Architektur einer Vaadin-Anwendung am besten gestaltet? Oder wenn man den inneren Aufbau des Frameworks noch besser verstehen muss, um bestimmte knifflige Problemstellungen zu lösen?
Dann wird man zu dem Begleitbuch greifen können, welches ich im Anschluss an dieses Grundlagenbuch plane, wenn dafür bei der Leserschaft Interesse besteht. Dies soll ein Buch für Fortgeschrittene werden, das sämtliche Themen aufgreift und vertieft, die in diesem Grundlagenbuch nicht oder nur einführend behandelt werden konnten. Dieses Buch, Vaadin für Fortgeschrittene (dies ist momentan nur der Arbeitstitel), will hinter die Kulissen von Vaadin blicken und die Dinge im Detail erklären. Es sollen Best Practices beschrieben und Ideen und Impulse zu Themen gegeben werden, die in einem etwas weitergefassten Kontext stehen als die reine Oberflächenentwicklung mit Vaadin. Dazu gehören Entwurfsmuster und Optimierungsmöglichkeiten. Daneben sollen Kernbereiche von Vaadin behandelt werden, die zwar wichtig für das tiefere Verständnis des Frameworks sind, die aber dennoch in einem Grundlagenbuch keinen Platz haben. Eines dieser Themen ist beispielsweise die Entwicklung eigener, clientseitiger Vaadin-Komponenten und Komponenten-Extensions mit GWT. Dies ist eines der typischen Ecken des Frameworks, die man zu Beginn nicht unbedingt kennen muss. Man kann problemlos eine ganze Weile sehr produktiv mit Vaadin arbeiten, bevor man in die Verlegenheit kommt, eine eigene UI-Komponente zu entwickeln — wenn das überhaupt geschieht.
Aufbau des Buches
In diesem Abschnitt wird der Aufbau des Buches und seine Unterteilung in Unterkapitel beschrieben. Es wird grob aufgeführt, welche Kapitel die Leser in diesem Buch vorfinden und welchen Inhalt sie dort erwartet. Dieser Abschnitt wird nachträglich vervollständigt, wenn das Buch fertiggestellt wurde.
Konventionen
Dieser Abschnitt beschreibt die in diesem Buch verwendeten Konventionen. Das sind die Konventionen für die Darstellung von Quelltext und für Hyperlinks. Auch dieser Abschnitt wird vervollständigt werden, kurz bevor das Buch fertiggestellt wird.
Quelltext
Sämtliche Quelltexte werden in nichtproportionaler Schrift dargestellt. Java-Klassen, die das erste Mal erwähnt werden, werden immer mit ihrem vollqualifizierten Klassennamen ausgeschrieben. Später wird die Package-Information für diese Klassen weggelassen.
Gleiches gilt für Methoden: um zu verstehen, aus welcher Klasse eine angesprochene Methode stammt, wird diese zusammen mit der sie definierenden Klasse angegeben. Es wird dann die vollständige Signatur der Methode inklusive vollqualifiziertem Klassennamen und Typen der Methodenparameter angegeben. Die verwendete Schreibweise orientiert sich dabei an der Referenzierweise von JavaDoc-Kommentaren. Das heißt, eine statische oder nicht-statische Methode wird mit dem #-Zeichen von ihrer definierenden Klasse abgetrennt. Folgendes Beispiel soll dies verdeutlichen:
com.vaadin.ui.AbstractComponentContainer#addComponent(com.vaadin.ui.Component)
bezieht sich auf die Methode, mit der eine Vaadin Komponente auf ein Layout gesetzt werden kann. Im späteren Verlauf des Textes wird dann nur noch von addComponent() gesprochen.
Möglicherweise muss aufgrund des begrenzten Platzes auf der Seite eine solche längliche Methodenreferenz künstlich umbrochen werden.
Längere Code-Listings erhalten immer eine Zeilennummerierung. Die Zeilennummern werden im Text aber nicht verwendet, um auf bestimmte interessante Stellen im Code hinzuweisen. Stattdessen werden im betroffenen Quelltext an den Stellen, auf die sich die nachfolgenden Erläuterungen beziehen, nummerierte Kommentare eingefügt. Das sieht dann wie in dem folgenden Beispiel aus:
1 Label text = new Label(); // {1} //
2 text.setCaption("Beschriftung");
3 text.setValue("Text"); // {2} //
In den Erläuterungen zu dem Code-Beispiel wird dann einfach die Nummer der referenzierten Code-Stelle in den Text eingefügt: In dem Code-Beispiel wird ein Label erzeugt {1} und der dargestellte Text des Labels mit setValue() gesetzt {2}.
Kommandozeilenaufrufe
Auch Beispiele von Befehlsaufrufen auf der Kommandozeile werden in nichtproportionaler Schrift gesetzt. Um deutlich zu machen, dass Beispielcode einen Aufruf auf der Kommandozeile darstellt, wird diesem für Windows-Befehle, analog zur Windows Command Shell, das Symbol C:\> vorangestellt. Für Befehle, die so auch auf unixoiden Systemen ausgeführt werden können, wird das Symbol für den Shell Prompt $ vorangestellt.
UML-Diagramme
Sämtliche UML-Diagramme in diesem Buch wurden mit dem Open Source Projekt PlantUML erstellt. PlantUML erlaubt die Erstellung von verschiedenen UML-Diagrammtypen mithilfe einer einfachen, textbasierten Sprache. Die Vererbungshierarchie von java.util.AbstractList kann damit zum Beispiel wie folgt dargestellt werden:
@startuml
interface List<E>
abstract class AbstractList<E>
abstract class AbstractCollection<E>
List <|.. AbstractList
AbstractCollection <|-- AbstractList
@enduml
Dieses Skript wird von PlantUML zu folgendem Diagramm gerendert:
Was man an diesem Beispieldiagramm gut sehen kann, ist die etwas eigenwillige Darstellung von PlantUML für den generischen Typparameter einer Klasse: Der Parameter E wird oben rechts an der Klasse in einem weißen Kästchen dargestellt.
Beispielcode
Der Inhalt dieses Buches wird von vielen, möglichst einfach gehaltenen und verständlichen Codebeispielen begleitet. Natürlich ist es schwierig bis unmöglich, in einem Buch vollständig lauffähige und selbsterklärende Codebeispiele unterzubringen. Es können immer nur Ausschnitte in den Text übernommen werden, die den Kern eines besprochenen Themas beleuchten.
Für jemanden, der sich gerade ganz neu in eine Programmierschnittstelle einarbeiten möchte, ist es jedoch oftmals sehr hilfreich, wenn man kleine, in sich abgeschlossene und lauffähige Beispielprojekte zur Hand hat, die ein bestimmtes, eng umfasstes Thema demonstrieren. Am besten sollte es dazu möglich sein, ein solches Beispielprojekt mit einem einzigen Befehl bauen und ausführen zu können, ohne dazu erst eine umständliche Setup-Prozedur durchführen zu müssen.
Aus diesem Grund wird jeder nicht-triviale Beispielcode aus diesem Buch durch ein isoliert bau- und lauffähiges Demoprojekt ergänzt, das man sich aus dem Netz herunterladen kann und das zu eigenen Experimenten einlädt. Dafür existiert ein GitHub-Projekt “grundlagenbuch-vaadin7-bsp”, das sämtlichen Beispielcode für dieses Buch enthält.
Die Beispielprojekte basieren auf Java 8 und machen auch Gebrauch von den neuen Features dieser Java-Version. Das heißt, es werden Lambda-Ausdrücke und Streams verwendet, um den Code kurz und bündig zu halten. Insbesondere für Vaadins Ereignisbehandlungsroutinen eignen sich die Lambda-Ausdrücke von Java 8 hervorragend.
Weiterhin verwenden die Projekte alle Apache Maven als Build-Management Tool. Dadurch ist ein sehr einfaches Arbeiten mit den Demoprojekten möglich. Um dies tun zu können, sind keine tieferen Kenntnisse von Maven notwendig. Es genügt, wenn man Maven installiert hat und den notwendigen Befehl kennt, um ein solches Maven Projekt zu starten. Dies wird im Folgenden erläutert.
Organisation der Beispielprojekte
Sämtliche Beispielprojekte (bis auf das allererste Beispiel, welches mit Eclipse erzeugt und mit Apache Ivy gebaut wird) sind in einem sogenannten Maven Multi-Module Projekt organisiert. Das heißt, es gibt ein gemeinsames Hauptverzeichnis, unter dem die einzelnen Demos organisiert sind, und einen gemeinsamen Build Deskriptor, der als Elterndeskriptor alle untergeordneten Projekte zusammenfasst (dieser Build Deskriptor heißt bei Maven Project Object Model (POM) und liegt in der Datei pom.xml). Über diesen Elterndeskriptor (Parent POM) lassen sich sämtliche untergeordnete Projekte mit einem einzigen Kommando bauen und paketieren.
Dennoch ist jedes Unterprojekt dabei für sich genommen selbständig lauffähig. Man kann also in den Verzeichnissen der einzelnen Beispielprojekte den entsprechenden Maven-Befehl zum Bauen und Starten des Projektes absetzen und anschließend die jeweilige Beispielanwendung in seinem Browser besuchen.
Notwendige Voraussetzungen
Um die Beispielprojekte auszuprobieren, sind ein paar wenige Dinge als Voraussetzung notwendig. Es wird ein JDK ab Version 1.7 benötigt, und es muss das Build-Management Tool Maven in der aktuellen Version (mindestens ab Version 3.0.x) installiert sein (Eine Installationsanweisung für Maven finden Sie im nächsten Abschnitt). Die Installation eines Servlet Containers, wie z. B. Tomcat, ist nicht erforderlich.
Für das erstmalige Bauen der Beispielprojekte wird eine Internetverbindung benötigt. Maven lädt sich sämtliche Abhängigkeiten eines Projektes aus einem zentralen Verzeichnis im Internet (das sogenannte Maven Central) herunter und legt diese lokal in einem Cache ab. Zu diesen Abhängigkeiten gehören für unsere Beispiele auch die Vaadin Bibliotheken. Wenn alle notwendigen abhängigen Bibliotheken im Cache verfügbar sind, kann Maven das Projekt fortan auch offline bauen.
Installation von Maven
Zur Verwendung von Maven muss man sich das für sein Betriebssystem passende Paket von der Maven Homepage herunterladen und dieses lokal installieren.
Die Installation von Maven soll im Folgenden kurz beschrieben werden.
Zuerst laden Sie sich im Download-Bereich der Maven Homepage das Zip-Paket der aktuellen Maven-Version herunter. Diese Zip-Datei entpacken Sie lokal an einen beliebigen Ort, z. B. nach C:\Programme\apache-maven. Unter Linux installieren Sie sich das entsprechende Paket über den jeweiligen Paketmanager Ihrer Linux-Distribution.
Anschließend muss eine Umgebungsvariable M2_HOME eingerichtet werden, die auf dieses Installationsverzeichnis verweist. Hierbei ist es wichtig zu beachten, dass Sie nicht das \bin-Verzeichnis der Maven-Installation für diese Umgebungsvariable angeben, sondern das Wurzelverzeichnis der Installation.
C:\> set M2_HOME=C:\Programme\apache-maven
Unter Linux:
$ export M2_HOME=/path/to/maven/installation
Anschließend können Sie die PATH-Variable des Systems um das Maven \bin-Verzeichnis erweitern:
C:\> set PATH=%PATH%;%M2_HOME%\bin
Unter Linux können Sie einen symbolischen Link auf das Maven Binary mvn in /usr/bin anlegen.
Wie Sie auf Ihrem System eine Umgebungsvariable fest einrichten, entnehmen Sie bitte der Anleitung Ihres Betriebssystems.
Haben Sie diese Schritte durchgeführt, können Sie in einer neu gestarteten Konsole Ihre Installation testen. Der Befehl
$ mvn -version
sollte dann zu einer Ausgabe ähnlich der Folgenden führen:
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T13:5\
7:37+02:00)
Maven home: C:\Tools\apache-maven-3.3.3
Java version: 1.8.0_11, vendor: Oracle Corporation
Java home: C:\java\jdk1.8.0_11\jre
Default locale: de_DE, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
Damit haben Sie Maven erfolgreich installiert.
Bauen und starten der Beispielprojekte mit Maven
Um die Beispielprojekte verwenden zu können, laden Sie sich diese zuerst von GitHub herunter. Das geschieht entweder direkt über das Versionskontrollsystem Git oder indem Sie sich direkt auf der Seite des Projekts auf GitHub (https://github.com/rolandkrueger/grundlagenbuch-vaadin7-bsp) den Quellcode als Zip-Datei herunterladen.
Das Projekt wird wie folgt mit dem Git Kommandozeilen-Client heruntergeladen (“geklont”):
$ git clone https://github.com/rolandkrueger/grundlagenbuch-vaadin7-bsp.git
Das Projekt grundlagenbuch-vaadin7-bsp steht übrigens unter einer Public Domain Lizenz. Das heißt, Sie dürfen mit dem Beispielcode anstellen, was Sie wollen, ohne mich vorher um Erlaubnis fragen zu müssen. Nutzen Sie den Code also gerne als Basis, Inspiration oder als Kopiervorlage in Ihren eigenen Projekten.
Die auf Maven basierenden Beispielprojekte für dieses Vaadin Grundlagenbuch finden Sie in dem geklonten Projekt unter /Maven-Projekte. Wechseln Sie in dieses Verzeichnis und führen Sie dort den folgenden Befehl aus:
$ mvn package
Alle Beispielprojekte werden dadurch gebaut und können anschließend mit Maven über den integrierten Jetty Server gestartet werden. Wechseln Sie dazu in ein beliebiges Unterverzeichnis unterhalb von /Maven-Projekte und führen Sie den folgenden Befehl aus:
$ mvn jetty:run
Wenn Sie im vorigen Schritt die Demoprojekte erfolgreich gebaut haben, wird nun ein Jetty Server gestartet, auf dem das Projekt automatisch deployt wird. Ist der Jetty gestartet, können Sie das mit Ihrem Browser die Seite
http://localhost:8080
besuchen. Es öffnet sich daraufhin das jeweilige Demoprojekt in Ihrem Browser, und Sie können beginnen, damit zu experimentieren.
Feedback
Ich habe mich für Leanpub als Veröffentlichungsplattform für dieses Buch entschieden, da man hier sein Buch schon für die Allgemeinheit freigeben kann, während man noch daran schreibt. Dieses Prinzip erlaubt es, schon frühzeitig auf Feedback, Rückmeldungen und Leserwünsche einzugehen, und diese in die Entstehung des Buches einfließen zu lassen.
Damit das für dieses Buch richtig funktioniert, bin ich auf Ihre Rückmeldung angewiesen. Ich freue mich also über jede Art von Kommentaren, Wünschen und Meinungen, die ich von Ihnen bekommen kann. Sie wünschen sich die bevorzugte oder vertiefendere Behandlung eines Themas, das für Sie besonders interessant ist? Schreiben Sie mir das, und ich werde versuchen, Ihre Wünsche in die Kapitelplanung einfließen zu lassen.
Sie können mich über verschiedene Kanäle erreichen: entweder über die oben genannten sozialen Netzwerke (Twitter oder Google+), per Email (mail@rolandkrueger.info) oder über die Kommentarspalte zu diesem Buch auf Leanpub.
Copyrights und Bildnachweise
Rentierkopf auf Titelseite: Bildnummer 328723733 © Khapaev Vladimir/Shutterstock.com
Linux ist ein eingetragenes Warenzeichen von Linus Torvalds. Microsoft und Microsoft Windows sind eingetragene Warenzeichen der Microsoft Corp., Redmond WA 98052. Vaadin, }> und Thinking of U and I sind eingetragene Warenzeichen der Vaadin Ltd. Andere aufgeführte Produkt- und Firmennamen sind möglicherweise Marken der jeweiligen Eigentümer.
Die Abbildungen in diesem Buch wurden inspiriert durch die bikablo® Publikationen, www.bikablo.com.