Netbeans#

Netbeans ist eine Software-Entwicklungsumgebung für die Programmiersprache Java.

Mittlerweile gibt es viele Erweiterungen, die es ermöglichen, Netbeans auch für andere Programmiersprachen zu nutzen.

JensKapitza hat einen Vergleich von Netbeans und Eclipse begonnen.

Mit anderen Datenbanken arbeiten#

Ich arbeite gerne mit HSQL, weil das erstens komplett in Java ist und somit keine weitere Software (kein Datenbank-Server) installiert werden muss und weil es die Speicherung von Daten in einfache Files erlaubt. Wie binde ich das nun ein?

Im View "Services" gehe ich im Baum auf "Drivers" und wähle im Kontextmenü "new Driver" aus. Dann brauche ich eigentlich nur anzugeben, wo die Datei "hsqldb.jar" liegt und alles andere erklärt sich fast schon von alleine. Schön! Ich bin auf den neuen Eintrag "HSQLDB" gegangen und über das Kontextmenü und "Connect Using..." habe ich eine neue Verbindung erzeugt. Als URL kann man bei hsqldb z.B. "jdbc:hsqldb:file:datenbank" probieren.

Leider hatte ich ein paar kleinere Probleme, von denen ich bisher nicht sagen kann, ob diese nur mit hsqldb auftreten. Man muss auf jeden Fall das Schema "PUBLIC" angeben. Ausserdem tauchten die Datenbank-Verbindungen erst nach einem Neustart von Netbeans im Baum auf. Später muss man darauf achten, die Verbindung immer zu schliessen - ein Zugriff gleichzeitig durch mehrere Instanzen (z.B. Netbeans und meine Applikation) ist nämlich bei einer "file:..." URL logischerweise nicht erlaubt. Auch ist es ggf. sinnvoll, den Pfad "datenbank" absolut anzugeben, weil der Netbeans-Treiber die Datei sonst im Home-Verzeichnis anlegt, während die Applikation sie später in ihrem eigenen Verzeichnis sucht.

generierter Code bei der Anlage eines neuen Projektes#

Netbeans kann bei der Projekterstellung u.a. eine komplette kleine Datenbank-Anwendung für eine einzelne Tabelle erzeugen. Dieser erzeugte Code ist ein hübsches Beispiel dafür, wie die Leute von Sun sich das denken, mit Dingen wie JPA (Persistenz), Swing (GUI) und deren Bindung (Beansbinding) umzugehen.

Ich habe es übrigens ohne grosse Hürden geschafft, ein solches von Netbeans erzeugtes Projekt in Eclipse zu laden und auszuführen. Dazu waren lediglich ein paar verwendete Bibliotheken ausfindig zu machen und einzubinden.

Im erzeugten Code die JPA-Bibliothek austauschen#

Dann habe ich den von Netbeans benutzten Persistenz-Provider von "toplink" ausgetauscht durch Apache OpenJPA. Das ging folgendermassen: Ich habe die beiden eingebundenenen Bibliotheken

  toplink-essentials
  toplink-essentials-agent

entfernt und dafür aus dem von http://openjpa.apache.org heruntergeladenen ein paar hinzugefügt:

  commons-collections-3.2.jar
  commons-lang-2.1.jar
  geronimo-jpa_3.0_spec-1.0.jar
  geronimo-jta_1.1_spec-1.1.jar
  openjpa-1.1.0.jar
  serp-1.13.1.jar

Danach musste die persistence.xml-Datei angepasst werden. Die Angabe des <provider>-Tags habe ich komplett weggelassen (man kann dort die Klasse des openjpa-Providers angeben, aber wenn man gar nichts angibt, nimmt er den einzigen vorhandenen automatisch; so sollte die Datei später wahlweise mit beiden JPA-Bibliotheken arbeiten können. Dann habe ich zusätzliche Properties angegeben wie in der OpenJPA Doku angegeben, um die Parameter der Datenbankverbindung anzugeben. Auch hier sollte man die alten Properties stehen lassen können, um ggf. beide Bibliotheken nutzen zu können.

Im Prinzip lief das Programm nun schon. Allerdings kam bei der Änderung von Daten eine unschöne Exception:

  java.lang.UnsupportedOperationException: Result lists are read-only.

Hier scheint es eine Besonderheit von OpenJPA zu geben, daß erzeugte Listen nicht beschreibbar sind. Dies konnte ich nach Lesen dieser Mail von der OpenJPA-Liste durch eine kleine Änderung an zwei Stellen im Code leicht beheben. (Man kopiert die Liste einfach einmal, bevor man sie benutzt.)

-- ThomasBayen

Tags:  Java, Netbeans