Objektrelationales Mapping mit EclipseLink und Spring. Stefan Scheidt OPITZ CONSULTING GmbH

Ähnliche Dokumente
Java Persistence API. Phillip Ghadir Oliver Tigges

OR-Mapping. WS2008/2009 DBIS/Dr. Karsten Tolle

Datenbankpraktikum, Gruppe F. JPA mit Hibernate. Alexander Stautner, Harald Zauner, Sascha Schreier

Übungsaufgabe Transaktion als Middleware

Eclipse und EclipseLink

Enterprise JavaBeans Überblick

Datenzugriffskomponente mit JPA 2.1

Rene Böing, Alexander Kuhn, Marc Wilmes Einführung in Spring und Hibernate

OO Programmiersprache vs relationales Model. DBIS/Dr. Karsten Tolle

Hibernate Eine Einführung

Java Persistence API mit Hibernate

Persistenz unter Kontrolle mit JDBI für Java

Softwareentwicklung mit Enterprise JAVA Beans

Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java. Oliver Kalz

Java-Persistenz-Architekturen. Freiberuflicher Entwickler und Autor. DOAG Konferenz 1.12.

EclipseLink: JPA 2.0 und noch mehr

Inhaltsverzeichnis. Bernd Müller, Harald Wehr. Java Persistence API 2. Hibernate, EclipseLink, OpenJPA und Erweiterungen ISBN:

Kapitel 14. Objekt-relationales Mapping (ORM) mit Hibernate bzw. Java Persistance API (JPA) Prof. Dr. Wolfgang Weber Vorlesung Datenbanken

Christian Kühl. Von JDO zu JPA Entwicklung einer Migrationsstrategie

TopLink. das performante und flexible Persistenz- Framework

Polyglot Persistence und NoSQL

Persistenz. Ralf Gitzel


Mit Java von der Datenbank in den Browser Thomas Bröll Principal Consultant Trivadis GmbH, Stuttgart

ADF Persistenzmechanismen

Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk

4. Objektrelationales Mapping Grundlagen der Programmierung II (Java)

EJB 3.0 alles wird einfacher. Stephan Metzler, eurolink SWITZERLAND

Java Forum Stuttgart 2013 twitter.com/kspichale spichale.blogspot.de

Gregor Raschke 2008 HIBERNATE. Eine Einführung

EJB 3 - Ein Blick über den Tellerrand. Heiko W. Rupp <hwr@pilhuhn.de>

Enterprise JavaBeans (mit JBoss)

Multitenancy und JPA Eine Bestandsaufnahme

Java-Persistence-API mit Hibernate

Technische Fachhochschule Berlin, FB VI - Medieninformatik Software Engineering (SE II), 2. Kapitel: Wir bauen uns eine Web-Applikation.

Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

Relationales Datenbankpraktikum

Java Persistence Puzzlers

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Daten Bank. 6. Vorlesung

Spring & Hibernate Eine praxisbezogene Einführung

Spring & Hibernate HANSER. Eine praxisbezogene Einführung. Richard Oates Thomas Langer Stefan Wille Torsten Lueckow Gerald Bachlmayr

JPA mit Hibernate Java Persistence API in der Praxis

Richard Oates Thomas Langer Stefan Wille Torsten Lueckow Gerald Bachlmayr. Spring & Hibernate. Eine praxisbezogene Einführung HANSER

Application Development Framework (ADF) Teil 3: Standardisierte Persistenzmechanismen in Verbindung mit ADF

Hibernate Search. Unterstützung laufender Java Projekte. Perfect Match Rent-a-team Coaching on the project Inhouse Outsourcing

Dennis Schulte / Tobias Flohre codecentric AG. Enterprise Java Batch mit Spring

Übungsaufgaben zur Klausurvorbereitung Datenbanken 2, SoSe 2016

Java Persistence API 2.x. crud + relationships + jp-ql

TopLink. das performante und flexible Persistenz- Framework

Enterprise JavaBeans Überblick

4.2 Workshop EJB. Entwicklung von EJB-Anwendungen

Übung B. JPA Java Persistence API. Prof. Dr. Andreas Schmietendorf 1. Übung B (Exkurs)

EJB 3 - Erfahrungen aus der Praxis. Heiko W. Rupp

BRÜHL MÄRZ

Enterprise JavaBeans Überblick

Hibernate. Vortragender : Nabil Janah Kursleiter : Prof. Dr. Björn Dreher Lehrveranstaltung : Komponenten-Architekturen. Nabil janah 1 Hibernate

Programmierung und Datenbanken II

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi

5.2 Workshop EJB. Entwicklung von EJB-Anwendungen. Das JOnAS-System

Java-Objekte mit SQL verheiraten

Hibernate und Elasticsearch Von 0 auf 100 in 40 Minuten

Vesant JDO Genie für transparente Persistenz mit relationalen Datenbanken.

Persistenz Muster. Muster rund um den Datenbank Zugrif

Auszug aus JAX-WS Folien

Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 39

Handbuch für die Erweiterbarkeit

Daten Bank. 6. Vorlesung

Komponentenorientierte Software-Entwicklung. Seite 1 / 44

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

Criteria API Komplexe SQL-Queries mit Eclipselink bauen 1

G s e a s m a t m ar a ch c i h tek e tur u I und IoC

Continuous Delivery mit Orcas

Tuning the Mobile Server

5. Übung zu Software Engineering

.NETUser. René Leupold Patrick Weibel. Group Bern. Follow dnugbe on twitter

Probleme bei der Nutzung der Bean Validation in JPA

Der Tiger im Tank: PL/SQL-Logik in Java-Anwendungen optimal nutzen

FWP Aktuelle Technologien zur Entwicklung verteilter Java- Anwendungen

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

MyCoRe > V1.0: Technische Weiterentwicklung

Effizienzsteigerung durch Mapping- Tools bei der Integration von RDBMS in Java-Anwendungen

Motivation Grundlagen Technologien Manipulation Ecore Genmodell Demo Persistenz Notification Ausblick GMF Fazit / Quellen

Referent: Marko Modsching. Vortrag: JPA mit Hibernate. Datum: Deutsche Software Engineering & Research GmbH

Datenbanken Objektrelationales Mapping Spezifikation

Axis2, CXF und JAX-WS RI im Vergleich

Integration von Web Services in J EE Anwendungen mit XFire. 1/26 André Janus - Integration von Web Services in J EE Anwendungen mit XFire

Ausgabe: Abteilungen Summe der Fehltage einer Abteilung. Nur für Mitarbeiter deren Fehltage < 3 Nur Abteilungen deren Fehltage-Summe > 1

Kardinalitäten. Komponentenbasierte Software- Entwicklung. Prof. Dr. Stephan Kleuker

Übungen zum Workshop Objektrelationales Mapping mit JPA 2.0

Interface. So werden Interfaces gemacht

Enterprise JavaBeans Überblick: 8. Test-Driven Development. 8.1 Einleitung 8.2 Beispiel 8.3 Anwendung mit Eclipse und dem JBoss Application Server

Spring Dynamic Modules for OSGi Service Platforms

Kardinalitäten. Umsetzung unidirektional 1 : N ( 3 / 4 )

Objektorientierte Datenbanken

Datenbankzugriff aus Eclipse Rich-Client- Anwendungen über das Internet

Transkript:

Objektrelationales Mapping mit EclipseLink und Spring Stefan Scheidt OPITZ CONSULTING GmbH

Ihr Referent Stefan Scheidt Senior Architekt bei der OPITZ CONSULTING GmbH Seit über 10 Jahren im Oracle- und Java-Umfeld tätig Schwerpunkt: Leichtgewichtiges Enterprise-Java Autor für Javamagazin, JavaSPEKTRUM, OBJEKTspektrum Referent auf DOAG, JAX und OOP Email: stefan.scheidt@opitz-consulting.de

Agenda Persistenz in Java Objektrelationales Mapping Java Persistence API und EclipseLink Das Spring Framework EclipseLink und Spring in Aktion Fazit

Persistenz in Java Lebensdauer von Daten in Java-Anwendungen ist kurz

Der Impedance Mismatch Unverträglichkeiten beim Versuch, Objekte auf relationale Tabellen abzubilden

Identität?

Beziehungen?

Vererbung? In Java gibt es Vererbung. In RDBMS nicht.

complete persistence framework that is both comprehensive and universal EclipseLink

EclipseLink Fact Sheet Open-Source-Projekt bei eclipse.org Spende der TopLink Codebase durch Oracle Implementiert JPA 1.0 Support für weitere Standards Ausgewählt als JPA-2.0-Referenz

EclipseLink vs. Oracle TopLink TopLink 11g baut auf EclipseLink 1.0 auf Zusätzlich: Integration mit Oracle Coherence Integration für OC4J 10.1.3 Migrationssupport

EclipseLink und Spring in Aktion

Annotationen Neues Sprachmittel in Java 5 zeichnen Codeelemente aus Beispiel: @Entity public class Item { @Override public String tostring() { return "Item '" + name; } }

Einige grundlegende JPA-Mappings @Entity @Table(name = "CATEGORIES") public class Category { @Id @Column(name = "CTGR_ID") @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Version private Long version; @Basic(optional = false) private String name;...

Beziehungen @Entity @Table(name = "ORDERS") public class Order {... @ManyToOne @JoinColumn(name = "CUST_ID", nullable = false) private Customer customer; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderitems = new ArrayList<OrderItem>(); }...

Vererbung @Entity @Table(name = "BUSINESS_PARTNERS") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn( name = "TYPE", discriminatortype = DiscriminatorType.STRING) public abstract class AbstractBusinessPartner {... } @Entity @DiscriminatorValue("CUSTOMER") public class Customer extends AbstractBusinessPartner {... }

EclipseLink-Erweiterungen EclipseLink stellt viele Ergänzungen bereit: @PrivateOwned @OptimisticLocking @ReturnInsert/@ReturnUpdate @NamedStoredProcedureQuery und viele weitere

@PrivateOwned Für Parent-Child-Beziehungen In Kombination mit @OneToMany oder @OneToOne Kaskadiert insert und delete Durch parent.remove(child) wird child gelöscht

@PrivateOwned @Entity @Table(name = "ORDERS") public class Order { @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) @PrivateOwned private List<OrderItem> orderitems = new ArrayList<OrderItem>(); }...

@OptimisticLocking Erlaubt Konfiguration des Optimistic Locking. Definition: @Entity @Table(name = "CATEGORIES") @OptimisticLocking(type = OptimisticLockingType.ALL_COLUMNS) public class Category {... } Weitere Typen: CHANGED_COLUMNS, SELECTED_COLUMS, VERSION_COLUMN

@ReturnInsert/@ReturnUpdate Nutzt insert/update returning values Sehr nützlich in Kombination mit DB-Triggern @Entity @Table(name = "ORDERS") public class Order { } @Basic(optional = false) @Temporal(TemporalType.DATE) @ReturnInsert private Date orderdate;...

@NamedStoredProcedureQuery Nutzt Stored Procedures für Abfragen. Definition: @NamedStoredProcedureQuery(name = "findcategorybyid", procedurename = "CTGR_Get_Row", resultclass = Category.class, parameters = { @StoredProcedureParameter(name = "P_CTGR_ID", queryparameter = "CTGR_ID", direction = Direction.IN_OUT), @StoredProcedureParameter(name = "P_NAME", queryparameter = "NAME", direction = Direction.OUT), @StoredProcedureParameter(name = "P_DESCRIPTION", queryparameter = "DESCRIPTION", direction = Direction.OUT) })

@NamedStoredProcedureQuery Verwendung: public Category findbyid(long id) { return (Category) entitymanager.createnamedquery("findcategorybyid").setparameter("ctgr_id", id).getsingleresult(); }

Entity Manager Java-Interface javax.persistence.entitymanager Stellt Methode zur Verwaltung von Entitäten bereit Wird von JPA-Provider implementiert

public interface EntityManager { // "insert" public void persist(object entity); // "update" public <T> T merge(t entity); // "delete" public void remove(object entity); // "post" public void flush(); // "find by primary key" public <T> T find(class<t> entityclass, Object pk); // "select" public Query createquery(string qlstring); } //...

Entity Manager bereitstellen In unmanaged environment : mit EntityManagerFactory In managed environment : mit @PersistenceContext

@PersistenceContext public class CategoryDataAccess { } @PersistenceContext private EntityManager entitymanager; public void persist(category category) { entitymanager.persist(category); } //...

Persistence Unit Konfiguration für ein JPA-Environment Definitiert durch META-INF/persistence.xml

<?xml version="1.0" encoding="utf-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"... > <persistence-unit name="sampleunit" transaction-type="resource_local"> <provider>org.eclipse.persistence.jpa. PersistenceProvider</provider> <class>de.opitzconsulting...category</class> <class>de.opitzconsulting...item</class> <properties> <property name="eclipselink.ddl-generation" value="none "/> <property name="eclipselink.logging.level" value="fine"/> </properties> </persistence-unit> </persistence>

EclipseLink Properties EclipseLink stellt viele Parameter zur Verfügung: eclipselink.jdbc.bind-parameters eclipselink.jdbc.batch-writing eclipselink.jdbc.cache-statements eclipselink.jdbc.exclusive-connection.* eclipselink.jdbc.read-/write-connections.* und viele weitere

Typische Architektur Remote Exporter Präsentationsschicht Service Interface Transaktionsgrenzen Service Implementierung DAO Interface Fach Objekte DAO DAO Implementierung DI-Container Datenbank

Spring Application Context Bauplan für die Bestandteile einer Applikation Meist Sammlung von Bean Definitions in XML

Anbindung an die Datenbank <bean id="datasource" class="org...basicdatasource"> <property name="driverclassname" value="oracle.jdbc.oracledriver" /> <property name="url" value="jdbc:oracle:thin:@..." /> <property name="username value="scott" /> <property name="password value="tiger" /> </bean>

Auswahl des JPA-Providers <bean id="eclipselinkjpavendoradapter" class="org.springframework.orm.jpa.vendor. EclipseLinkJpaVendorAdapter"> </bean>

Bereitstellen des Entity Manager <bean id="entitymanagerfactory" class="org.springframework.orm.jpa. LocalContainerEntityManagerFactoryBean"> <property name="datasource ref="datasource" /> <property name="jpavendoradapter" ref="eclipselinkjpavendoradapter" /> </bean>

Transaktionsmanagement <bean id="transactionmanager" class="org.springframework.orm.jpa. JpaTransactionManager"> <property name="entitymanagerfactory" ref="entitymanagerfactory" /> </bean> <tx:annotation-driven /> Wichtig in META-INF/persistence.xml: <persistence-unit name="..." transaction-type="resource_local">... </persistence-unit>

Übersicht

Datenzugriff: Schnittstelle public interface CategoryDao { Category findbyid(long id); List<Category> findall(); void persist(category category); Category merge(category category); void remove(category category); }

Datenzugriff: Implementierung public class CategoryDaoJpaImpl implements CategoryDao { @PersistenceContext private EntityManager em; public List<Category> findall() { return em.createquery( "select c from Category c order by c.name").getresultlist(); } public void persist(category category) { entitymanager.persist(category); }...

Services implementieren public class InventoryServiceImpl implements InventoryService { @Resource private CategoryDao categorydao; @Resource private ItemDao itemdao; @Transactional public void addnewcategory(category category) { categorydao.persist(category); } @Transactional public void addnewitem(item item) { itemdao.persist(item); }...

Übersicht

JPA bietet standardisiertes Programmiermodell für ORM EclipseLink ist JPA Provider und mehr Greift auf > 10 Jahre Praxis mit ORM zurück Erweiterungen dehnen Grenzen für ORM-Einsatz aus Spring bietet managed JPA Environment Unterstützt EclipseLink als Provider

Vielen Dank für Ihre Aufmerksamkeit! Kontakt: stefan.scheidt@opitz-consulting.de