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
- Ä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; }
}
Links #
- Kategorien
- KategorieJava