Einfache Objektpersistenz mit Netminds Persistence for Java

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:

Erstellen eines Projekts

Ich habe zum Ausprobieren Eclipse verwendet.

  1. Neues Java Projekt erstellen
  2. „lib/“ Verzeichnis anlegen
  3. Die Libraries netmind, log4j und java-cup-11-runtime sind im Download von Net Persistence dabei. Diese ins „lib/“ Verzeichnis kopieren.
  4. Den JDBC-Treiber (ev. den für MySQL) auch in dieses Verzeichnis.
  5. Rechtsklick auf das Projekt -> Properties -> Java Build Path -> Libraries -> Add JARs und alle Libs hinzufügen.
  6. Eine Datenbank und einen DB-Benutzer erstellen. Schema braucht es keines.

Quirks:

Beim Start gabs bei mir folgende Meldung:

Exception in thread "main" hu.netmind.persistence.StoreException: there are multiple network interfaces, but no recognizable preferred subnetwork ip

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:

package ch.baden.Modul223.LA1002;

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:

package ch.baden.Modul223.LA1002;

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;
    }
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.