Archiv für das Tag 'persistenz'Seite 2 von 2

Zu neuen Ufern: Java Persistence API 2.0

Im Zuge der noch druckfrischen Java Enterprise Edition 6 hat auch der Persistenz-Standard JPA wesentliche Ergänzungen erfahren. Die erste Spezifikation des Java Persistence APIs wurde im Mai 2006 fertiggestellt und liegt damit mehr als drei Jahre zurück. Die Einfachheit des Programmiermodells und die Ausdrucksstärke der Abfragesprache haben diese Mapping-Technologie seither zum Erfolg geführt. In manchen Projekten war allerdings festzustellen, dass einige Features nur unter Umgehung des Standards zu erzielen waren. Zweifel an einer einfachen Austauschbarkeit der Mapper-Implementierung entstanden. Die zweite Version des Java Persistence API kann diese Bedenken weitgehend zerstreuen…

Lesen Sie den vollständigen Artikel hier:
Download DatabasePro, Ausgabe 6/2009, S. 68 - 72

O/R-Mapping ohne Schnickschnack

Zwischen der Flexibilität reinen SQLs und der Mächtigkeit ausgewachsener O/R-Mapper existiert eine kleine Bibliothek, die es beinahe in das JDK 6 geschafft hätte: EoD SQL (Ease of Development SQL). Die Idee hinter EoD SQL ist so genial wie einfach: Der Nutzer annotiert ein Java-Interface mit SQL-Statements und die Bibliothek liefert mittels eines Java-Reflection-Proxys eine Implementierung dieses Interfaces zur Benutzung:

public interface NutzerMgmt extends BaseQuery {

  @Select("SELECT COUNT(*) FROM USER")
  long ermittleNutzerAnzahl();

}

Folglich die Benutzung :

Connection c = … ;

NutzerMgmt nutzerMgmt = QueryTool.getQuery(c, NutzerMgmt.class);

try {

  long anzahl = nutzerMgmt.ermittleNutzerAnzahl();

} finally {

  nutzerMgmt.close(); // schließt ebenfalls die Connection

}

Möchte man das Gleiche mit reinem SQL erreichen, so ist der Code ungleich komplizierter:

‘O/R-Mapping ohne Schnickschnack’ weiterlesen

Objektorientiertes SQL: Die Java Persistence Query Language

Die Java Persistence API Spezifikation zerfällt für den Anwender in drei große Bereiche: Die Mapping-Spezifikation für die Abbildung von Klassen auf Tabellen, das API für den Umgang mit persistenten Objekten und eine Abfragesprache zum zielgerichteten Laden größerer Objektmengen.

Der Spezifikationsgruppe hinter JPA ist mit der Abfragesprache ein kleines Meisterstück gelungen. Mit den erweiterten Möglichkeiten der Sub-Selektionen und Aggregat-Funktionen sieht die Sprache zwar aus wie SQL, funktioniert aber in sich streng objektorientiert.

Lesen Sie den vollständigen Artikel hier:
Download DatabasePro, Ausgabe 1/2009, S. 36 - 42

‘Objektorientiertes SQL: Die Java Persistence Query Language’ weiterlesen

JDO-JPA-Migrationsstrategien

Wäre dieser Artikel vor fünf Jahren entstanden, dann wäre die Migrationsrichtung der meisten Projekte sicherlich diese: Weg vom reinen JDBC oder weg von Container-Managed-Persistence hin zu JDO. Im Jahre 2003 erscheint mit JDO 1.0.1 ein Jahr nach der Verabschiedung von JDO 1.0 das erste kleinere Update der Spezifikation, welches auf Jahre hin die Basis einer Hand voll kommerzieller O/R-Mapper-Implementierungen bildet. JDO war damals aus architektonischer Sicht, wenn auch manchmal leicht polarisierend, die erste Wahl für die Persistenzstrategie einer Java-Enterprise-Anwendung. Im Vertrauen auf den Standard wurde eine JDO-Implementierung auch gerne anderen kommerziellen, aber nicht-standard-konformen O/R-Mapping-Frameworks vorgezogen. Heute, im Jahr 2008 sieht die Situation anders aus: Auch wenn JDO 2.0 die heute fortschrittlichste O/R-Mapping-Spezifikation für Java darstellt, kann das Interesse an ihr kaum geringer sein. Neue Projekte, die JDO den Vorzug geben, gibt es faktisch nicht mehr und in bestehenden Projekten ist ein gewisser Migrationsdruck weg von JDO zu verspüren. Wie eine solche Migration möglichst reibungslos vonstatten gehen kann, versucht dieser Artikel im Folgenden aufzuzeigen.

‘JDO-JPA-Migrationsstrategien’ weiterlesen

Inszenierte Transparenz

Werden heute Java-Enterprise-Anwendungen entworfen, so muss als eine der ersten Entscheidungen die Art der Persistenz geklärt werden. Diese Frage bezieht sich dabei weniger auf den Datenspeicher – ein relationales Datenbanksystem kann stillschweigend vorausgesetzt werden – sondern auf den Umgang mit den Daten. Für den Architekten ergeben sich zwei grundlegende Marschrichtungen: Fasst er die Daten der Anwendung als grobgranulare, wenig vernetzte Dateneinheiten auf, so wird er zu einem tabellengetriebenen Ansatz tendieren und vorrangig Entwurfsmuster einsetzen, die dem relationalen Aggregatzustand der Daten geschuldet sind, so beispielsweise Row/Record Sets, Page Iterators oder Data Access Objects. Sieht der Architekt hingegen die Daten der Anwendung als feingranulare, stark vernetzte Entitäten an, so ist er mit einem objektorientierten Ansatz besser beraten. Da die Daten trotz objektorientierter Sichtweise in einer relationalen Datenbank landen, gilt es hier eine Brücke zwischen beiden Welten zu schlagen. Der Unterschied, oft verharmlosend als Impedanz-Unterschied bezeichnet, ist jedoch wohl bekannt und technisch beherrschbar [1].

Als Vermittler zwischen beiden Welten existieren Frameworks, die ein objekt-relationales Mapping realisieren, ohne dass der Anwendungscode davon berührt wird. Aus Sicht des Anwendungsentwicklers handelt es sich bei dem Datenbestand der Anwendung also um einfache Objekte, die Attribute besitzen, zueinander Assoziationen eingehen oder Eigenschaften vererben. Auch das Laden, Speichern, Aktualisieren oder Sperren von Objekten geschieht ohne gesonderte Mitwirkung des Anwendungsentwicklers. Objektorientiert sind ebenso Operationen auf den persistenten Objekten oder das Suchen nach persistenten Objekten in der Datenbank. Obwohl seitens der Datenbank weiterhin alles so aussieht, als ob es nach bester ERM-Manier modelliert worden wäre.

Diese enorme Abstraktion von der Speicherform der Daten bekommt man allerdings nicht zum Nulltarif. Neben architektonischen Regeln, die eingehalten werden müssen, damit sich der Zauber der Speicher-Transparenz tatsächlich einstellt, ist ein aufwändiges, explizites Mapping von Klassen auf Relationen vorzunehmen. Der hingegen oft kolportierte Performance-Verlust bei der Verwendung besagter Mapping-Frameworks, das sei nebenbei bemerkt, ist oft mehr gefühlt als real vorhanden. Aus Sicht der Gesamtanwendung ist er fast nie nachweisbar.

Sowohl hinsichtlich des Mapping-Verfahrens als auch hinsichtlich der architektonischen Spielregeln lässt sich festhalten, dass diese gut verstanden sind. Es ist sogar möglich, diese zu katalogisieren, um so einen Kanon des O/R-Mappings aufzustellen. Zu den allgemeinen Mustern lässt sich für jedes verfügbare O/R-Mapping-Framework dann präzise die konkrete Anwendung demonstrieren. Genau diese Absicht verfolgen wir mit dem Projekt OOPEX.

‘Inszenierte Transparenz’ weiterlesen

Seiten: zurück 1 2