SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
Der Persistenz-Standard
JPA            in der Java EE / SE



       Michael Bouschen
          akquinet AG
 michael.bouschen@akquinet.de
Über meine Person

   	
  

   Architekt und Projektleiter bei akquinet AG Berlin
   Referenzimplementierung JPA 1
   Mitglied JCP Experten Gruppen:
          JPA 2.0, JPA 2.1, JDO 1, JDO 2
   Apache committer JDO TCK
   	
  




                      Copyright © 2013 – akquinet AG    31.01.2013   2
Impedance Mismatch

   	
  
 OO Programmiersprache                            Relationale Algebra
   	
  
   	
  
   	
  
   	
  
   	
  
   	
  
   	
  
   	
  




                 Copyright © 2013 – akquinet AG                 31.01.2013   3
Impedance Mismatch (2)


   Wo ist das Problem?
   ¡  Klasse / Attribut -> Tabelle / Spalte
    àJDBC
   Aber
   ¡  Persistente Identität
   ¡  Relationen
   ¡  Caches
   ¡  Anfragesprache


                    Copyright © 2013 – akquinet AG   31.01.2013   4
OR-Mapper


   Implementierungen (Auswahl)




               Copyright © 2013 – akquinet AG   31.01.2013   5
Persistenz in Java EE

   	
  

   BMP
   CMP (EJB 1 CMP und EJB 2 CMP)
   EJB 3.0: JPA


   JPA: Spezifikation – kein Produkt




                  Copyright © 2013 – akquinet AG   31.01.2013   6
JPA Historie

   	
  
   	
  
   	
  
   	
  
   	
      JPA 1.0                      JPA 2.0          JPA 2.1
   	
     Java EE 5                    Java EE 6       (Public Draft)
   	
  
   	
  
   	
  

          Mai 2006                     Dez 2009         Dez 2012




                      Copyright © 2013 – akquinet AG                    31.01.2013   7
JPA 1.0


   Spezifikation
   ¡  Teil der EJB 3.0 Spezifikation JSR 220
   ¡  Separates Spezifikationsdokument
   ¡  Linda DeMichiel (Sun), Michael Keith (Oracle)
   ¡  Final Release: Mai 2006
   Implementierungen
   ¡  Referenzimplementierung: Oracle TopLink Essentials
   ¡  Hibernate, OpenJPA, TopLink, SAP, JPOX



                   Copyright © 2013 – akquinet AG      31.01.2013   8
JPA 2.0


   Spezifikation
   ¡  Eigenständiger JSR: JSR-317
   ¡  Linda DeMichiel (Sun)
   ¡  Final Release: Dezember 2009
   Implementierungen
   ¡  Referenzimplementierung: EclipseLink
   ¡  Hibernate, OpenJPA, EclipseLink, SAP, DataNucleus




                   Copyright © 2013 – akquinet AG     31.01.2013   9
JPA 2.1


   Spezifikation
   ¡  Eigenständiger JSR: JSR-338
   ¡  Linda DeMichiel (Sun)
   ¡  Public Review: Dezember 2012
   Implementierungen
   ¡  Referenzimplementierung: EclipseLink
   ¡  Hibernate, OpenJPA, EclipseLink, SAP, DataNucleus




                   Copyright © 2013 – akquinet AG     31.01.2013   10
JPA Features


  ¡  POJO-basiertes Persistenzmodell
  ¡  Domainmodell unterstützt Vererbung, Polymorphie, etc.
  ¡  Standardisiertes objekt-relationales Mapping
  ¡  Anfragesprache
  ¡  Standardisiertes (Runtime-)API
  ¡  Verfügbar in Java EE und Java SE
  ¡  Unabhängigkeit von Datenbank und OR-Mapper




                   Copyright © 2013 – akquinet AG       31.01.2013   11
Entity Klassen – POJO


  ¡  Kein Interface notwendig
      (wie z.B. EntityBean)
  ¡  Top-Level Klasse
      (abstrakt oder konkret)
  ¡  Entity und Nicht-Entity Klassen
      in Vererbungshierarchie
  ¡  Objekterzeugung mit new




                    Copyright © 2013 – akquinet AG   31.01.2013   12
Objektrelationales Mapping


   Allgemeines
   ¡  Abbildung Java Klasse ↔ relationale Datenbank
   ¡  Abbildung von Assoziationen
   ¡  Mapping Metadaten als Annotationen oder XML
   ¡  Default Regeln z.B. für Tabellen- und Spaltennamen
   Annotationen
   ¡  Logisch: @Id, @OneToMany, @Transient, @Lob, ...
   ¡  Physikalisch: @Table, @SecondaryTable, @Column, ...
   	
  

                   Copyright © 2013 – akquinet AG            31.01.2013   13
Entity Relationships




              Copyright © 2013 – akquinet AG   31.01.2013   14
Mapping von Vererbung


          	
  
   	
  




                 Copyright © 2013 – akquinet AG   31.01.2013   15
Mapping von Vererbung


   	
  
                                                                PROJECT
          SINGLE_TABLE                           ID DISCR NAME CUST_ID DEPT_ID



                                                 EXTERNAL_PROJECT          INTERNAL_PROJECT
          TABLE_PER_CLASS                         ID NAME CUST_ID            ID NAME DEPT_ID


                                                                   PROJECT
          JOINED                                                   ID NAME

                                                    EXTERNAL_PROJECT      INTERNAL_PROJECT
                                                          ID CUST_ID         ID DEPT_ID
   	
  

                         Copyright © 2013 – akquinet AG                              31.01.2013   16
EntityManager


   Kommunikation JPA-Laufzeitumgebung
   ¡  Zentrale Schnittstelle zur Datenbank
   ¡  Life Cycle Methoden: persist, remove, merge
   ¡  Zugriffsmethoden: find, getReference
   ¡  Query Methoden: createQuery, createNamedQuery,
                             createNativeQuery

   ¡  Cache Methoden: flush, refresh, clear, contains
   ¡  Zugriff auf Transaktionen: getTransaction



                   Copyright © 2013 – akquinet AG        31.01.2013   17
Änderungsoperationen


   ¡  Nur innerhalb von Transaktionen
   ¡  Create: em.persist(...)
   ¡  Update:
     –  Änderung der Entität (z.B. per Setter)
     –  Keine explizite save-Operation
   ¡  Delete: em.remove(...)
   ¡  Änderungen wirksam bei em.flush(), em.commit()




                    Copyright © 2013 – akquinet AG      31.01.2013   18
Life	
  Cycle
Persistenzkontext


   Laufzeitkonzept
   ¡  Menge von „managed“ Entity Instanzen zur Laufzeit
   ¡  Genau eine Enitity Instanz per Identität
   ¡  Zugriff über EntityManager Interface
   ¡  Alle Instanzen sind auf die gleiche Datenbank abgebildet
   Persistenzkontext Typen
   ¡  Transaction
   ¡  Extended


                     Copyright © 2013 – akquinet AG        31.01.2013   20
Anfragesprache


   Java Persistence Query Language (JPQL)



                               Was
      SELECT e.lastname
      FROM Employee e                                     Woher
      WHERE e.firstname = 'Michael'
       	
  
                                                 Welche




                Copyright © 2013 – akquinet AG                    31.01.2013   21
JPQL


  ¡  Syntax an SQL orientiert	
  
    SELECT p FROM Project p JOIN p.employees e
      WHERE p.firstname = :name

    UPDATE Employee e SET e.salary = e.salary * 1.05

    DELETE FROM Employee e WHERE e.name = 'Michael'

  ¡  Domain-­‐Modell	
  (Klassen,	
  A2ribute,	
  Rela8onships)	
  
  ¡  Pfad-­‐Ausdrücke	
  e.department.company.name
  ¡  Query	
  Parameter	
  




                        Copyright © 2013 – akquinet AG                 31.01.2013   22
Query Erzeugung


   ¡  Query Instanz repräsentiert Anfrage zur Laufzeit
   ¡  EntityManager ist Query Factory:
        Dynamische Query: createQuery(String)
        Criteria API Query: createQuery(CriteriaBuilder)
        Statische Query: createNamedQuery(String)
        SQL Query: createNativeQuery(String)




                   Copyright © 2013 – akquinet AG         31.01.2013   23
Query	
  Ausführung


   Query q = em.createQuery(
       "SELECT d FROM Department d");
   List<Department> ds = (List<Department>)q.getResultList();


   Query q = em.createQuery(
       "SELECT COUNT(d) FROM Department d");
   Long count = (Long)q.getSingleResult();


   Query q = em.createQuery(
     "UPDATE Employee e SET e.salary = e.salary * 1.05";
   int changes = q.executeUpdate();


   	
  
                  Copyright © 2013 – akquinet AG       31.01.2013   24
Query Criteria API


   ¡  API zur dynamischen Erzeugung von Queries
   ¡  Keine String Manipulation
   ¡  Typesafe Queries: Überprüfung zur Compile-Zeit
   ¡  Query Ergebnis ist getypt
   ¡  Option: String-based oder strongly- typed




                   Copyright © 2013 – akquinet AG       31.01.2013   25
Query Criteria API


    Query q = em.createQuery(
      "SELECT e FROM Employee e WHERE e.firstname = ‘Michael‘");
    List<Employee> emps= (List<Employee>)q.getResultList();


    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);
    Root<Employee> e = cq.from(Employee.class);
    cq.select(e);
    cq.where(cb.equal(e.get(Employee_.firstname), "Michael"));
    TypedQuery<Employee> tq = em.createQuery(cq);
    List<Employee> results = tq.getResultList();




                  Copyright © 2013 – akquinet AG       31.01.2013   26
Persistence Unit


   ¡  Menge von Entity Klassen
   ¡  Definiert in META-INF/persistence.xml
   ¡  Abgebildet auf genau eine Datenbank
   ¡  Identifiziert durch eindeutigen Namen
   ¡  Definiert den Persistence Provider
   ¡  Kann Provider-spezifische Properties beinhalten




                   Copyright © 2013 – akquinet AG        31.01.2013   27
JPA und Java EE


   JPA als Standard Persistenz Konzept in Java EE
   ¡  EntitiyManager injiziert oder per JNDI Lookup
   ¡  Transaktionskontrolle durch Container
   ¡  Container verwaltet und propagiert Persistenzkontext
   ¡  Automatisches Scannen der Entity Klassen während des
       Deployment




                  § Copyright © 2013 – akquinet AG      § 31.01.2013   § 28
JPA und Java SE


   ¡  Konfiguration persistence.xml
     –  in META-INF oder im Classpath
     –  muss alle Entity Klassen aufzählen
   ¡  Manuelle Transaktionskontrolle
   ¡  Bootstrap API javax.persistence.Persistence erzeugt
       EntityManagerFactory für Peristence Unit

     EntityManagerFactory emf = Persistence.
       createEntityManagerFactory(puName, properties);
     EntityManager em = emf.createEntityManager();


                   Copyright © 2013 – akquinet AG        31.01.2013   29
Zusammenfassung


  ¡  JPA = Java Persistenz Standard
  ¡  Unabhängigkeit OR-Mapper und Datenbank
  ¡  Verfügbar in Java EE und Java SE
  ¡  JPA 2.1 Public Draft




                  Copyright © 2013 – akquinet AG   31.01.2013   30
Ausblick JPA 2.1

   ¡  Unterstützung Typ Konvertierung im OR-Mapping
   ¡  Schema Generierung
   ¡  Entity Graphs
   ¡  Query Erweiterungen: JOIN ON, Datenbank-Funktionen,
       Downcast, SubQueries in Expressions, ...
   ¡  Unterstützung für Stored Procedures
   ¡  Criteria API: delete und update
   ¡  Nicht-synchronisierter Persistenzkontext
   ¡  CDI Injection in Entity Listener
   ¡  Annotationen für Index und ForeignKey

                       Copyright © 2013 – akquinet AG        31.01.2013   31
Links



        mailto:michael.bouschen@akquinet.de

        http://blog.akquinet.de/

        @akquinet

        http://jcp.org/en/jsr/detail?id=338

        http://java.net/projects/jpa-spec/lists/users/archive




            Copyright © 2013 – akquinet AG                      31.01.2013   32

Más contenido relacionado

Similar a JPA – Der Persistenz-­Standard in der Java EE und SE

Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework? Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework? Michael Plöd
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
Let's talk about Java EE
Let's talk about Java EELet's talk about Java EE
Let's talk about Java EEAndreas König
 
Datenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiDatenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiChristian Baranowski
 
Einführung in nosql // ArangoDB mit Symfony 2
Einführung in nosql // ArangoDB mit Symfony 2Einführung in nosql // ArangoDB mit Symfony 2
Einführung in nosql // ArangoDB mit Symfony 2ArangoDB Database
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumTorsten Fink
 
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...Lukas Eder
 
Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterHeiko Seeberger
 
Workshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GAWorkshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GAOliver Belikan
 
JSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederJSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederChristoph Pickl
 
Analytics meets Big Data – R/Python auf der Hadoop/Spark-Plattform
Analytics meets Big Data – R/Python auf der Hadoop/Spark-PlattformAnalytics meets Big Data – R/Python auf der Hadoop/Spark-Plattform
Analytics meets Big Data – R/Python auf der Hadoop/Spark-PlattformRising Media Ltd.
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeldgedoplan
 
Typ-sichere DSLs
Typ-sichere DSLsTyp-sichere DSLs
Typ-sichere DSLsWerner Keil
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLFromDual GmbH
 
Sensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle DatenbankSensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle DatenbankUlrike Schwinn
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistencegedoplan
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Ulrike Schwinn
 
Neue Features der Java EE 6
Neue Features der Java EE 6Neue Features der Java EE 6
Neue Features der Java EE 6GFU Cyrus AG
 

Similar a JPA – Der Persistenz-­Standard in der Java EE und SE (20)

Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework? Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework?
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
Let's talk about Java EE
Let's talk about Java EELet's talk about Java EE
Let's talk about Java EE
 
Datenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiDatenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence Api
 
Einführung in nosql // ArangoDB mit Symfony 2
Einführung in nosql // ArangoDB mit Symfony 2Einführung in nosql // ArangoDB mit Symfony 2
Einführung in nosql // ArangoDB mit Symfony 2
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
 
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
 
Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matter
 
Backbase Intro
Backbase IntroBackbase Intro
Backbase Intro
 
Workshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GAWorkshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GA
 
JSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederJSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael Greifeneder
 
Analytics meets Big Data – R/Python auf der Hadoop/Spark-Plattform
Analytics meets Big Data – R/Python auf der Hadoop/Spark-PlattformAnalytics meets Big Data – R/Python auf der Hadoop/Spark-Plattform
Analytics meets Big Data – R/Python auf der Hadoop/Spark-Plattform
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
Typ-sichere DSLs
Typ-sichere DSLsTyp-sichere DSLs
Typ-sichere DSLs
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQL
 
Sensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle DatenbankSensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle Datenbank
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistence
 
Digicomp sqlday migration
Digicomp sqlday migrationDigicomp sqlday migration
Digicomp sqlday migration
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
 
Neue Features der Java EE 6
Neue Features der Java EE 6Neue Features der Java EE 6
Neue Features der Java EE 6
 

Más de hwilming

Introduction Machine Learning - Microsoft
Introduction Machine Learning - MicrosoftIntroduction Machine Learning - Microsoft
Introduction Machine Learning - Microsofthwilming
 
A practical introduction to data science and machine learning
A practical introduction to data science and machine learningA practical introduction to data science and machine learning
A practical introduction to data science and machine learninghwilming
 
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014hwilming
 
Creating Mobile Enterprise Applications with Red Hat / JBoss
Creating Mobile Enterprise Applications with Red Hat / JBossCreating Mobile Enterprise Applications with Red Hat / JBoss
Creating Mobile Enterprise Applications with Red Hat / JBosshwilming
 
SAP Integration with Red Hat JBoss Technologies
SAP Integration with Red Hat JBoss TechnologiesSAP Integration with Red Hat JBoss Technologies
SAP Integration with Red Hat JBoss Technologieshwilming
 
JavaAktuell - Skalierbare Cluster-Topologien mit dem JBoss AS 7
JavaAktuell - Skalierbare Cluster-Topologien mit dem JBoss AS 7JavaAktuell - Skalierbare Cluster-Topologien mit dem JBoss AS 7
JavaAktuell - Skalierbare Cluster-Topologien mit dem JBoss AS 7hwilming
 
JBoss EAP clustering
JBoss EAP clustering JBoss EAP clustering
JBoss EAP clustering hwilming
 
JBoss AS / EAP Clustering
JBoss AS / EAP  ClusteringJBoss AS / EAP  Clustering
JBoss AS / EAP Clusteringhwilming
 
JavaAktuell - Hochverfügbarkeit mit dem JBoss AS 7
JavaAktuell - Hochverfügbarkeit mit dem JBoss AS 7JavaAktuell - Hochverfügbarkeit mit dem JBoss AS 7
JavaAktuell - Hochverfügbarkeit mit dem JBoss AS 7hwilming
 
Integrating SAP the Java EE Way - JBoss One Day talk 2012
Integrating SAP the Java EE Way - JBoss One Day talk 2012Integrating SAP the Java EE Way - JBoss One Day talk 2012
Integrating SAP the Java EE Way - JBoss One Day talk 2012hwilming
 
Aerogear Java User Group Presentation
Aerogear Java User Group PresentationAerogear Java User Group Presentation
Aerogear Java User Group Presentationhwilming
 
The Gear you need to go mobile with Java Enterprise - Jax 2012
The Gear you need to go mobile with Java Enterprise - Jax 2012The Gear you need to go mobile with Java Enterprise - Jax 2012
The Gear you need to go mobile with Java Enterprise - Jax 2012hwilming
 
Need(le) for Speed - Effective Unit Testing for Java EE
Need(le) for Speed - Effective Unit Testing for Java EENeed(le) for Speed - Effective Unit Testing for Java EE
Need(le) for Speed - Effective Unit Testing for Java EEhwilming
 
Need(le) for Speed - Effective Unit Testing for Java EE
Need(le) for Speed - Effective Unit Testing for Java EENeed(le) for Speed - Effective Unit Testing for Java EE
Need(le) for Speed - Effective Unit Testing for Java EEhwilming
 

Más de hwilming (14)

Introduction Machine Learning - Microsoft
Introduction Machine Learning - MicrosoftIntroduction Machine Learning - Microsoft
Introduction Machine Learning - Microsoft
 
A practical introduction to data science and machine learning
A practical introduction to data science and machine learningA practical introduction to data science and machine learning
A practical introduction to data science and machine learning
 
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
 
Creating Mobile Enterprise Applications with Red Hat / JBoss
Creating Mobile Enterprise Applications with Red Hat / JBossCreating Mobile Enterprise Applications with Red Hat / JBoss
Creating Mobile Enterprise Applications with Red Hat / JBoss
 
SAP Integration with Red Hat JBoss Technologies
SAP Integration with Red Hat JBoss TechnologiesSAP Integration with Red Hat JBoss Technologies
SAP Integration with Red Hat JBoss Technologies
 
JavaAktuell - Skalierbare Cluster-Topologien mit dem JBoss AS 7
JavaAktuell - Skalierbare Cluster-Topologien mit dem JBoss AS 7JavaAktuell - Skalierbare Cluster-Topologien mit dem JBoss AS 7
JavaAktuell - Skalierbare Cluster-Topologien mit dem JBoss AS 7
 
JBoss EAP clustering
JBoss EAP clustering JBoss EAP clustering
JBoss EAP clustering
 
JBoss AS / EAP Clustering
JBoss AS / EAP  ClusteringJBoss AS / EAP  Clustering
JBoss AS / EAP Clustering
 
JavaAktuell - Hochverfügbarkeit mit dem JBoss AS 7
JavaAktuell - Hochverfügbarkeit mit dem JBoss AS 7JavaAktuell - Hochverfügbarkeit mit dem JBoss AS 7
JavaAktuell - Hochverfügbarkeit mit dem JBoss AS 7
 
Integrating SAP the Java EE Way - JBoss One Day talk 2012
Integrating SAP the Java EE Way - JBoss One Day talk 2012Integrating SAP the Java EE Way - JBoss One Day talk 2012
Integrating SAP the Java EE Way - JBoss One Day talk 2012
 
Aerogear Java User Group Presentation
Aerogear Java User Group PresentationAerogear Java User Group Presentation
Aerogear Java User Group Presentation
 
The Gear you need to go mobile with Java Enterprise - Jax 2012
The Gear you need to go mobile with Java Enterprise - Jax 2012The Gear you need to go mobile with Java Enterprise - Jax 2012
The Gear you need to go mobile with Java Enterprise - Jax 2012
 
Need(le) for Speed - Effective Unit Testing for Java EE
Need(le) for Speed - Effective Unit Testing for Java EENeed(le) for Speed - Effective Unit Testing for Java EE
Need(le) for Speed - Effective Unit Testing for Java EE
 
Need(le) for Speed - Effective Unit Testing for Java EE
Need(le) for Speed - Effective Unit Testing for Java EENeed(le) for Speed - Effective Unit Testing for Java EE
Need(le) for Speed - Effective Unit Testing for Java EE
 

JPA – Der Persistenz-­Standard in der Java EE und SE

  • 1. Der Persistenz-Standard JPA in der Java EE / SE Michael Bouschen akquinet AG michael.bouschen@akquinet.de
  • 2. Über meine Person   Architekt und Projektleiter bei akquinet AG Berlin Referenzimplementierung JPA 1 Mitglied JCP Experten Gruppen: JPA 2.0, JPA 2.1, JDO 1, JDO 2 Apache committer JDO TCK   Copyright © 2013 – akquinet AG 31.01.2013 2
  • 3. Impedance Mismatch   OO Programmiersprache Relationale Algebra                 Copyright © 2013 – akquinet AG 31.01.2013 3
  • 4. Impedance Mismatch (2) Wo ist das Problem? ¡  Klasse / Attribut -> Tabelle / Spalte àJDBC Aber ¡  Persistente Identität ¡  Relationen ¡  Caches ¡  Anfragesprache Copyright © 2013 – akquinet AG 31.01.2013 4
  • 5. OR-Mapper Implementierungen (Auswahl) Copyright © 2013 – akquinet AG 31.01.2013 5
  • 6. Persistenz in Java EE   BMP CMP (EJB 1 CMP und EJB 2 CMP) EJB 3.0: JPA JPA: Spezifikation – kein Produkt Copyright © 2013 – akquinet AG 31.01.2013 6
  • 7. JPA Historie           JPA 1.0 JPA 2.0 JPA 2.1   Java EE 5 Java EE 6 (Public Draft)       Mai 2006 Dez 2009 Dez 2012 Copyright © 2013 – akquinet AG 31.01.2013 7
  • 8. JPA 1.0 Spezifikation ¡  Teil der EJB 3.0 Spezifikation JSR 220 ¡  Separates Spezifikationsdokument ¡  Linda DeMichiel (Sun), Michael Keith (Oracle) ¡  Final Release: Mai 2006 Implementierungen ¡  Referenzimplementierung: Oracle TopLink Essentials ¡  Hibernate, OpenJPA, TopLink, SAP, JPOX Copyright © 2013 – akquinet AG 31.01.2013 8
  • 9. JPA 2.0 Spezifikation ¡  Eigenständiger JSR: JSR-317 ¡  Linda DeMichiel (Sun) ¡  Final Release: Dezember 2009 Implementierungen ¡  Referenzimplementierung: EclipseLink ¡  Hibernate, OpenJPA, EclipseLink, SAP, DataNucleus Copyright © 2013 – akquinet AG 31.01.2013 9
  • 10. JPA 2.1 Spezifikation ¡  Eigenständiger JSR: JSR-338 ¡  Linda DeMichiel (Sun) ¡  Public Review: Dezember 2012 Implementierungen ¡  Referenzimplementierung: EclipseLink ¡  Hibernate, OpenJPA, EclipseLink, SAP, DataNucleus Copyright © 2013 – akquinet AG 31.01.2013 10
  • 11. JPA Features ¡  POJO-basiertes Persistenzmodell ¡  Domainmodell unterstützt Vererbung, Polymorphie, etc. ¡  Standardisiertes objekt-relationales Mapping ¡  Anfragesprache ¡  Standardisiertes (Runtime-)API ¡  Verfügbar in Java EE und Java SE ¡  Unabhängigkeit von Datenbank und OR-Mapper Copyright © 2013 – akquinet AG 31.01.2013 11
  • 12. Entity Klassen – POJO ¡  Kein Interface notwendig (wie z.B. EntityBean) ¡  Top-Level Klasse (abstrakt oder konkret) ¡  Entity und Nicht-Entity Klassen in Vererbungshierarchie ¡  Objekterzeugung mit new Copyright © 2013 – akquinet AG 31.01.2013 12
  • 13. Objektrelationales Mapping Allgemeines ¡  Abbildung Java Klasse ↔ relationale Datenbank ¡  Abbildung von Assoziationen ¡  Mapping Metadaten als Annotationen oder XML ¡  Default Regeln z.B. für Tabellen- und Spaltennamen Annotationen ¡  Logisch: @Id, @OneToMany, @Transient, @Lob, ... ¡  Physikalisch: @Table, @SecondaryTable, @Column, ...   Copyright © 2013 – akquinet AG 31.01.2013 13
  • 14. Entity Relationships Copyright © 2013 – akquinet AG 31.01.2013 14
  • 15. Mapping von Vererbung     Copyright © 2013 – akquinet AG 31.01.2013 15
  • 16. Mapping von Vererbung   PROJECT SINGLE_TABLE ID DISCR NAME CUST_ID DEPT_ID EXTERNAL_PROJECT INTERNAL_PROJECT TABLE_PER_CLASS ID NAME CUST_ID ID NAME DEPT_ID PROJECT JOINED ID NAME EXTERNAL_PROJECT INTERNAL_PROJECT ID CUST_ID ID DEPT_ID   Copyright © 2013 – akquinet AG 31.01.2013 16
  • 17. EntityManager Kommunikation JPA-Laufzeitumgebung ¡  Zentrale Schnittstelle zur Datenbank ¡  Life Cycle Methoden: persist, remove, merge ¡  Zugriffsmethoden: find, getReference ¡  Query Methoden: createQuery, createNamedQuery, createNativeQuery ¡  Cache Methoden: flush, refresh, clear, contains ¡  Zugriff auf Transaktionen: getTransaction Copyright © 2013 – akquinet AG 31.01.2013 17
  • 18. Änderungsoperationen ¡  Nur innerhalb von Transaktionen ¡  Create: em.persist(...) ¡  Update: –  Änderung der Entität (z.B. per Setter) –  Keine explizite save-Operation ¡  Delete: em.remove(...) ¡  Änderungen wirksam bei em.flush(), em.commit() Copyright © 2013 – akquinet AG 31.01.2013 18
  • 20. Persistenzkontext Laufzeitkonzept ¡  Menge von „managed“ Entity Instanzen zur Laufzeit ¡  Genau eine Enitity Instanz per Identität ¡  Zugriff über EntityManager Interface ¡  Alle Instanzen sind auf die gleiche Datenbank abgebildet Persistenzkontext Typen ¡  Transaction ¡  Extended Copyright © 2013 – akquinet AG 31.01.2013 20
  • 21. Anfragesprache Java Persistence Query Language (JPQL) Was SELECT e.lastname FROM Employee e Woher WHERE e.firstname = 'Michael'   Welche Copyright © 2013 – akquinet AG 31.01.2013 21
  • 22. JPQL ¡  Syntax an SQL orientiert   SELECT p FROM Project p JOIN p.employees e WHERE p.firstname = :name UPDATE Employee e SET e.salary = e.salary * 1.05 DELETE FROM Employee e WHERE e.name = 'Michael' ¡  Domain-­‐Modell  (Klassen,  A2ribute,  Rela8onships)   ¡  Pfad-­‐Ausdrücke  e.department.company.name ¡  Query  Parameter   Copyright © 2013 – akquinet AG 31.01.2013 22
  • 23. Query Erzeugung ¡  Query Instanz repräsentiert Anfrage zur Laufzeit ¡  EntityManager ist Query Factory: Dynamische Query: createQuery(String) Criteria API Query: createQuery(CriteriaBuilder) Statische Query: createNamedQuery(String) SQL Query: createNativeQuery(String) Copyright © 2013 – akquinet AG 31.01.2013 23
  • 24. Query  Ausführung Query q = em.createQuery( "SELECT d FROM Department d"); List<Department> ds = (List<Department>)q.getResultList(); Query q = em.createQuery( "SELECT COUNT(d) FROM Department d"); Long count = (Long)q.getSingleResult(); Query q = em.createQuery( "UPDATE Employee e SET e.salary = e.salary * 1.05"; int changes = q.executeUpdate();   Copyright © 2013 – akquinet AG 31.01.2013 24
  • 25. Query Criteria API ¡  API zur dynamischen Erzeugung von Queries ¡  Keine String Manipulation ¡  Typesafe Queries: Überprüfung zur Compile-Zeit ¡  Query Ergebnis ist getypt ¡  Option: String-based oder strongly- typed Copyright © 2013 – akquinet AG 31.01.2013 25
  • 26. Query Criteria API Query q = em.createQuery( "SELECT e FROM Employee e WHERE e.firstname = ‘Michael‘"); List<Employee> emps= (List<Employee>)q.getResultList(); CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Employee> cq = cb.createQuery(Employee.class); Root<Employee> e = cq.from(Employee.class); cq.select(e); cq.where(cb.equal(e.get(Employee_.firstname), "Michael")); TypedQuery<Employee> tq = em.createQuery(cq); List<Employee> results = tq.getResultList(); Copyright © 2013 – akquinet AG 31.01.2013 26
  • 27. Persistence Unit ¡  Menge von Entity Klassen ¡  Definiert in META-INF/persistence.xml ¡  Abgebildet auf genau eine Datenbank ¡  Identifiziert durch eindeutigen Namen ¡  Definiert den Persistence Provider ¡  Kann Provider-spezifische Properties beinhalten Copyright © 2013 – akquinet AG 31.01.2013 27
  • 28. JPA und Java EE JPA als Standard Persistenz Konzept in Java EE ¡  EntitiyManager injiziert oder per JNDI Lookup ¡  Transaktionskontrolle durch Container ¡  Container verwaltet und propagiert Persistenzkontext ¡  Automatisches Scannen der Entity Klassen während des Deployment § Copyright © 2013 – akquinet AG § 31.01.2013 § 28
  • 29. JPA und Java SE ¡  Konfiguration persistence.xml –  in META-INF oder im Classpath –  muss alle Entity Klassen aufzählen ¡  Manuelle Transaktionskontrolle ¡  Bootstrap API javax.persistence.Persistence erzeugt EntityManagerFactory für Peristence Unit EntityManagerFactory emf = Persistence. createEntityManagerFactory(puName, properties); EntityManager em = emf.createEntityManager(); Copyright © 2013 – akquinet AG 31.01.2013 29
  • 30. Zusammenfassung ¡  JPA = Java Persistenz Standard ¡  Unabhängigkeit OR-Mapper und Datenbank ¡  Verfügbar in Java EE und Java SE ¡  JPA 2.1 Public Draft Copyright © 2013 – akquinet AG 31.01.2013 30
  • 31. Ausblick JPA 2.1 ¡  Unterstützung Typ Konvertierung im OR-Mapping ¡  Schema Generierung ¡  Entity Graphs ¡  Query Erweiterungen: JOIN ON, Datenbank-Funktionen, Downcast, SubQueries in Expressions, ... ¡  Unterstützung für Stored Procedures ¡  Criteria API: delete und update ¡  Nicht-synchronisierter Persistenzkontext ¡  CDI Injection in Entity Listener ¡  Annotationen für Index und ForeignKey Copyright © 2013 – akquinet AG 31.01.2013 31
  • 32. Links mailto:michael.bouschen@akquinet.de http://blog.akquinet.de/ @akquinet http://jcp.org/en/jsr/detail?id=338 http://java.net/projects/jpa-spec/lists/users/archive Copyright © 2013 – akquinet AG 31.01.2013 32