Java ist auch eine Insel

Freitag, Februar 17, 2006

Insel: Dateiattribute verändern

Zu den Anfragemehtoden canXXX() kann ein File-Objekt auch Dateiattribute
verändern, wobei viele Methoden seit Java 6 neu sind.


class java.io.File

implements Serializable, Comparable<File>

boolean setReadOnly()

Setzt die Datei auf nur-lesend. Liefert »wahr«, wenn die Änderung möglich war.

boolean setExecutable( boolean executable, boolean ownerOnly )

boolean setReadable( boolean readable, boolean ownerOnly )

boolean setWritable( boolean writable, boolean ownerOnly )

Setzt das Recht zum Ausführen/Lesen/Schreiben der Datei. Ist ownerOnly true,
gilt das Recht nur für den Benutzer, sonst für alle.

boolean setExecutable( boolean executable )

boolean setReadable( boolean readable )

boolean setWritable( boolean writable )

Aufruf von setXXX() mit zweiten Argument true.


Beispiel Lege eine neue temporäre Date an und teste das Lesen und Verändern
des Lese-Schreib-Attributs. Nach dem Test lösche die Datei wieder.


File f = File.createTempFile( "bla", "blub" );

System.out.printf( "readable=%s, writable=%s%n", f.canRead(), f.canWrite() );

f.setReadOnly();

System.out.printf( "readable=%s, writable=%s%n", f.canRead(), f.canWrite() );

f.setWritable( true );

System.out.printf( "readable=%s, writable=%s%n", f.canRead(), f.canWrite() );

f.deleteOnExit();


Die Ausgabe ist:


readable=true, writable=true

readable=true, writable=false

readable=true, writable=true


setLastModified() und die setXXX() sind die einzigen Funktionen, die auf dem
Datei-Objekt wirklich eine Änderung ausführen. Insofern muss die Aussage von Sun
in der API-Dokumentation genau genommen werden: “Instances of the File class are
immutable; that is, once created, the abstract pathname represented by a File
object will never change“. Nur der Dateiname ist immutable, aber nicht die
Zustände.

AddThis Social Bookmark Button

Donnerstag, Februar 16, 2006

Inselraus: Die Datenbank Derby

Derby (http://db.apache.org/derby/) ist ein pures Java-RDBMS unter der freien Apache-Lizenz. Die Datenbank geht auf Cloudscape zurück, was IBM Mitte 2004 auf der LinuxWorld in San Francisco der Apache Software Foundation übergeben hat. (1999 übernahm Informix Software Inc.XE "Informix Software Inc." die Datenbank Cloudscape von Cloudscape Inc., doch IBM übernahm die Datenbanktechnologien von Informix im Jahre 2001.) Ein großer Vorteil von Derby sind neben dem geringen Speicherbedarf die Transaktionsunterstützung, Trigger und SQL-Kompatibilität mit DB2.

Download und Vorbereitung

Auf der Download-Seite befinden sich drei Archive, wovon wir eine Datei mit der Endung -bin beziehen (etwa db-derby-10.1.1.0-bin.zip) und auspacken. Wir nehmen zu Testzwecken c:\Programme\derby an, sodass in C:\Programme\derby\frameworks\NetworkServer\bin die Skripte zum Starten und Stoppen des Servers zu finden sein sollten.

Derby lässt sich in zwei Modi fahren: als eingebettetes Datenbanksystem und als Netzwerkserver. Im Fall eines eingebauten Datenbanksystems ist lediglich die Klasse für den eingebetteten Treiber zu laden und die Datenbank zu bestimmen, schon geht’s los:

Class.forName( "org.apache.derby.jdbc.EmbeddedDriver" );
Connection con = DriverManager.getConnection( "jdbc:derby:OpenGeoDB;create=true" );

Wir wollen Derby als Netzwerkserver starten, um mit unterschiedlichen Clients – etwa einem Eclipse-Plugin – auf die Datenbank zugreifen zu können. In diesem Modus horcht Derby über TCP/IP an einem Port (standardmäßig 1527) auf eingehende Verbindungen.

Vor dem Start muss die Umgebungsvariable JAVA_HOME gesetzt sein, und DERBY_INSTALL auf das Installationsverzeichnis zeigen. Zunächst gehen wir in startNetworkServer.bat und setzen dort die nötigen Umgebungsvariablen:

Listing 20.1 startNetworkServer.bat

...
@REM -- This file for use on Windows systems
@REM ---------------------------------------------------------

@echo off
set JAVA_HOME=C:\Programme\Java\jdk1.5.0
set DERBY_INSTALL=C:\Programme\derby\

...

Ebenso setzen wir in startNetworkServer.bat die Umgebungsvariablen passend, da wir den Server auch wieder stoppen wollen.

Server-Start und weitere Tools

Nun lässt sich – etwa mit Doppelklick – das Skript startNetworkServer.bat starten, und die Datenbank quittiert freundlich:

Der Server ist bereit, am Port 1527 Verbindungen zu akzeptieren.

Das Programm sysinfo zeigt Versionsnummer und Klassenpfad an. Mit dem interaktiven Werkzeug ij lassen sich SQL-Anweisungen abschicken und so die ersten Versuche mit der Datenbank aufnehmen. dblook extrahiert das Datenbankschema.

JDBC-Treiber

Für einen JDBC-Zugriff ist ein JDBC-Treiber nötig, der bei Derby für eine Client-/Server-Kommunikation nicht dabei ist, denn Derby nutzt die Distributed Relational Database ArchitectureXE "Distributed Relational Database Architecture" (DRDAXE "DRDA"), die auch DB2 verwendet. DRDA ist eine von der Open GroupXE "Open Group" definierte Möglichkeit, von einem Client eine entfernte relationale Datenbank anzusteuern. Auf http://www-128.ibm.com/developerworks/db2/downloads/jcc/ ist die Datei db2jcc_for_derby.zip aufgeführt, die – nach einer Registrierung – auf der nächsten Seite unter »Released product: IBM Cloudscape (IBM DB2 JDBC Universal Driver, for Cloudscape/Derby)« heruntergeladen werden kann. Die beiden Jar-Dateien aus dem Archiv, db2jcc.jar und db2jcc_license_c.jar, sind in den Klassenpfad aufzunehmen. Für den Client-/Server- Modus von Derby benötigen wir keine weiteren Jar-Dateien, insbesondere keine aus dem lib-Verzeichnis von Derby.

AddThis Social Bookmark Button