Um einen weiteren komplexen und fehleranfälligen Teil unter meine Applikationen zu schieben, wollte ich Objektpersistenz mal ausprobieren. Es gibt da verschiedene Möglichkeiten:
- Objektorientierte DB
- Persistenzframework bzw Mapper auf eine relationale DB
Für Java gibts da die Schwergewichte Hybernate und JDO (bspw. mittels JPOX), die mir aber für ein kurzes Schnuppern zu schwergewichtig waren. Ich habe mich für Netminds „Persistence for Java“ entschieden. Nachtrag: Das Projekt wurde umbenannt und heisst nun Beankeeper.
Bestehende Unterlagen:
- BeanKeeper Tutorial: Wichtige Teile des Codes sind aber nicht abgedruckt, imports, etc…
- BeanKeeper Dokumentation: Hier habe ich leider mehr über Ant gelernt als über Persistence
- IBM Tutorial: Hier kann der Quellcode nicht runtergeladen werden? 404? Bei IBM????
Erstellen eines Projekts
Ich habe zum Ausprobieren Eclipse verwendet.
- Neues Java Projekt erstellen
- „lib/“ Verzeichnis anlegen
- Die Libraries netmind, log4j und java-cup-11-runtime sind im Download von Net Persistence dabei. Diese ins „lib/“ Verzeichnis kopieren.
- Den JDBC-Treiber (ev. den für MySQL) auch in dieses Verzeichnis.
- Rechtsklick auf das Projekt -> Properties -> Java Build Path -> Libraries -> Add JARs und alle Libs hinzufügen.
- Eine Datenbank und einen DB-Benutzer erstellen. Schema braucht es keines.
Quirks:
Beim Start gabs bei mir folgende Meldung:
Ein Blick auf den Quellcode ergab, dass er in /java/hu/netmind/persistence/node/NodeServer.java, Zeile 151 irgendwie alle Interfaces durchgeht und nur eines auswählt wenn es mit „10.“ oder „192.“ beginnt. Meines beginnt mit 172. und so musste ich das in dieser Quelldatei ergänzen. Ant und Maven treiben mir den Angstschweiss auf die Stirn, aber ein simples „ant“ im Basisverzeichnis des Downloads hat mir eine neue Lib gemacht. Super!
Code
Hier der Code… Als Resultat sollte er komplett und verständlich sein….
AddressStarter.java:
import hu.netmind.persistence.Store;
import java.util.*;
public class AdressStarter {
public static void main(String[] args) {
Store store = new Store("com.mysql.jdbc.Driver",
"jdbc:mysql://localhost/persistence?user=persistence&password=persistence");
Address myAddress = new Address("Sarg", "Skaldrom Y.", "000-000");
store.save(myAddress);
List addresses = store.find("find Address");
System.out.println("Total results: " + addresses.size());
for (Object object : addresses) {
Address bean = (Address) object;
System.out.println(bean.toString());
}
}
}
Address.java:
public class Address {
private String name;
private String vorname;
private String nummer;
public Address(String name, String vorname, String nummer) {
super();
this.name = name;
this.vorname = vorname;
this.nummer = nummer;
}
public Address() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNummer() {
return nummer;
}
public void setNummer(String nummer) {
this.nummer = nummer;
}
public String getVorname() {
return vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
public String toString() {
return this.name + " " + this.vorname + "/" + this.nummer;
}
}