Java-DB: So funktioniert Suns Datenbank-Managementsystem

(http://www.zdnet.de/magazin/39186637/java-db-so-funktioniert-suns-datenbank-managementsystem.htm)

von Peter Mikhalenko, 28. Februar 2008

Java-DB ist ein leichtgewichtiges Datenbank-Managementsystem (DBMS) - und vollständig in Java geschrieben. ZDNet demonstriert, wie eine einfache Datenbankverwaltung mit Java-DB gelingt.

Da Java-DB[1] nur 2 MByte Speicherplatz braucht, macht sie es Programmierern leicht, eine voll funktionsfähige Datenbank direkt in eine Anwendung zu integrieren. Java-DB ist standardbasiert, unterstützt SQL sowie die JDBC-API und lässt sich problemlos in J2EE integrieren. Seit Java 6 liefert Sun Java-DB standardmäßig mit dem JDK aus.

Welche Technologie steckt dahinter?

Apache Derby[2] ist die Kerntechnologie von Java-DB. Die Datenbank-Engine von Derby ist eine voll funktionsfähige, relational eingebettete Datenbank-Engine. JDBC und SQL sind die wichtigsten APIs für Programmierer.

Eine weitere Kernkomponente, die die Java-DB unterstützt, ist der Derby-Netzwerkserver. Der Netzwerkserver erweitert die Reichweite der Derby-Datenbank-Engine durch Bereitstellung traditioneller Client-Server-Funktionalität. Der Netzwerkserver ermöglicht Clients die Verbindung über TCP/IP unter Verwendung des Standard-DRDA-Protokolls. Außerdem kann die Derby-Engine so JDBC, ODBC/CLI, Perl und PHP im Netzwerk unterstützen.

Derby bringt drei nützliche Utilities mit: ij, dblook und sysinfo.

Wie funktioniert das Multithreading?

Wenn eine Anwendung mithilfe des Embedded-Derby-JDBC-Treibers auf die Derby-Datenbank zugreift, läuft die Derby-Engine nicht in einem separaten Prozess. Deshalb gibt es auch keine separaten Datenbankprozesse, die gestartet und beendet werden müssen. Stattdessen läuft die Datenbank-Engine innerhalb derselben Java Virtual Machine (JVM) wie die Anwendung selbst. Derby wird also faktisch Bestandteil der Anwendung, so wie jede andere jar-Datei, die die Anwendung benutzt.

Derby unterstützt mehrere Verbindungen zu einer vorhandenen Datenbank. Ein Beispiel für eine eingebettete Anwendung, die simultane Benutzer verwaltet, ist ein Tomcat- oder Geronimo-Anwendungsserver, der Derby integriert. Eine beliebige Zahl von Benutzern kann Webanwendungen ausführen, die über diesen Webserver auf eine Datenbank zugreifen. Dabei darf nur eine JVM diese Datenbank booten ("öffnen"), so dass mehrere Anwendungen, die in unterschiedlichen JVMs ausgeführt werden, nicht auf dieselbe Datenbank zugreifen können.Um das DBMS verwenden zu können, muss man zuerst Java-DB vom Sun-Entwicklernetzwerk herunterladen[3]. Die aktuelle binäre Distribution bringt alles mit, was gebraucht wird, um mit eingebetteten Datenbankanwendungen zu arbeiten.

Ist die Distribution heruntergeladen, enthält die Verzeichnisstruktur von Java-DB die folgenden Unterverzeichnisse: demo, frameworks, javadoc, docs und lib.

Hinweis:Informationen zu den einzelnen Bibliotheken finden sich in der Java-DB-Dokumentation.

Für eine eingebettete Datenbankanwendung wird hier nur die Bibliotheksdatei derby.jar verwendet. Um Java-DB für Entwicklungszwecke zu installieren, muss die Datei derby.jar in den Klassenpfad der Anwendung aufgenommen werden.

Nach der Installation der binären Distribution und dem Hinzufügen von derby.jar zum Klassenpfad lässt sich Java-DB genauso wie jede andere JDBC-kompatible Datenbank verwenden. Falls Java 6 bereits installiert ist, reicht es, die Datei derby.jar einfach dem Standard-Klassenpfad hinzuzufügen. Um mit der Verwendung des DBMS zu beginnen, wird der JDBC-Treiber geladen. Die Treiber für Java-DB sind in der Datei derby.jar enthalten, so dass man nichts zusätzlich herunterladen muss. Um den Treiber zu laden, verweist man auf ihn mit der Methode Class.forName. Der Name des eingebetteten Treibers lautet org.apache.derby.jdbc.EmbeddedDriver. Er lässt sich wie jeder andere JDBC-Treiber laden:


Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

Soll eine Verbindung vom Treibermanager abgerufen werden, übergibt man einfach einen URL-String, der die Datenbank identifiziert, sowie eine Reihe von Eigenschaften, die die Interaktion der Verbindung mit der Datenbank regeln. Meistens werden diese Eigenschaften dazu verwendet, einer Verbindung einen Benutzernamen sowie ein Passwort zuzuordnen. Der URL-Bestandteil dbName identifiziert eine bestimmte Datenbank. Eine Datenbank kann sich an vielen Stellen befinden: zum Beispiel im aktuellen Arbeitsverzeichnis, in einer jar-Datei, in einem speziellen Heimatverzeichnis der Java-DB-Datenbank, in einem separaten Speicherort des Dateisystems oder im Klassenpfad.

Die einfachste Möglichkeit, den Speicherort der Datenbank in einer eingebetteten Umgebung zu verwalten, besteht darin, die Systemeigenschaft derby.system.home festzulegen. Diese Eigenschaft verrät Java-DB das standardmäßige Heimatverzeichnis aller Datenbanken. Die optionale propertyList ist eine Liste von Eigenschaften, die man dem Datenbanksystem übergeben kann. Eigenschaften lassen sich dem Java-DB-System entweder über die URL oder als separates Eigenschaften-Objekt übergeben. Wenn Eigenschaften Bestandteil der URL sind, sollte ein Semikolon (;) jeder Eigenschaft vorausgehen. Hier die am häufigsten verwendeten Eigenschaften:


create=true
databaseName=nameOfDatabase
user=userName
password=userPassword
shutdown=true

Sobald die Anwendung festgestellt hat, wo sich alle Datenbanken befinden, kann man eine Datenbankverbindung abrufen:

Auf diese Weise lässt sich also diese kompakte Datenbank nutzen, die direkt in die Anwendung eingebunden ist.

URLs in diesem Artikel:
[1] = http://developers.sun.com/javadb/
[2] = http://db.apache.org/derby/
[3] = http://developers.sun.com/javadb/downloads/