JPApi #

Soll eine Bibiothek für eine "Java Persistenz API" werden, die flach und einfach ist,

Ziele, die man erreichen sollte #

  • kompatibel mit JDK >= 1.5
  • wenige bis hin zu gar keinen Abhängigkeiten
  • Möglichst wenig Konfiguration
  • Annotationen an der vorhandenen API von Sun orientieren
  • unsere API an der API von Sun orientieren
  • kurze Ladezeit (im Vergleich z.B. zu Hibernate)
  • so weit wie möglich Nutzung vorhandener APIs (z.B. BeanInfo, PropertyDescriptor, Collections wie List oder Set, etc.)

Features #

  • Mapping
  • Caching (PREPARED Statement)
  • Connection POOL
  • Konfiguration durch Java Quellcode, Konventionen, Annotationen, Konfigurationsdateien, vorhandene Datenbank (in dieser Reihenfolge)
  • Im Normalfall stehen alle Eigenschaften einer Bean in einer einzigen Datei (im Java-Quelltext)
  • automatische Erstellung von GUIs (Web und Swing)
  • Arbeit mit mehreren Datenbanken gleichzeitig (mit übergreifenden Fremdschlüsseln)
  • Caching von Metainformationen

Observer-Pattern (Wikipedia) #

  • Änderungen werden direkt in der Datenbank gemacht
  • Die Observer-Funktionalität sollte automatisch in vorhandene Beans eingebaut werden (läuft übrigens bereits bei ThomasBayen mit BCEL)
  • Es sollte möglich sein, den Observer auch selbst zu implementieren (ganz ohne BCEL) - das macht dessen Funktionsweise transparenter.

Design-Entscheidungen #

Hier möchte ich kontroverse Dinge sammeln bzw. Entscheidungen dokumentieren, die nicht sofort offensichtlich sind.

Wie direkt ist die Verbindung zur Datenbank? #

Eine Möglichkeit ist es, unabhängige Beans (mit Fremdschlüsseln ggf. einen Beanbaum) zu laden. Diese werden dann frei bearbeitet und werden mit einer update-Methode wieder zurückgeschrieben. Das andere Extrem ist es, wenn jeder getter und setter der Bean direkt auf einen SQL-Befehl gemappt wird. Zwischenlösungen sind denkbar. Für verschiedene Probleme sind verschiedene Bindungsstärken sinnvoll. Was sollte nun wirklich implementiert werden?

Was ist eine Bean? #

  • BCEL nutzen um Klassen zu bearbeiten, Event handling
public class Bean {

    private Feld a;

    public Feld getA()  { return a; }
    public setA(Feld b) { a = b;   }
}


Kategorien
KategorieJava