© Excellent backgrounds/Shutterstock.com
Polyglot Persistence wird möglich - mit EclipseLink

Missing Link


Die Verwendung mehrerer Programmiersprachen in einem Projekt ist heute weit verbreitet, und Alternativen zu relationalen Datenbanken werden immer beliebter. Polyglot Persistence [1] hingegen steckt noch in den Anfängen. Mit der neuesten EclipseLink-Version können traditionelle und moderne Speicherarten einheitlich verwendet werden. Hier werden die neuen Möglichkeiten mit Beispielcode vorgestellt.

Persistenzframeworks wie EclipseLink helfen, so unterschiedliche Welten wie Objekte und Tabellen zu verbinden. Doch mit NoSQL-Datenbanken sind neue Gräben hinzugekommen. Der Markt der NoSQL-Datenbankprodukte entwickelt sich sehr dynamisch und wird weniger von Standards als von Produktinnovationen getrieben. In die neue NoSQL-Welt möchte man bestehendes Wissen und Vorgehen mitnehmen, ohne sich in zu große Abhängigkeiten zu begeben. Dafür bietet die neue EclipseLink-Version 2.5 gute Möglichkeiten. Sie ist auch die Referenzimplementierung des Java Persistence API 2.1 (JPA 2.1, JSR 338) für die Java-EE-7-Spezifikation. Die Ursprünge von EclipseLink liegen bei Top­Link, das 2008 von Oracle an die Eclipse Foundation übergeben wurde. Neben JPA unterstützt es Object XML Bindings mit Java Architecture for XML Binding (JAXB) 2.2 (JSR 222) oder Service Data Objects (SDO) 2.1.1 (JSR 235) und so genannte Database Web Services mit JAX-WS 2.2 oder JAX-RS 2.0.

pientka_1.tif_fmt1.jpgAbb. 1: EclipseLink-Architektur (EPL) [2]

Wir erstellen zunächst die vier Entities COrder, OrderLine, Customer und Address aus dem EclipseLink-NoSQL-Beispiel [3]. In einem Kundenauftrag sind mehrere eingebettete Auftragspositionen, und ein Kunde hat eine eingebettete (@Embeddable) Lieferadresse. Wir erstellen zunächst die Entitäten für die relationale Apache-Derby-Datenbank ganz normal mit JPA. Exemplarisch ist hier die Entität COrder gezeigt, die die eingebettete Lieferadresse enthält. Für die Erzeugung des Primärschlüssels verwenden wir die Annotation @ UuidGenerator(name="_id") und den Feldnamen _id. Diese Klassen wollen wir mit möglichst wenig Aufwand statt mit Derby mit der sehr beliebten dokumentenorientierten Datenbank MongoDB erstellen (Listing 1 und 2).

Listing 1: Die JPA-Enitität „COrder“

@Entity @UuidGenerator(name="_id") public class COrder implements Serializable { @Id @GeneratedValue (generator="_id") private String id; @Version private long version; @Basic private String description; @Basic private double totalCost = 0; @Embedded private Address shippingAddress; @ElementCollection private List<OrderLine> o...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang