Der Derby Network Server

ein Tipp von Ulrich Hilger
24. Februar 2018
alle Rechte vorbehalten

 

Bei der Apache Software Foundation wird eine ziemlich smarte Implementierung eines Datenbankservers gepflegt. Apache Derby hat im Verlauf seiner wechselvollen Geschichte eine ausgezeichnete Produktreife erreicht und läßt es in puncto Datenbank an nichts fehlen. Noch dazu ist es im Handumdrehen beschafft, installiert und gestartet und läuft auf allen gängigen Rechnerarchitekturen.

Dieser Tipp beschreibt die wenigen Handgriffe zur Verwendung eines Datenbankservers auf Basis des Derby Network Servers. 

Inhaltsübersicht

Zielsetzung
Vorbereitung
Start des Derby Network Servers
Ausführung überprüfen
Derby Network Server stoppen
Zusammenfassung in einem Skript
Derby Network Server mit Docker
Fazit

 

 

Zielsetzung

An einem festgelegten Ablageort sollen Datenbanken erstellt und verwaltet werden. SQL-Befehle sollen mit einem beliebigen Datenbank-Client an den Datenbankserver gerichtet werden können.

Vorbereitung

Für das obige Ziel muss ein Derby Network Server gestartet werden, der auf der Grundlage einer Ablaufumgebung für Java (Java Runtime Environment, JRE) läuft. Diese beiden Teile lassen sich aus dem Internet frei herunterladen:

An den oben angegebenen Stellen finden sich gepackte Archive, die alle Bestandteile von Java bzw. Derby enthalten und die jeweils in einem Schritt heruntergeladen werden können. Nach dem Herunterladen der Pakete Java und Derby liegen diese als gepackte Dateien unter Namen wie z.B. zulu8.27.0.7-jdk8.0.162-linux_x64.tar.gz oder db-derby-10.14.1.0-bin.tar.gz in dem Ordner, der beim Herunterladen als Ablageort gewählt wurde, z.B. im Ordner /home/fred/downloads

Mit den folgenden Kommandos wird anschließend beispielsweise das Java-Paket an den Ablageort entpackt, von wo aus es ausgeführt werden soll.

cd /home/fred/downloads
mkdir /home/fred/jre
tar -xzf zulu8.27.0.7-jdk8.0.162-linux_x64.tar.gz -C /home/fred/jre

Für die weitere Beschreibung sind die so erstellten Ablageorte von Java und Derby mit $JAVA_HOME und $DERBY_HOME bezeichnet. Zum Ausführen der nachfolgend beschriebenen Kommandos müssen diese Platzhalter mit dem Ablageort ersetzt werden. Man schreibt also z.B. /home/fred/jre anstelle von $JAVA_HOME.

Grundlegende Informationen zur Ausführung von Java-Programmen liefert zudem der Tipp Java-Programme ausführen.

Start des Derby Network Servers

Sind Java und Derby heruntergeladen und entpackt, kann der Datenbankserver mit einem einzelnen Kommando gestartet werden. Es lautet wie folgt

$JAVA_HOME/java -Dderby.system.home=/pfad/zu/db-daten -classpath $DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbynet.jar org.apache.derby.drda.NetworkServerControl start -p 1528

Das obige Kommando startet einen Derby Network Server, der auf Port 1528 auf Kommmandos lauscht und Datenbanken im Ordner /pfad/zu/db-daten verwaltet. Mit erfolgreichem Start erscheint die folgende Antwort

Apache Derby Network Server 10.14.1.0 - (1808820) wurde gestartet und ist bereit, Verbindungen auf Port 1528 zu akzeptieren.

Wie die Antwort bekundet läuft der Server und ist nun bereit, SQL-Befehle entgegenzunehmen und auszuführen.

Ausführung überprüfen

Mit dem Kommando ping lässt sich überprüfen, ob der Datenbankserver auf Anfragen antwortet:

$JAVA_HOME/java -classpath $DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbynet.jar org.apache.derby.drda.NetworkServerControl ping -p 1528

Läuft der Derby Network Server nicht, erscheint die folgende Antwort

Keine Verbindung zum Derby Network Server auf Host localhost, Port 1528: Verbindungsaufbau abgelehnt (Connection refused)

Wenn der Derby Network Server läuft und auf Anfragen antwortet, wird auf das obige Kommando hingegen die folgende Antwort zurückgegeben

Verbindung für Host: localhost, Portnummer 1528

Der Server ist bereit zur Verwendung, also zum Erstellen von Datenbanken und zum Lesen aus den und Schreiben von Daten in die Datenbanken.

Derby Network Server stoppen

Um den laufenden Derby Network Server zu stoppen wird folgendes Kommando verwendet

$JAVA_HOME/java -classpath $DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbynet.jar org.apache.derby.drda.NetworkServerControl shutdown -p 1528

Es erscheint die Antwort

Apache Derby Network Server 10.14.1.0 - (1808820) wurde heruntergefahren.

Der Datenbankserver ist gestoppt. Es kann über den Server nicht auf Daten aus den vom Server verwalteten Datenbanken zugegriffen werden. Die Daten bleiben am zuvor gewählten Ablageort gespeichert und können nach neuerlichem Start des Datenbankservers weiter verwendet werden. 

Zusammenfassung in einem Skript

Die obigen Kommandos lauten bis auf die Teile start, ping und shutdown identisch und lassen sich daher gut in einem Skript zusammenfassen. Das hat auch den Vorteil, dass die veränderlichen Teile, also die Pfadangaben, die den Weg zu den Ablageorten von Java, Derby und den Datenbanken weisen sowie der Port, über den Derby kommunizieren soll, einfacher anzugeben sind. 

Beispielsweise angenommen die Bestandteile Java und Derby liegen in den Ordnern /home/fred/jvm und /home/fred/jre/derby lautet ein entsprechendes Skript wie folgt: 

#!/bin/bash

JRE_ORT=/home/fred/jvm/jre
DERBY_ORT=/home/fred/jrs/derby
DERBY_PORT=1528
DB_DIR=/home/fred/daten/db

$JRE_ORT/bin/java -Dderby.system.home=$DB_DIR -classpath "$DERBY_ORT/lib/derby.jar:$DERBY_ORT/lib/derbynet.jar" org.apache.derby.drda.NetworkServerControl $1 -p $DERBY_PORT

 

Abgelegt unter dem Namen derby.sh kann es anschließend wie folgt genutzt werden

cd /pfad/zum/skript
./derby.sh start

oder

./derby.sh ping

oder

./derby.sh shutdown

Freilich ließen sich Pfadangaben auch mit einer systemweiten Pfadangabe hinterlegen, aber das erfordert einen Eingriff in die Konfiguration des Betriebssystems und ist nicht immer wünschenswert oder möglich. 

Derby Network Server mit Docker

Mit Docker existiert eine Möglichkeit, Anwendungen wie den Derby Network Server als Container auszuführen. Das hat u.a. den Vorteil, dass die betreffende Anwendung mit einem einfachen Kommando gestartet und gestoppt werden kann, eventuelle Abhängigkeiten werden dabei von Docker berücksichtigt und einbezogen.

Der Docker Hub enthält eine Reihe von Repositories für Derby, gut funktioniert z.B. az82/docker-derby, mit dem ein Derby Network Server wie folgt gestartet werden kann.

docker run -v `pwd`/derby-data:/dbs --name derby --rm -d -p 1527:1527 az82/docker-derby

 

Dies erzeugt und startet einen Container names derby und weist dem Derby Network Server den Ordner derby-data im aktuellen Arbeitsverzeichnis als Ablageort für Datenbanken zu. Dem so gestarteten Container namens derby kann zur Überprüfung, ob der Server läuft, wie folgt ein ping gesendet werden

docker exec derby java org.apache.derby.drda.NetworkServerControl ping

 

Zum Beenden des Servers kann folgendes Kommando dienen

docker exec derby java org.apache.derby.drda.NetworkServerControl shutdown 

 

Mit dem Beenden des Derby Network Servers wird auch die Ausführung des Docker-Containers beendet, in dem er läuft und dieser Container entfernt. 

 

Fazit

Für viele Anwendungen empfiehlt sich die Ablage von Daten in einer Datenbank. Der dafür erforderliche Datenbankserver ist mit wenigen Schritten beschafft und in Betrieb genommen.