SlideShare ist ein Scribd-Unternehmen logo
1 von 19
e-movimento Software Design & Beratung GmbH
1030 Wien ● Marxergasse 7/26 ► www.e-movimento.com
Objekt-Relationales Mapping
Von Java zu relationalen DBs
Vorstellung
 Name: DI Sebastian Dietrich
 Tätigkeiten:
 Java-Softwareentwickler & Softwarearchitekt
 Teamleiter & Scrum-Master
 Berater, Trainer
 Überzeugungen & Leidenschaften:
 Technische Qualität & Produktivität
 Praxiserfahrung & theoretischer Background
 Agile Softwareentwicklung, Java, Android, Wikipedia
 Kontakt:
 mailto://Sebastian.Dietrich@e-movimento.com
 http://managing-java.blogspot.co.at
 http://de.wikipedia.org/wiki/Benutzer:Sebastian.Dietrich
► www.e-movimento.com, Sebastian Dietrich2
► www.e-movimento.com, Sebastian Dietrich3
Objekt-Relationales Mapping
Warum überhaupt objektorientiert?
http://www.tiobe.com
► www.e-movimento.com, Sebastian Dietrich4
Objekt-Relationales Mapping
Warum überhaupt relational?
http://www.joinvision.com
Objekt-Relationales Mapping
Unterschiede Objektorientiert – Relational
OO Konzepte
 Vererbung
 Polymorphie
 Kapselung
 Objektbeziehungen
 Identität über Adressen
 Programm. Integrität
 keine Transaktionalität
RDB Konzepte
 keine Vererbung
 keine Polymorphie
 keine Kapselung
 Relationen
 Identität über Schlüssel
 Referentielle Integrität
 Transaktionalität
► www.e-movimento.com, Sebastian Dietrich5
Aber nicht nur die Konzepte unterscheiden sich…
Unterschiede Objektorietiert – Relational
Object-Relational Impedance Mismatch
 Ein gutes Objektmodell…
 Ist optimiert für (sich laufend ändernde) fachliche Anforderungen
 Definiert Fachdaten (Businessobjekte) und deren Logik
 Verwendet Fachtermini („ubiqutous language“)
 Wird (meist) für jede Applikation neu & völlig anders definiert
 Wird laufend refaktorisiert
 …
 Ein gutes Datenbankschema…
 Vermeidet Redundanzen mittels Normalformen
 Optimiert Leistung
 Stellt Konsistenz und Integrität der Daten sicher
 Ist (meist) applikationsübergreifend
 …
Object-
Relational
Impedance
Mismatch
► www.e-movimento.com, Sebastian Dietrich6
Object-Relational Impedance Mismatch
Unterschiede
 Struktur: Objekt = Daten + Verhalten, Vererbung
 Instanz: Objektzustand = Daten + Referenzen
 an einem Objekt hängt potentiell die gesamte DB
 Kapselung: Attribute können von außen nur über wohldefinierte
Zugriffsmethoden verändert werden
 Identität: Objektidentität von seinen Daten unabhängig  Daten
reichen nicht um Identität in OO zu bestimmen
 Arbeitsweise: OO = Netzwerk interagierender Objekte, Zugriff auf
Objekte über Referenzen, keine Transaktionen, keine
mengenbasierte Arbeitsweise
 Verantwortlichkeit: Objektmodell in Verantwortlichkeit der
Entwickler einer Applikation, unterliegt ständiger ungeplanter
Änderung
 Sprachwechsel: SQL vs. Java, Unterschiedliche Typsysteme,
unterschiedliche Behandlung komplexer Typen, Wertobjekte
► www.e-movimento.com, Sebastian Dietrich7
Object-Relational Impedance Mismatch
Lösung
 Unterschiedliche Lösungsansätze:
 Objektorientierte Datenbanken
 Objektbasierte Datenbanken
 Relationale Funktionen in Sprachen (Embedded SQL)
 XML-DBs, Triplestores, …
 NoSQL (Google BigTable, Amazon Dynamo, CouchDB, ...)
 Objektrationale Mapper (O/R Mapper)
 Ideale Lösung?
Keine ideale Lösung möglich – nur Umgehungen des
Problems. Wartbarkeit vs. Performance
30 - 40% der Entwicklungszeit geht in OR-IM
[C. Keene 2004]
► www.e-movimento.com, Sebastian Dietrich8
Object-Relational Impedance Mismatch
Abbildung von Vererbung OO  RDB
 Abbildung von Vererbung = Ein Teilaspekt des ORIM
 Nicht Trivial  Lösung: Objekt-Relational-Mapper (= OR-
Mapper)
Mitarbeiter
Interner Externer
<<abstract>>
Person
Person
Mitarbeiter
Interner
Externer
?
► www.e-movimento.com, Sebastian Dietrich9
Abbildung von Vererbung OO  RDB
Lösungswege
 „Single Table“, „Table per class-
hierarchy“, „Filter-Mapping“
 1 Tabelle für alle Attribute der
Basisklasse und davon abgeleiteten
Klassen, dazu "Diskriminator" = Typ
des Objektes
 „Joined“, „Table per subclass“,
„Vertikales Mapping“
 1 Tabelle für Basisklasse angelegt
und für jede davon abgeleitete
Unterklasse, 1:1 Beziehungen
dazwischen
 „Table per concrete class“,
„Horizontales Mapping“
 1 Tabelle für konkrete Unterklassen
inkl. Attribute abstrakter Basisklassen
Person
Attribute von
Person, Mitarbeiter,
Externer und Interner
+ Typkennzeichen
Person Mitarbeiter
Interner Externer
Mitarbeiter
inkl. Attr.
von Person
Interner
inkl. Attr. von
Person &
Mitarbeiter
Externer
inkl. Attr. von
Person &
Mitarbeiter
► www.e-movimento.com, Sebastian Dietrich10
Abbildung von Vererbung OO  RDB
Weitere Lösungswege
 „General" = Generelle Tabellen
 Eine Tabelle für Klassen
 Eine für Beziehungen (inkl.
Vererbung)
 Eine für Attribute
 Eine für Instanzen
 Eine für Werte
► www.e-movimento.com, Sebastian Dietrich11
Abbildung von Vererbung OO  RDB
Vor- und Nachteile
 "Single Table"
 DB Struktur typisch für RDBs
 einfacher für DBAs
- Verbraucht mehr Speicherplatz
- Probleme mit "NOT NULL"
 "Joined"
 DB Struktur passt zur OO
Struktur  einfachere
Integration
- Performance (joined Queries
für Listen unterschiedlicher
Typen)
 "Table per Class"
- Performance (mehrere Queries
für Listen unterschiedlicher
Typen)
Person
Attribute von
Person, Mitarbeiter,
Externer und Interner
+ Typkennzeichen
Person Mitarbeiter
Interner Externer
Mitarbeiter
inkl. Attr.
von Person
Interner
inkl. Attr. von
Person &
Mitarbeiter
Externer
inkl. Attr. von
Person &
Mitarbeiter
► www.e-movimento.com, Sebastian Dietrich12
Objekt-Relational Impedance Mismatch
Faulheitsprinzip
 Das Rad nicht neu erfinden:
 Mein Programm ist nicht das
erste, das auf eine DB zugreift
 30-40% des gesamten
Codierungsaufwandes gehen
in ORIM
 Frameworks
 Spring JDBC
 iBATIS
 JDO, JPA
 Hibernate, EclipseLink, …
 Ist eine Datenbank wirklich
nötig? Alternativen:
 RAM (BigMemory)
 Archive, Bibliotheken, …
 Konfigurationsdateien
 Files, XML, Serialisierte
Objekte, Preferences, …
 OODBs, XML-DBs,
Semantische DBs
 Was sind Vorteile von DBs?
 Schneller?
 Skalierbarer?
 Größer?
► www.e-movimento.com, Sebastian Dietrich13
JDBC
myBATIS
DB
EasyBeans, TopLink,
OpenJPA, EclipseLink,
Cayenne, Hibernate,
DataNucleus
JBoss, WebSphere, OC4J,
Geronimo, Glassfish
Persistenzlayer und OR Mapper in Java
Architekturelle Positionierung
JDBC
Persistenz Layer
OR Mapper
DB
JDO / JPA Container
EJB App Server
Spring-JDBC
DbUtils, DBCP
► www.e-movimento.com, Sebastian Dietrich14
► www.e-movimento.com, Sebastian Dietrich15
Persistenzlayer und OR Mapper in Java
Hibernate
 Hibernate = OR Mapper von JBoss (RedHat)
 Persistenzmechanismus von Jboss Application Server
 Features:
 Abfragen mittels SQL, HQL, Criteria API, Stored Procedures
 POJOs ↔ Mapping / Annotations ↔ DB Tabellen
 Transaktionen, Caches, Lazy Loading, Kaskadierungen, …
 Weitere Features:
 EntityManager – Verwendung von Hibernate via JPA
 Shards – horizontal partitionierte DBs
 Validator – Daten Integrität & Validierung
 Tools – Eclipse & Roundtrip Engineering
 Search – Volltextindices & -suche
► www.e-movimento.com, Sebastian Dietrich16
AppHibernate
Persistenzlayer und OR Mapper in Java
Hibernate Architektur
 Transient Objects
 Aktuell nicht an Session hängende
persistente Objekte (POJOs)
 Persistent Objects
 An Session hängende Objekte mit
persistentem Status (POJOs)
 SessionFactory
 Factory für Sessions
 Precompiled Query Cache
 Session
 Kommunikation zwischen
Anwendung und Datenbank
 Kapselt JDBC-Verbindung
 Cache von persistenten Objekten
 Hat 1..N Transaktionen
 Transaction
 ACID Arbeitseinheit
 JDBC, JTA, … Transaktionen
Java JNDI JDBC JTA
DB
TransactionSession
Session Factory
Connection
Provider
TransactionFactory
Persistent
Objects
Transient
Objects
► www.e-movimento.com, Sebastian Dietrich17
Persistenzlayer und OR Mapper in Java
Hibernate Beispiel
 Tabelle KUNDE:
 Java Klasse (POJO):
public class Kunde {
private int id;
private String name;
private String ort;
private String strasse;
private int plz;
// no getter & setter
}
 Hibernate Configdatei für DB-,
SQLDialekt-, Caching- … Config
 Hibernate Mappingdatei:
…
<class name="Kunde"
table="KUNDE">
<id name="id" column="ID">
<generator class="native"/>
</id>
<property name="name" />
…
</class>
…
 Java Code:
session.beginTransaction();
List kunden = session
.createQuery("from KUNDE")
.list();
session.getTransaction()
.commit();
return kunden;
Attribut Typ
ID INTEGER NOT NULL
PRIMARY KEY
NAME VARCHAR(128)
STRASSE VARCHAR(128)
ORT VARCHAR(128)
PLZ INTEGER
► www.e-movimento.com, Sebastian Dietrich18
Hibernate Beispiel
Mapping von Vererbung mittels Annotations
 Table per Subclass = „Joined“:
 Hibernate Annotations:
@Entity @Table(name=„PERSON“)
@Inheritance(strategy=JOINED)
public class Person {
@ID @GeneratedValue
@Column(name=„PERSON_ID“)
private Long personId;
…
@Entity @Table(name=„MITARBEITER“)
@PrimaryKeyJoinColumn
(name=„PERSON_ID“)
public class Mitarbeiter
extends Person {
…
@Entity @Table(name=„INTERNER“)
@PrimaryKeyJoinColumn
(name=„PERSON_ID“)
public class Interner
extends Mitarbeiter {
…
Mitarbeiter
Interner Externer
<<abstract>>
Person
Person Mitarbeiter
Interner Externer
► www.e-movimento.com, Sebastian Dietrich19
Vielen Dank für Ihre Aufmerksamkeit!
Q&A[Sebastian Dietrich]
Sebastian.Dietrich@e-movimento.com
http://managing-java.blogspot.com

Weitere ähnliche Inhalte

Andere mochten auch

11 did gimeno_sacristan_1_unidad_2
11 did gimeno_sacristan_1_unidad_211 did gimeno_sacristan_1_unidad_2
11 did gimeno_sacristan_1_unidad_2
Angelo Porzio
 
Investigacion final3
Investigacion final3Investigacion final3
Investigacion final3
Rafael182
 
Riesgoviolenciasuicidioadolescentes 1226531504060413-8
Riesgoviolenciasuicidioadolescentes 1226531504060413-8Riesgoviolenciasuicidioadolescentes 1226531504060413-8
Riesgoviolenciasuicidioadolescentes 1226531504060413-8
Lili Rivoira
 
Francisco rafael ballinas
Francisco rafael ballinasFrancisco rafael ballinas
Francisco rafael ballinas
Rafael182
 
M scut0018
M scut0018M scut0018
M scut0018
zodol27
 
B&IT-Kurzfilm: Komfortable Suche nach Kundenaufträgen mit Material - SAP ERP ...
B&IT-Kurzfilm: Komfortable Suche nach Kundenaufträgen mit Material - SAP ERP ...B&IT-Kurzfilm: Komfortable Suche nach Kundenaufträgen mit Material - SAP ERP ...
B&IT-Kurzfilm: Komfortable Suche nach Kundenaufträgen mit Material - SAP ERP ...
Wolfgang Hornung
 
Las herramientas web-benavides
Las herramientas web-benavidesLas herramientas web-benavides
Las herramientas web-benavides
XDcatica
 
El que no sirve no sirve, medellin que bueno que existas rodolfo gonzalez
El que no sirve no sirve, medellin que bueno que existas   rodolfo gonzalezEl que no sirve no sirve, medellin que bueno que existas   rodolfo gonzalez
El que no sirve no sirve, medellin que bueno que existas rodolfo gonzalez
Medellín Convention Bureau
 

Andere mochten auch (18)

11 did gimeno_sacristan_1_unidad_2
11 did gimeno_sacristan_1_unidad_211 did gimeno_sacristan_1_unidad_2
11 did gimeno_sacristan_1_unidad_2
 
Investigacion final3
Investigacion final3Investigacion final3
Investigacion final3
 
Riesgoviolenciasuicidioadolescentes 1226531504060413-8
Riesgoviolenciasuicidioadolescentes 1226531504060413-8Riesgoviolenciasuicidioadolescentes 1226531504060413-8
Riesgoviolenciasuicidioadolescentes 1226531504060413-8
 
El iphone 5
El iphone 5El iphone 5
El iphone 5
 
Validaracceso
ValidaraccesoValidaracceso
Validaracceso
 
Internet y servicios luuu
Internet y servicios luuuInternet y servicios luuu
Internet y servicios luuu
 
Francisco rafael ballinas
Francisco rafael ballinasFrancisco rafael ballinas
Francisco rafael ballinas
 
M scut0018
M scut0018M scut0018
M scut0018
 
Organisationsfähigkeit
OrganisationsfähigkeitOrganisationsfähigkeit
Organisationsfähigkeit
 
Images!
Images! Images!
Images!
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Admondeltiempo
AdmondeltiempoAdmondeltiempo
Admondeltiempo
 
Tratamiento farmaceutico
Tratamiento farmaceuticoTratamiento farmaceutico
Tratamiento farmaceutico
 
Practica 1
Practica 1Practica 1
Practica 1
 
B&IT-Kurzfilm: Komfortable Suche nach Kundenaufträgen mit Material - SAP ERP ...
B&IT-Kurzfilm: Komfortable Suche nach Kundenaufträgen mit Material - SAP ERP ...B&IT-Kurzfilm: Komfortable Suche nach Kundenaufträgen mit Material - SAP ERP ...
B&IT-Kurzfilm: Komfortable Suche nach Kundenaufträgen mit Material - SAP ERP ...
 
Las herramientas web-benavides
Las herramientas web-benavidesLas herramientas web-benavides
Las herramientas web-benavides
 
Dreamweaver
DreamweaverDreamweaver
Dreamweaver
 
El que no sirve no sirve, medellin que bueno que existas rodolfo gonzalez
El que no sirve no sirve, medellin que bueno que existas   rodolfo gonzalezEl que no sirve no sirve, medellin que bueno que existas   rodolfo gonzalez
El que no sirve no sirve, medellin que bueno que existas rodolfo gonzalez
 

Ähnlich wie Objekt-Relationales Mapping - von Java zu relationalen DBs

Kickoff Workshop zum Projekt amsl mit den sächsischen Hochschulbibliotheken
Kickoff Workshop zum Projekt amsl mit den sächsischen HochschulbibliothekenKickoff Workshop zum Projekt amsl mit den sächsischen Hochschulbibliotheken
Kickoff Workshop zum Projekt amsl mit den sächsischen Hochschulbibliotheken
LydiaU
 
AMSL Kick-off-Meeting sächsischer Hochschulbibliotheken
AMSL Kick-off-Meeting sächsischer HochschulbibliothekenAMSL Kick-off-Meeting sächsischer Hochschulbibliotheken
AMSL Kick-off-Meeting sächsischer Hochschulbibliotheken
Björn Muschall
 
Sitzung 11
Sitzung 11Sitzung 11
Sitzung 11
scuy
 
Einsatz von Open Data für agile Wissensvermittlung
Einsatz von Open Data für agile WissensvermittlungEinsatz von Open Data für agile Wissensvermittlung
Einsatz von Open Data für agile Wissensvermittlung
Monika Steinberg
 
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Spark Summit
 

Ähnlich wie Objekt-Relationales Mapping - von Java zu relationalen DBs (20)

Ist ADO.NET EntityFramework das bessere LINQ?
Ist ADO.NET EntityFramework das bessere LINQ?Ist ADO.NET EntityFramework das bessere LINQ?
Ist ADO.NET EntityFramework das bessere LINQ?
 
Database Design - Introduction
Database Design - IntroductionDatabase Design - Introduction
Database Design - Introduction
 
NoSQL - Neue Ansätze zur Verwaltung unstrukturierter Daten
NoSQL - Neue Ansätze zur Verwaltung unstrukturierter DatenNoSQL - Neue Ansätze zur Verwaltung unstrukturierter Daten
NoSQL - Neue Ansätze zur Verwaltung unstrukturierter Daten
 
Bdk fachforum (gpec) big data und intelligente datenanalyse
Bdk fachforum (gpec)   big data und intelligente datenanalyseBdk fachforum (gpec)   big data und intelligente datenanalyse
Bdk fachforum (gpec) big data und intelligente datenanalyse
 
Fachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-DesignFachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-Design
 
Mit Domain-driven Design (DDD) nützliche und flexible Software bauen
Mit Domain-driven Design (DDD) nützliche und flexible Software bauenMit Domain-driven Design (DDD) nützliche und flexible Software bauen
Mit Domain-driven Design (DDD) nützliche und flexible Software bauen
 
Linked Library Data & RDA
Linked Library Data & RDALinked Library Data & RDA
Linked Library Data & RDA
 
Kickoff Workshop zum Projekt amsl mit den sächsischen Hochschulbibliotheken
Kickoff Workshop zum Projekt amsl mit den sächsischen HochschulbibliothekenKickoff Workshop zum Projekt amsl mit den sächsischen Hochschulbibliotheken
Kickoff Workshop zum Projekt amsl mit den sächsischen Hochschulbibliotheken
 
AMSL Kick-off-Meeting sächsischer Hochschulbibliotheken
AMSL Kick-off-Meeting sächsischer HochschulbibliothekenAMSL Kick-off-Meeting sächsischer Hochschulbibliotheken
AMSL Kick-off-Meeting sächsischer Hochschulbibliotheken
 
Power BI Version 2.0
Power BI Version 2.0Power BI Version 2.0
Power BI Version 2.0
 
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
 
MySQL: Gastvortrag an der Uni Frankfurt
MySQL: Gastvortrag an der Uni FrankfurtMySQL: Gastvortrag an der Uni Frankfurt
MySQL: Gastvortrag an der Uni Frankfurt
 
Sitzung 11
Sitzung 11Sitzung 11
Sitzung 11
 
Einsatz von Open Data für agile Wissensvermittlung
Einsatz von Open Data für agile WissensvermittlungEinsatz von Open Data für agile Wissensvermittlung
Einsatz von Open Data für agile Wissensvermittlung
 
Integrationsansätze: Überblick und Potentiale semantischer Technologien
Integrationsansätze: Überblick und Potentiale semantischer TechnologienIntegrationsansätze: Überblick und Potentiale semantischer Technologien
Integrationsansätze: Überblick und Potentiale semantischer Technologien
 
1. intranda Goobi Tag: Vom Tool zum Trend
1. intranda Goobi Tag: Vom Tool zum Trend1. intranda Goobi Tag: Vom Tool zum Trend
1. intranda Goobi Tag: Vom Tool zum Trend
 
JavaScript Architektur
JavaScript ArchitekturJavaScript Architektur
JavaScript Architektur
 
DIGITAL HUMANITIES-PROJEKTE DER STAATSBIBLIOTHEK
DIGITAL HUMANITIES-PROJEKTE DER STAATSBIBLIOTHEKDIGITAL HUMANITIES-PROJEKTE DER STAATSBIBLIOTHEK
DIGITAL HUMANITIES-PROJEKTE DER STAATSBIBLIOTHEK
 
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
 
Data Vault DWH Automation
Data Vault DWH AutomationData Vault DWH Automation
Data Vault DWH Automation
 

Objekt-Relationales Mapping - von Java zu relationalen DBs

  • 1. e-movimento Software Design & Beratung GmbH 1030 Wien ● Marxergasse 7/26 ► www.e-movimento.com Objekt-Relationales Mapping Von Java zu relationalen DBs
  • 2. Vorstellung  Name: DI Sebastian Dietrich  Tätigkeiten:  Java-Softwareentwickler & Softwarearchitekt  Teamleiter & Scrum-Master  Berater, Trainer  Überzeugungen & Leidenschaften:  Technische Qualität & Produktivität  Praxiserfahrung & theoretischer Background  Agile Softwareentwicklung, Java, Android, Wikipedia  Kontakt:  mailto://Sebastian.Dietrich@e-movimento.com  http://managing-java.blogspot.co.at  http://de.wikipedia.org/wiki/Benutzer:Sebastian.Dietrich ► www.e-movimento.com, Sebastian Dietrich2
  • 3. ► www.e-movimento.com, Sebastian Dietrich3 Objekt-Relationales Mapping Warum überhaupt objektorientiert? http://www.tiobe.com
  • 4. ► www.e-movimento.com, Sebastian Dietrich4 Objekt-Relationales Mapping Warum überhaupt relational? http://www.joinvision.com
  • 5. Objekt-Relationales Mapping Unterschiede Objektorientiert – Relational OO Konzepte  Vererbung  Polymorphie  Kapselung  Objektbeziehungen  Identität über Adressen  Programm. Integrität  keine Transaktionalität RDB Konzepte  keine Vererbung  keine Polymorphie  keine Kapselung  Relationen  Identität über Schlüssel  Referentielle Integrität  Transaktionalität ► www.e-movimento.com, Sebastian Dietrich5 Aber nicht nur die Konzepte unterscheiden sich…
  • 6. Unterschiede Objektorietiert – Relational Object-Relational Impedance Mismatch  Ein gutes Objektmodell…  Ist optimiert für (sich laufend ändernde) fachliche Anforderungen  Definiert Fachdaten (Businessobjekte) und deren Logik  Verwendet Fachtermini („ubiqutous language“)  Wird (meist) für jede Applikation neu & völlig anders definiert  Wird laufend refaktorisiert  …  Ein gutes Datenbankschema…  Vermeidet Redundanzen mittels Normalformen  Optimiert Leistung  Stellt Konsistenz und Integrität der Daten sicher  Ist (meist) applikationsübergreifend  … Object- Relational Impedance Mismatch ► www.e-movimento.com, Sebastian Dietrich6
  • 7. Object-Relational Impedance Mismatch Unterschiede  Struktur: Objekt = Daten + Verhalten, Vererbung  Instanz: Objektzustand = Daten + Referenzen  an einem Objekt hängt potentiell die gesamte DB  Kapselung: Attribute können von außen nur über wohldefinierte Zugriffsmethoden verändert werden  Identität: Objektidentität von seinen Daten unabhängig  Daten reichen nicht um Identität in OO zu bestimmen  Arbeitsweise: OO = Netzwerk interagierender Objekte, Zugriff auf Objekte über Referenzen, keine Transaktionen, keine mengenbasierte Arbeitsweise  Verantwortlichkeit: Objektmodell in Verantwortlichkeit der Entwickler einer Applikation, unterliegt ständiger ungeplanter Änderung  Sprachwechsel: SQL vs. Java, Unterschiedliche Typsysteme, unterschiedliche Behandlung komplexer Typen, Wertobjekte ► www.e-movimento.com, Sebastian Dietrich7
  • 8. Object-Relational Impedance Mismatch Lösung  Unterschiedliche Lösungsansätze:  Objektorientierte Datenbanken  Objektbasierte Datenbanken  Relationale Funktionen in Sprachen (Embedded SQL)  XML-DBs, Triplestores, …  NoSQL (Google BigTable, Amazon Dynamo, CouchDB, ...)  Objektrationale Mapper (O/R Mapper)  Ideale Lösung? Keine ideale Lösung möglich – nur Umgehungen des Problems. Wartbarkeit vs. Performance 30 - 40% der Entwicklungszeit geht in OR-IM [C. Keene 2004] ► www.e-movimento.com, Sebastian Dietrich8
  • 9. Object-Relational Impedance Mismatch Abbildung von Vererbung OO  RDB  Abbildung von Vererbung = Ein Teilaspekt des ORIM  Nicht Trivial  Lösung: Objekt-Relational-Mapper (= OR- Mapper) Mitarbeiter Interner Externer <<abstract>> Person Person Mitarbeiter Interner Externer ? ► www.e-movimento.com, Sebastian Dietrich9
  • 10. Abbildung von Vererbung OO  RDB Lösungswege  „Single Table“, „Table per class- hierarchy“, „Filter-Mapping“  1 Tabelle für alle Attribute der Basisklasse und davon abgeleiteten Klassen, dazu "Diskriminator" = Typ des Objektes  „Joined“, „Table per subclass“, „Vertikales Mapping“  1 Tabelle für Basisklasse angelegt und für jede davon abgeleitete Unterklasse, 1:1 Beziehungen dazwischen  „Table per concrete class“, „Horizontales Mapping“  1 Tabelle für konkrete Unterklassen inkl. Attribute abstrakter Basisklassen Person Attribute von Person, Mitarbeiter, Externer und Interner + Typkennzeichen Person Mitarbeiter Interner Externer Mitarbeiter inkl. Attr. von Person Interner inkl. Attr. von Person & Mitarbeiter Externer inkl. Attr. von Person & Mitarbeiter ► www.e-movimento.com, Sebastian Dietrich10
  • 11. Abbildung von Vererbung OO  RDB Weitere Lösungswege  „General" = Generelle Tabellen  Eine Tabelle für Klassen  Eine für Beziehungen (inkl. Vererbung)  Eine für Attribute  Eine für Instanzen  Eine für Werte ► www.e-movimento.com, Sebastian Dietrich11
  • 12. Abbildung von Vererbung OO  RDB Vor- und Nachteile  "Single Table"  DB Struktur typisch für RDBs  einfacher für DBAs - Verbraucht mehr Speicherplatz - Probleme mit "NOT NULL"  "Joined"  DB Struktur passt zur OO Struktur  einfachere Integration - Performance (joined Queries für Listen unterschiedlicher Typen)  "Table per Class" - Performance (mehrere Queries für Listen unterschiedlicher Typen) Person Attribute von Person, Mitarbeiter, Externer und Interner + Typkennzeichen Person Mitarbeiter Interner Externer Mitarbeiter inkl. Attr. von Person Interner inkl. Attr. von Person & Mitarbeiter Externer inkl. Attr. von Person & Mitarbeiter ► www.e-movimento.com, Sebastian Dietrich12
  • 13. Objekt-Relational Impedance Mismatch Faulheitsprinzip  Das Rad nicht neu erfinden:  Mein Programm ist nicht das erste, das auf eine DB zugreift  30-40% des gesamten Codierungsaufwandes gehen in ORIM  Frameworks  Spring JDBC  iBATIS  JDO, JPA  Hibernate, EclipseLink, …  Ist eine Datenbank wirklich nötig? Alternativen:  RAM (BigMemory)  Archive, Bibliotheken, …  Konfigurationsdateien  Files, XML, Serialisierte Objekte, Preferences, …  OODBs, XML-DBs, Semantische DBs  Was sind Vorteile von DBs?  Schneller?  Skalierbarer?  Größer? ► www.e-movimento.com, Sebastian Dietrich13
  • 14. JDBC myBATIS DB EasyBeans, TopLink, OpenJPA, EclipseLink, Cayenne, Hibernate, DataNucleus JBoss, WebSphere, OC4J, Geronimo, Glassfish Persistenzlayer und OR Mapper in Java Architekturelle Positionierung JDBC Persistenz Layer OR Mapper DB JDO / JPA Container EJB App Server Spring-JDBC DbUtils, DBCP ► www.e-movimento.com, Sebastian Dietrich14
  • 15. ► www.e-movimento.com, Sebastian Dietrich15 Persistenzlayer und OR Mapper in Java Hibernate  Hibernate = OR Mapper von JBoss (RedHat)  Persistenzmechanismus von Jboss Application Server  Features:  Abfragen mittels SQL, HQL, Criteria API, Stored Procedures  POJOs ↔ Mapping / Annotations ↔ DB Tabellen  Transaktionen, Caches, Lazy Loading, Kaskadierungen, …  Weitere Features:  EntityManager – Verwendung von Hibernate via JPA  Shards – horizontal partitionierte DBs  Validator – Daten Integrität & Validierung  Tools – Eclipse & Roundtrip Engineering  Search – Volltextindices & -suche
  • 16. ► www.e-movimento.com, Sebastian Dietrich16 AppHibernate Persistenzlayer und OR Mapper in Java Hibernate Architektur  Transient Objects  Aktuell nicht an Session hängende persistente Objekte (POJOs)  Persistent Objects  An Session hängende Objekte mit persistentem Status (POJOs)  SessionFactory  Factory für Sessions  Precompiled Query Cache  Session  Kommunikation zwischen Anwendung und Datenbank  Kapselt JDBC-Verbindung  Cache von persistenten Objekten  Hat 1..N Transaktionen  Transaction  ACID Arbeitseinheit  JDBC, JTA, … Transaktionen Java JNDI JDBC JTA DB TransactionSession Session Factory Connection Provider TransactionFactory Persistent Objects Transient Objects
  • 17. ► www.e-movimento.com, Sebastian Dietrich17 Persistenzlayer und OR Mapper in Java Hibernate Beispiel  Tabelle KUNDE:  Java Klasse (POJO): public class Kunde { private int id; private String name; private String ort; private String strasse; private int plz; // no getter & setter }  Hibernate Configdatei für DB-, SQLDialekt-, Caching- … Config  Hibernate Mappingdatei: … <class name="Kunde" table="KUNDE"> <id name="id" column="ID"> <generator class="native"/> </id> <property name="name" /> … </class> …  Java Code: session.beginTransaction(); List kunden = session .createQuery("from KUNDE") .list(); session.getTransaction() .commit(); return kunden; Attribut Typ ID INTEGER NOT NULL PRIMARY KEY NAME VARCHAR(128) STRASSE VARCHAR(128) ORT VARCHAR(128) PLZ INTEGER
  • 18. ► www.e-movimento.com, Sebastian Dietrich18 Hibernate Beispiel Mapping von Vererbung mittels Annotations  Table per Subclass = „Joined“:  Hibernate Annotations: @Entity @Table(name=„PERSON“) @Inheritance(strategy=JOINED) public class Person { @ID @GeneratedValue @Column(name=„PERSON_ID“) private Long personId; … @Entity @Table(name=„MITARBEITER“) @PrimaryKeyJoinColumn (name=„PERSON_ID“) public class Mitarbeiter extends Person { … @Entity @Table(name=„INTERNER“) @PrimaryKeyJoinColumn (name=„PERSON_ID“) public class Interner extends Mitarbeiter { … Mitarbeiter Interner Externer <<abstract>> Person Person Mitarbeiter Interner Externer
  • 19. ► www.e-movimento.com, Sebastian Dietrich19 Vielen Dank für Ihre Aufmerksamkeit! Q&A[Sebastian Dietrich] Sebastian.Dietrich@e-movimento.com http://managing-java.blogspot.com

Hinweis der Redaktion

  1. © e-movimento
  2. © e-movimento Erklärungen der Indices: The TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. The popular search engines Google, MSN, Yahoo!, Wikipedia and YouTube are used to calculate the ratings. Observe that the TIOBE index is not about the best programming language or the language in which most lines of code have been written. The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system. The definition of the TIOBE index can be found under http://www.tiobe.com/index.php/content/paperinfo/tpci/tpci_definition.htm.
  3. © e-movimento Erklärungen der Indices: Joinvision.com – Deutsches Onlineportal für die Vermittlung von IT Fachkräften und –Freelancer. Ca. 20.000 Jobangebote pro Jahr. Die Grafik veranschaulicht die historische Entwicklung der relativen Nachfrage nach Programmiersprachen in Jobangeboten bei www.joinvision.com
  4. © e-movimento Weitere Infos: OR-Mapper @ Wikipedia: http://de.wikipedia.org/wiki/Objektrelationale_Abbildung
  5. © e-movimento Weitere Infos: Object-Relational Impedance Mismatch @ Wikipedia: http://de.wikipedia.org/wiki/Object-relational_impedance_mismatch
  6. © e-movimento Weitere Infos: Object-Relational Impedance Mismatch @ Wikipedia: http://de.wikipedia.org/wiki/Object-relational_impedance_mismatch
  7. © e-movimento Weitere Infos: OR-Mapper @ Wikipedia: http://de.wikipedia.org/wiki/Objektrelationale_Abbildung
  8. © e-movimento
  9. © e-movimento
  10. © e-movimento
  11. © e-movimento Weitere Infos: Java OS-Persistenzframeworks: http://java-source.net/open-source/persistence OR-Mapper @ Wikipedia: http://de.wikipedia.org/wiki/Objektrelationale_Abbildung
  12. © e-movimento Weitere Infos: DataNukleus (früher &quot;Java Persistent Objects JPOX) Open Source (Apache License 2) ORM Framework, Implementiert den (alten) Java Data Objects (JDO) Standard und die Java Persistent API (JPA) V1 und demnächst auch 2 Apache Cayenne Open Source (Apache License 2) ORM Framework, Besonderheit ist der CayenneModeller (GUI Tool für DB Reverese Engineering, DB Generierung und Klassengenerierung) und die Möglichkeit über WebServices auf entfernte DBs zuzugreifen EasyBeans Open Source (GNU LGPL License) EJB Container EclipseLink OpenSource (Eclipse Public License) ORM Framework, Referenzimplementierung für JPA 2.0 TopLink Kommerzielles (Oracle) ORM Framework TopLink Essentials OpenSource Edition von TopLink, Referenzimplementierung von EJB 3.0 Hibernate Open Source (GNU LGPL) ORM Framework mit starker kommerzieller Unterstützung (JBoss / RedHat) Apache OpenEJB Open Source (Apache License 2.0) EJB Container – Basis fürJ2EE App Server Geronimo Apache OpenJPA Open Source (Apache License 2.0) JPA Implementierung – basierend auf Kodo (BEA JDO Implementierung)
  13. © e-movimento Weitere Infos: Hibernate @ Wikipedia: http://de.wikipedia.org/wiki/Hibernate_(Framework) Hibernate Homepage: https://www.hibernate.org/
  14. © e-movimento
  15. © e-movimento
  16. © e-movimento
  17. © e-movimento Weitere Kontaktmöglichkeiten: [email_address] Skype: sebastian_dietrich http://de.wikipedia.org/wiki/Benutzer:Sebastian.Dietrich