11. Februar 2015

Prototyping von Webanwendungen mit Structr und Neo4j

Auf dem Neo4j-Meetup in Amsterdam im Januar habe ich einen Vortrag über das Prototyping von Webanwendungen mit Structr gehalten. Dieses Mal bestand die besondere Aufgabe darin, eine bestehende Neo4j-Datenbank zu verwenden, die mit einigen Testdaten gefüllt wurde, die während des vorherigen Treffens mit GraphGen, einem sehr nützlichen Tool zur Graphengenerierung von Christophe Willemsen, erzeugt wurden.

Die Einzelheiten können Sie in Riks großartigem Blogbeitrag nachlesen: Prototyping einer Graph-Datenbank.

Aufgrund des langsamen WiFi-Netzes war es nicht möglich, Structr herunterzuladen und erfolgreich zu installieren, da für das Hands-On die neueste Version 1.1-SNAPSHOT von Structr benötigt wurde. Daher habe ich versprochen, einen Blog-Beitrag über die Prototyping-Session zu schreiben, damit jeder nachvollziehen kann, was ich im Hands-On-Teil gemacht habe. Hier ist er also (besser spät als nie).

Warum brauchten wir den neuesten Structr-Snapshot?

Die mit GraphGen erstellte Datenbank enthält Knoten mit einem Namensattribut und einem Label. Structr benötigt zwei zusätzliche Attribute: „Typ“ und „id“. Es gibt einen eingebauten Wartungsbefehl, der die id-Eigenschaft hinzufügt und sie mit einer UUID füllt. Dies ist der primäre Bezeichner für jedes Graph-Objekt in Structr.

Das type-Attribut wird benötigt, um den primären Typ zu markieren, da ein Knoten mehrere Labels haben kann, die in Structrs Java OGM auf Klassen und Schnittstellen abgebildet werden. Um Structr in die Lage zu versetzen, diese Knoten zu verwenden, musste ich einen kleinen Patch auf Structr anwenden, damit der erwähnte Bulk-Befehl beim Hinzufügen der UUID auch das Typ-Attribut hinzufügt.

Sie können die neueste Snapshot-Version von hier herunterladen:

https://oss.sonatype.org/content/repositories/snapshots/org/structr/structr-ui/1.1-SNAPSHOT/

Unter OS X laden Sie die Datei dist.tar.gz herunter, auf Debian-basierten Linux-Maschinen können Sie entweder das .deb-Paket oder auch die Datei dist.tar.gz verwenden.

Bitte beachten Sie, dass diese Version gegen Neo4j 2.1.6 kompiliert wurde und daher nur mit Neo4j-Datenbanken funktioniert, die mit Version 2.1 und darunter erstellt wurden. Wenn Sie eine neuere Version der Datenbank verwenden, wie z.B. 2.2 Milestone 1 oder später, kontaktieren Sie uns bitte über help@support.structr.com, damit wir Ihnen eine Structr-Version zur Verfügung stellen können, die mit diesen Versionen funktioniert.

Einrichtung

Um Structr zu installieren, laden Sie das tar.gz- oder Debian-Paket herunter und folgen Sie den Anweisungen in der Dokumentation, die Sie hier finden: http://docs.structr.org/installation-and-configuration-guide

Kopieren Sie die bestehende Datenbank in das Verzeichnis Structr

Bevor Sie Structr starten, müssen Sie das Verzeichnis graph.db der zuvor erstellten Datenbank in das structr-ui Verzeichnis kopieren. Wenn Sie Structr bereits gestartet haben, stellen Sie sicher, dass Sie die bestehenden Verzeichnisse „db“ und „files“ verschieben.

Ihre Installation war erfolgreich, wenn Sie die Structr Backend UI und den Neo4j Browser unter diesen Adressen erreichen können:

http://localhost:8082/structr
http://localhost:7474/

Wenn Structr keine Knoten findet, die den Structr-Anforderungen entsprechen, importiert es eine Seed-Datei (seed.zip), die eine Beispiel-Webseite („Welcome“) und einen ersten Benutzer („admin“ mit Passwort „admin“) enthält.

Das Datenmodell

Das folgende Bild zeigt das Datenmodell, das beim letzten Treffen als Grundlage für die Befüllung der Datenbank mit Beispieldaten verwendet wurde.

Anlegen der Knotentypen

Um auf diese Daten in Structr zugreifen zu können, müssen wir das entsprechende Metamodell in Structr mit dem visuellen Schema-Editor erstellen. Gehen Sie in den Bereich „Schema“ und erstellen Sie die folgenden neuen Typen:

Company, User, Department, Service, Software

Klicken Sie dann auf die Schaltfläche „Werkzeuge“, um den Werkzeugdialog zu öffnen, und fügen Sie UUIDs zu allen oben genannten Typen hinzu, indem Sie den Knotentyp auswählen und auf die Schaltfläche „UUIDs hinzufügen“ klicken.

Wenn Sie mit allen Knotentypen fertig sind, sollten die Daten im Abschnitt Daten angezeigt werden, allerdings ohne Beziehungen.

Beziehungsklassen erstellen

Wir wollen natürlich auch die Beziehungen zwischen den Datenknoten sehen, und alles, was wir tun müssen, ist, die möglichen Beziehungen zum Datenmodell in Structr hinzuzufügen.

Dies kann durch Zeichnen einer Beziehung im Schema-Editor geschehen. Klicken Sie mit der Maustaste auf den unteren Verbindungspunkt eines Quellknotens, halten Sie sie gedrückt und ziehen Sie die Beziehungen auf den oberen Verbindungspunkt des Zielknotens, mit dem Sie eine Verbindung herstellen möchten. Klicken Sie dann auf die Beziehungsbeschriftung und geben Sie den Beziehungstyp genau so ein, wie er auf den Beziehungen im Datenmodellbild steht. Um die Beziehungsdefinition abzuschließen, definieren Sie die Kardinalität, indem Sie die Multiplizität auf Quell- und Zielknoten festlegen (zulässige Werte sind 1 und *).

Wiederholen Sie diesen Vorgang für jeden anderen Beziehungstyp im Datenmodell. Danach zeigt Structr die zugehörigen Knoten in der Datenansicht in einer Spalte an, die automatisch hinzugefügt und entsprechend dem Typ des anderen Knotens und dem Beziehungstyp benannt wird. Sie können die Namen dieser Remote-Attribute im Knoten-Detail-Dialog des Schema-Editors überschreiben.

Webanwendung erstellen

Sobald das Datenmodell in Structr die Datenstrukturen in Neo4j widerspiegelt, können Sie zum Abschnitt Seiten gehen, eine Vorlage importieren (wir haben das bekannte Bootstrap Jumbotron Beispiel verwendet), eine Abfrage eingeben und eine Datenbindung auf die Ergebnisse anwenden:

In unserem Beispiel haben wir eine Liste mit den in der Beispieldatenbank enthaltenen Unternehmen erstellt.

Um den Namen eines Unternehmens anzuzeigen, können Sie einfach ${company.name} als Platzhalter verwenden:

Dieser Blogbeitrag endet hier. Wenn Sie mehr erfahren möchten, können Sie über die Kommentarfunktion unten eine Diskussion starten oder unserer Mailingliste beitreten.

Axel Morgner

Dieser Artikel wurde geschrieben von

Axel Morgner

Die neuesten Beiträge von Structr

Zurück zur Übersicht