March 20, 2008

JavaDB in 5 Schritten

Für einen ersten Test mit der JavaDB (früher Apache Derby, davor IBM sowie Cloudscape) habe ich ein bestehendes Oracle/Postgres-Schema mit etwa 60 Tabellen übertragen.
Das ging erfreulich unkompliziert. Ebenso der anschließende Zugriff über Hibernate.
Angepasst werden mussten lediglich:
  • die ID-Vergabe aus Hibernate (statt Sequenzen nun Identity-Felder, durch Ableiten der SQL-Dialekte kann weiterhin mit bestehenden Entity-Annotations gearbeitet werden).
  • die JavaDB mag in Scripten keine NULL-Keywords hinter den Columns (NOT NULL fkt. selbstverständlich)

1. Der Server kann durch die mitgelieferten Batchdateien gestartet werden. Das Setzen der Umgebungsvariablen DERBY_HOME ist gar nicht nötig.
Im Falle von Windows:
startNetworkServer.bat im Verzeichnis javadb\bin

2. Anlegen einer Datenbank mit dem Kommandozeilentool "ij":
connect 'jdbc:derby://localhost:1527/c:/JavaDB/db/myDB;create=true';

3. Beispiel zum Ausführen eines Scripts über ij:
run 'c:\JavaDB\createDatabase.sql';

4. JDBC-Connections
Der Treiber für den Client/Server-Betrieb ist org.apache.derby.jdbc.ClientDriver, für den Embedded-Mode org.apache.derby.jdbc.EmbeddedDriver.
Für User + Passwort interessiert sich die JavaDB offenbar erst nach entsprechender Konfiguration.

5. Shutdown
Im Embedded-Mode erfolgt ein ordnungsgemäßes Herunterfahren durch Anfordern einer Connection:
DriverManager.getConnection("jdbc:derby:;shutdown=true");
Eigentümlicherweise bedankt sich die JavaDB dabei standardmäßig mit einer Exception (Error-Code 50000).

Weiteres:
  • Für den Embedded-Mode ist die Datenbank sofort nach Anfordern einer Connection über den DriverManager betriebsbereit.
  • Ohne weitere Änderungen werden nur lokale Verbindungen akzeptiert. Dies kann durch Ergänzen der Batchdatei mit folgendem Startparameter geändert werden:
  • (... ) org.apache.derby.drda.NetworkServerControl start -h 0.0.0.0
  • In URLs für den Embedded-Treiber entfällt die Host-Angabe (z.B.: jdbc:derby:c:/JavaDB/db/myDB)
  • Hilfestellung gibt ij durch das help-Kommando

Schließlich zur interessanten Frage: was ist mit der Performance ?
Nun, der Mythos von der Langsamkeit von Java wird mit einer in Java geschriebenen Datenbank sicherlich auch nicht aussterben.
Wie auch immer, der erste Eindruck ist gut (einige Suchanfragen über 10000 Artikelsätze mit Joins und Subselects).
Besonders interessant ist auf jeden Fall der Embedded-Mode für unkomplizierte Auslieferungen als Teil von Datenbank-Anwendungen oder für einen autarken JUnit-Testbetrieb.

1 comment:

  1. Hi Stefan,

    ist einfach smart, und ja, ermöglicht ein solides Framework für einen schnellen und professionellen Zugriff auf Daten, vornehmlich in einer RC-Umgebung.

    Selbiges konnte man schon mit HSQLDB erreichen (sogar recht performant), mich wundert diese Inititaive von Sun daher. Oder wollte man Cloudspace damit "wiederbeleben"?

    ciao Jürgen

    ReplyDelete