Aus Raspberry Pi Geek 02/2016

Professionelle Java-Webanwendungen mit Vaadin entwickeln (Seite 2)

Der letzte Parameter gibt an, dass Maven ein WAR-Archiv erstellen soll. Ein solches Archiv beinhaltet in Form gepackter Webapplikation sämtliche für das Projekt nötigen Bibliotheken, Klassen und Ressourcen. Das WAR-Archiv lässt sich in einem beliebigen Servlet-Container ausrollen und ausführen. Bekannte Servlet-Container und gleichzeitig Webserver sind zum Beispiel Tomcat oder Jetty (siehe Kasten “Jetty”).

Jetty

Jetty [8] fungiert als Servlet-Container und Webserver, ähnlich wie etwa Tomcat von der Apache Group. Im Vergleich zur Apache-Konkurrenz benötigt Jetty weniger Ressourcen, lässt sich dementsprechend aber auch nicht ganz so flexibel einsetzen. Der Vorteil dieses Werkzeugs liegt vielmehr darin, dass es sich recht einfach in andere Projekte integrieren lässt. So verwendet beispielsweise das Google Web Toolkit seit der Version 1.6 Jetty als Webserver.

Zurück zu Maven: Das Ausführen des initialen Kommandos braucht etwas Zeit, da das Programm recht viele Einzelkomponenten aus dem Internet lädt. Während der Installation fragt Maven, ob die Projektparameter korrekt sind, Sie beantworten die Frage mit [Y]. Danach wechseln Sie in das Projektverzeichnis und lassen das Vaadin-Projekt das erste Mal bauen. Da dieser Prozess besonders viel Zeit in Anspruch nimmt, dürfen Sie derweil eine gemütliche Kaffeepause einlegen. In Zukunft müssen Sie weniger Geduld aufbringen: Bei allen weiteren Aufrufen baut Maven nur die Teile neu, die sich verändert haben.

Maven legt das komplette Projekt im Verzeichnis myproject ab, mit allem was dazugehört. So wie es jetzt vorliegt, lässt es sich noch nicht ausführen. Dazu müssen Sie erst noch das Archiv erstellen lassen. Dies erledigen Sie mit Zeile 1 und 2 aus Listing 4. Um die Beispielapplikation dann zu starten, geben Sie den Befehl aus Zeile 4 des Listings ein. Er startet auf dem RasPi einen Jetty-Webserver und stellt die Applikation unter http://IP-Adresse:8080/myproject zur Verfügung.

Listing 4

 

$ cd myproject
$ mvn package
$ mvn jetty:run

Die Beispielapplikation (Abbildung 2) eignet sich bestenfalls als Einstieg in die Vaadin-Programmierung: Ein Blick in den zugehörigen Quellcode (Listing 5) zeigt zum Beispiel kein einziges Stückchen HTML, die Demo macht eher den Eindruck einer AWT-Anwendung.

Abbildung 2: Die erste Vaadin-Beispielapplikation.

Abbildung 2: Die erste Vaadin-Beispielapplikation.

Listing 5

 

@Theme("mytheme")
@Widgetset("your.company.MyAppWidgetset")
public class MyUI extends UI {
  @Override
  protected void init(VaadinRequest vaadinRequest) {
    final VerticalLayout layout = new VerticalLayout();
    layout.setMargin(true);
    setContent(layout);
    Button button = new Button("Click Me");
    button.addClickListener(new Button.ClickListener() {
      @Override
      public void buttonClick(ClickEvent event) {
        layout.addComponent(new Label("Thank you for clicking"));
      }
    });
    layout.addComponent(button);
  }
  @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
  @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
  public static class MyUIServlet extends VaadinServlet {
  }
}

Den Code ausbauen

Nun besitzen Sie eine komplett lauffähige Vaadin-Umgebung. Für erste eigene Schritte passen Sie den Quelltext der Demo-App an und bauen das Projekt noch einmal. Dazu öffnen Sie eine zweite SSH-Verbindung zum RasPi. In der ersten SSH-Session läuft immer noch Jetty, das Sie mit mvn jetty:run gestartet hatten.

In der zweiten SSH-Session öffnen Sie zum Beispiel die UI-Datei (User Interface) aus dem Ordner ~/myproject/src/main/java/local mit einem beliebigen Texteditor, etwa Nano oder Vi. Dort ändern Sie dann beispielsweise die Beschriftung des Schalters (Listing 6) und speichern die Datei wieder.

Listing 6

 

[...]
Button button = new Button("Licht an");
[...]

Danach bauen Sie das Projekt mit dem Befehl mvn package neu. Beachten Sie dabei, dass Sie dieses Kommando in demjenigen Ordner ausführen müssen, in dem die pom.xml-Datei liegt, sonst findet Maven diese nicht. Im ersten SSH-Fenster sehen Sie daraufhin, wie Jetty automatisch merkt, dass sich die Applikation geändert hat, und sie erneut ausrollt.

Danach passen Sie das Programm so an, dass es die GPIO-Schnittstelle des Raspberry Pi ansprechen kann. Mit Java erreichen Sie das am einfachsten mithilfe der Pi4j-Bibliothek (siehe Kasten “Pi4j”). Um Ihrem Projekt diese Library hinzuzufügen, tragen Sie sie einfach als Abhängigkeit (dependency) in die pom.xml ein (Listing 7) und bauen das Projekt abermals neu. Anschließend steht die Bibliothek umgehend zur Verfügung. (Die komplette pom.xml-Datei dieses Beispiels finden Sie auf der Heft-DVD dieser Ausgabe.)

Listing 7

 

[...]
<dependency>
  <groupId>com.pi4j</groupId>
  <artifactId>pi4j-core</artifactId>
  <version>1.0</version>
</dependency>
[...]

Pi4j

Die von den WiringPi-Tools [9] abstammende Pi4j-Bibliothek [10] ermöglicht es, mit Java auf die GPIO des Raspberry Pi zuzugreifen. Möchten Sie nicht mit einem Build-Tool wie Maven arbeiten, lässt sich die Pi4j-Bibliothek auch manuell installieren. Das erledigen Sie bei Bedarf mithilfe des folgenden Kommandos:

$ curl -s get.pi4j.com | sudo bash

Nach der Installation steht Ihnen dann mit pi4j ein kleines Tool zur Verfügung, mit dessen Hilfe Sie Java-Programme kompilieren und starten können.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben