© Excellent backgrounds/Shutterstock.com
Java Magazin
Vaadin und MapDB

Ein performantes Team

Immer wieder haben wir es in Anwendungen mit dem Thema Persistence zu tun. Der erste Gedanke dabei ist dann oft im Bereich der RDBMS zu verorten. Aber muss es immer ein solches System sein? Wir können uns genauso gut etwas aus dem Bereich der NoSQL-Systeme aussuchen. Allerdings sind auch diese Systeme häufig nicht ganz so einfach, benötigen eigenständige Infrastruktur oder sind schlicht zu komplex für die zu erledigende Aufgabe.

Sven Ruppert


Nicht jede Anwendung muss skalieren wie Netflix, Google oder andere Vertreter riesiger Systeme. Manchmal ist es die kleine Anwendung, die es einigen Dutzend Mitarbeitern ermöglicht, ihre Arbeit effizient zu erledigen. Wir werden uns hier mit einer möglichen Variante auf Basis von Vaadin und MapDB beschäftigen.

In der Beispielanwendung für diesen Artikel geht es darum, nacheinander Bilder der NASA anzuzeigen. In der ersten Version liegen alle Bilder auf einer lokalen Festplatte vor und werden bei jeder Anfrage geladen und zur Anzeige gebracht. Welches Bild als Nächstes angezeigt werden soll, wird durch einen Zufallszahlengenerator bestimmt:

public static Supplier nextImageName() { return () -> "nasa_pic_" + randomImageID().apply(100) + ".jpg";}

Die Anzeige erfolgt in einer Webanwendung auf Basis von Vaadin. Der Quelltext hierzu befindet sich auf GitHub unter [1]. Neben dem typischen Gerüst für eine Vaadin-Anwendung benötigen wir an dieser Stelle ausschließlich eine Komponente zur Anzeige. In der Hauptkomponente wird lediglich eine Instanz vom Typ StreamRessource eingebettet und damit zur Anzeige gebracht. Das Bild wird nicht weiterbearbeitet oder skaliert. Wir bringen einfach das Bild selbst, so wie es ist, zur Anzeige (Listing 1).

Listing 1: Bild anzeigenprivate Image image;private Registration registration; @PostConstructprivate void postConstruct() { image = createImage().apply(nextImageName().get());  registration = register(imgID -> image.getUI() .access(() -> { logger().info("DashboardComponent - imgID = " + imgID); final StreamResource apply = createImageResource().apply(imgID); image.setSource(apply); }));  setCompositionRoot(image);}

Persistence

Kommen wir zum Thema Persistence. Hier können wir sicherlich auf eine Menge verschiedener Systeme zurückgreifen. Manchmal ist weniger aber mehr. Gehen wir davon aus, dass wir in unserer Anwendung meistens mit Daten arbeiten, die tabellenartig aufgebaut sind. Eine Liste von Benutzern, eine Liste von Datensätzen zu einem Benutzer usw. In diesem Fall können wir in der Anwendung selbst mit den in Java vorhandenen Datenstrukturen sehr weit kommen. Die Rede ist hier von Listen, Maps und Sets. Warum eigentlich diese Datenstrukturen nicht auch verwenden, um die Daten persistent zu halten? Hier kommt ein Open-Source-Projekt ins Rennen: MapDB, auf GitHub unter [2] zu finden.

Bei diesem Projekt handelt es sich um eine Sammlung von Implementierungen der Interfaces Map, Set und List. Das Besondere...

Java Magazin
Vaadin und MapDB

Ein performantes Team

Immer wieder haben wir es in Anwendungen mit dem Thema Persistence zu tun. Der erste Gedanke dabei ist dann oft im Bereich der RDBMS zu verorten. Aber muss es immer ein solches System sein? Wir können uns genauso gut etwas aus dem Bereich der NoSQL-Systeme aussuchen. Allerdings sind auch diese Systeme häufig nicht ganz so einfach, benötigen eigenständige Infrastruktur oder sind schlicht zu komplex für die zu erledigende Aufgabe.

Sven Ruppert


Nicht jede Anwendung muss skalieren wie Netflix, Google oder andere Vertreter riesiger Systeme. Manchmal ist es die kleine Anwendung, die es einigen Dutzend Mitarbeitern ermöglicht, ihre Arbeit effizient zu erledigen. Wir werden uns hier mit einer möglichen Variante auf Basis von Vaadin und MapDB beschäftigen.

In der Beispielanwendung für diesen Artikel geht es darum, nacheinander Bilder der NASA anzuzeigen. In der ersten Version liegen alle Bilder auf einer lokalen Festplatte vor und werden bei jeder Anfrage geladen und zur Anzeige gebracht. Welches Bild als Nächstes angezeigt werden soll, wird durch einen Zufallszahlengenerator bestimmt:

public static Supplier nextImageName() { return () -> "nasa_pic_" + randomImageID().apply(100) + ".jpg";}

Die Anzeige erfolgt in einer Webanwendung auf Basis von Vaadin. Der Quelltext hierzu befindet sich auf GitHub unter [1]. Neben dem typischen Gerüst für eine Vaadin-Anwendung benötigen wir an dieser Stelle ausschließlich eine Komponente zur Anzeige. In der Hauptkomponente wird lediglich eine Instanz vom Typ StreamRessource eingebettet und damit zur Anzeige gebracht. Das Bild wird nicht weiterbearbeitet oder skaliert. Wir bringen einfach das Bild selbst, so wie es ist, zur Anzeige (Listing 1).

Listing 1: Bild anzeigenprivate Image image;private Registration registration; @PostConstructprivate void postConstruct() { image = createImage().apply(nextImageName().get());  registration = register(imgID -> image.getUI() .access(() -> { logger().info("DashboardComponent - imgID = " + imgID); final StreamResource apply = createImageResource().apply(imgID); image.setSource(apply); }));  setCompositionRoot(image);}

Persistence

Kommen wir zum Thema Persistence. Hier können wir sicherlich auf eine Menge verschiedener Systeme zurückgreifen. Manchmal ist weniger aber mehr. Gehen wir davon aus, dass wir in unserer Anwendung meistens mit Daten arbeiten, die tabellenartig aufgebaut sind. Eine Liste von Benutzern, eine Liste von Datensätzen zu einem Benutzer usw. In diesem Fall können wir in der Anwendung selbst mit den in Java vorhandenen Datenstrukturen sehr weit kommen. Die Rede ist hier von Listen, Maps und Sets. Warum eigentlich diese Datenstrukturen nicht auch verwenden, um die Daten persistent zu halten? Hier kommt ein Open-Source-Projekt ins Rennen: MapDB, auf GitHub unter [2] zu finden.

Bei diesem Projekt handelt es sich um eine Sammlung von Implementierungen der Interfaces Map, Set und List. Das Besondere...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang