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

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

Java Persistence API. Phillip Ghadir Oliver Tigges

Enterprise JavaBeans Überblick

Gregor Raschke 2008 HIBERNATE. Eine Einführung

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

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

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

Softwareentwicklung mit Enterprise JAVA Beans

Eclipse und EclipseLink

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Übungsaufgabe Transaktion als Middleware

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

Enterprise JavaBeans Überblick

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

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

Webbasierte Informationssysteme

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

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

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

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

Willkommen. Datenbanken und Anbindung

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

Objektorientierte Datenbanken

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

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

Programmierung von verteilten Systemen und Webanwendungen mit Java EE

Daten Bank. 6. Vorlesung

JBoss Seam. Ein JEE 5 Webframework. Jörg Wüthrich Infopoint, 4. Februar 2009

Persistenz. Ralf Gitzel

EJB 3.0 alles wird einfacher. Stephan Metzler, eurolink SWITZERLAND

DB-Programmierung. Lehr- und Forschungseinheit Datenbanken und Informationssysteme 1. Ziele. DB2 Zugriff mit Java selbst programmieren

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

Java Persistence API mit Hibernate

Enterprise JavaBeans Überblick

Webbasierte Informationssysteme

Datenbank und Informationssysteme

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

Mehr Performance mit JDBC JAVA-Anwendungen und die Oracle-Datenbank. Carsten Czarski Business Unit Database Oracle Deutschland GmbH

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

4.2 Workshop EJB. Entwicklung von EJB-Anwendungen

Hibernate Das Praxisbuch für Entwickler

Entwicklung von Web-Anwendungen auf JAVA EE Basis

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

Java und Datenbanksysteme Datenbankanbindung mit JDBC

Beispiel: DB-Mock (1/7)

Softwareentwicklung mit Enterprise JAVA Beans

Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape. 6. Übung

Play Framework, MySQL, JPA, HQL, HTML, jquery,

Enterprise JavaBeans Überblick


Rapid Java wie mit Forms

Enterprise JavaBeans Überblick: 12. Session Facade Einleitung 12.2 Problem 12.3 Lösung. Prof. Dr. Björn Dreher Liste V Enterprise JavaBeans 460

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

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

Wie kommen die Befehle zum DBMS

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

Enterprise JavaBeans Überblick: 10. Queries Interface Query 10.2 EJB Query Language 10.3 Named Queries

Relationales Datenbankpraktikum

Migration der Datenbankzugriffsschnittstelle in Client-/Server-Systemen

Daten Bank. 6. Vorlesung

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

Datenbankschnittstellen erlauben Zugriff auf Datenbank aus einer externen Anwendung

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

Oracle & Java HOW TO

ADF Persistenzmechanismen

Java-Persistence-API mit Hibernate

Oliver Paulus, 7. Februar Spring Framework Einführung. Oliver Paulus, Was ist Spring?

Java: MySQL-Anbindung mit JDBC.

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

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

Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

Client/Server-Programmierung

5. Übung zu Software Engineering

Oracle: Abstrakte Datentypen:

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

JDBC. Java DataBase Connectivity

J2EE-Praktikum. Enterprise JavaBeans Patterns. Peter Thiemann. J2EE-Praktikum, WS2005/2006. Universität Freiburg

Bean-Mapping mit MapStruct

Isolationsstufen für Transaktionen. Dr. Karsten Tolle

Connection Pooling. Was ist das?? Unter Connection Pooling versteht man generell die Wiederverwendung physischer Datenbankverbindungen.

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

JDO Java Data Objects

Transaktionen in Praxis. Dr. Karsten Tolle Vorl

Java-Objekte mit SQL verheiraten

Enterprise JavaBeans Überblick

6.9 Java Server Pages

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

Enterprise JavaBeans (mit JBoss)

Spring Dynamic Modules for OSGi Service Platforms

Exercises for the course Databases and Information Systems I WS 2006/2007 Special exercise JDBC

Klausur Datenbanken II

3. Datenbankzugriff (JDBC) Grundlagen der Programmierung II (Java)

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

Probleme bei der Nutzung der Bean Validation in JPA

Client/Server-Programmierung

Transkript:

Java-Persistenz-Architekturen Rudolf Jansen Freiberuflicher Entwickler und Autor http://www.rudolf-jansen.de info@rudolf-jansen.de DOAG Konferenz 1.12.2008

Inhalt JDBC JPA (Java Persistence API) Spring Alternative Architekturen( Java in der DB, Java Embedded Databases ) Vergleich, Diskussion

JDBC-Historie Java DataBase Connectivity Zugriff auf DB über Java-API-Funktionen ResultSet resset = stmt.executequery("select prs_vorname, prs_nachname from person"); Abbildung auf konkrete Datenbank durch JDBC- Treiber Portabilität (theoretisch) Historie: - JDBC 1.0 (1997, JDK 1.1) - JDBC 2.0 (JDK 1.2) - JDBC 3.0 (2002, JDK 1.4) - JDBC 4.0 (2006, Java SE 6)

JDBC: Pro und Contra Manuelle JDBC-Programmierung: Wer macht das denn heute noch? Vorteil : Programmieren ganz nah an der Datenbank Nachteil : SQL-Statements direkt im Sourcecode - Wartbarkeit - Portabilität - viel Handarbeit nötig (Fehleranfällig) -

JDBC: Pro und Contra Vielzahl von höherwertigen Techniken und Tools, die auf JDBC aufbauen: - Java Persistence API (JPA) - Spring - Hibernate - JDO - EJB -

JDBC-ExceptionHandling Connection con = null; Statement stmt = null; try{ con = getdatasource().getconnection(); stmt = con.preparestatement( select ); ResultSet resset = stmt.executequery();... stmt.close(); con.close(); } catch (SQLException ex) { }

JDBC-ExceptionHandling Connection con = null; Statement stmt = null; try{ con = getdatasource().getconnection(); stmt = con.preparestatement( select ); ResultSet resset = stmt.executequery();... Was passiert, wenn hier ein stmt.close(); Fehler auftritt? con.close(); } catch (SQLException ex) { }

JDBC-ExceptionHandling Connection con = null; Statement stmt = null; try{ con = getdatasource().getconnection(); stmt = con.preparestatement( select ); ResultSet resset = stmt.executequery();... Was passiert, wenn hier ein stmt.close(); Fehler auftritt? con.close(); Ressourcen werden nicht } catch (SQLException ex) { freigegeben!!! }

JDBC-ExceptionHandling Connection con = null; Statement stmt = null; try{ con = getdatasource().getconnection(); stmt = con.preparestatement( select ); ResultSet resset = stmt.executequery();... stmt.close(); con.close(); } catch (SQLException ex) { } finally { if ( stmt!= null ){ try { stmt.close(); } catch (SQLException ex) { } } // analog con.close() }

JDBC - Diskussion Weit verbreitet (Studium, Bücher, Schulungen, ) ABER: viel Handarbeit nötig - Wartungsaufwand - Sourcecode-Umfang und Übersichtlichkeit Kritiker: JDBC nur für Kleinprojekte - Suche nach Alternativen (nicht nur für Enterprise-Anwendungen)

Java EE / EJB-Persistenz EJB (Enterprise Java Beans) Einführung 1998 - Beginn des Siegeszuges Java auf dem Server - Auszug aus der EJB 1.0 Spezifikation: Enterprise JavaBeans will make it easy to write applications. Application developers will not have to understand low-level transaction and state management details; multi-threading; resource pooling; and other complex low-level APIs

Java EE / EJB-Persistenz Praxis-Erfahrungen mit EJB 1.0 und 2.0 Nimmt dem Entwickler viel Arbeit ab bei - Transaktionssteuerung - Skalierbarkeit - Sicherheit Macht dem Entwickler aber viel Arbeit bei - Persistenzfragen o Performance o Keine Vererbung möglich o Komplexität o Nur in EJB-Anwendungen einsetzbar (kein Java SE) Als reine Persistenzlösung sind EJBs (<Version 3.0) unnötig komplex

Java-Persistenz Stand in den Jahren 2004/2005 Java SE Java EE JDBC Hibernate EJB 2.x Eigene Frameworks JDO

Java-Persistenz Stand in den Jahren 2004/2005 Java SE Java EE JDBC Hibernate EJB 2.x Eigene Frameworks JDO Konkurrenzkampf

Java-Persistenz ab dem Jahr 2006 Java SE Java EE JDBC Hibernate EJB 3.0 Eigene Frameworks Java Persistence API (JPA) JDO

Java Persistence API Entstanden im Rahmen der EJB 3.0- Spezifikation Eigene Spezifikation (JSR 220) Ideengeber : - JDO - Hibernate - TopLink - Schlechte Erfahrungen mit EJB JPA = Spezifikation - Implementierung u.a. durch Hibernate Persistenzlösung für Java EE und Java SE!!! Einsatz von Java 5-Features (Annotations)

Java Persistence API Ziel: Keine (bzw. minimale) Vorgaben für Persistenzaspekte - Verwendung von POJOs (Plain Old Java Objects) Vererbung Einsatz von Java 5-Features (Annotations) Keine Abhängigkeit von Containern, Application Servern etc. Keep it simple

Java Persistence API Zentrale Komponente von JPA: Entity Normale Java-Klasse - Vererbung möglich - Keine Vorgaben durch Basisklassen - Keine Vorgaben durch Schnittstellen POJO

Java Persistence API @Entity public class Buch implements Serializable{ @Id private int id; private String titel; public Buch(){} public int getid() { return id;} public void setid( int id ){ this.id=id } public String gettitel() { return titel;} public void settitel( String titel ){ this.titel = titel;} }

Java Persistence API Buch - Id - titel JPA EntityManager Tabelle BUCH ID Titel 4711 xyz 4712 blabla

Java Persistence API Buch - Id - titel JPA EntityManager Bietet Methoden zum - Anlegen - Ändern - Löschen - Verwalten von POJOs (Instanzen von Buch) Tabelle BUCH ID Titel 4711 xyz 4712 blabla

Java Persistence API Configuration by Exception Anzahl der zur Konfiguration benötigten Annotations soll minimiert werden Sinnvolle Defaults Nur Ausnahmen explizit angeben Beispiel: Defaultregeln für Mapping Java-Klasse Datenbanktabelle: - Klassenname = Tabellenname - Attributname = Spaltenname Abweichungen von diesen Regeln müssen per Annotation angegeben werden

Java Persistence API Buch - Id - titel JPA EntityManager Tabelle BIBLIOTHEK ID Name 4711 xyz 4712 blabla

Java Persistence API @Entity @Table(name= BIBLIOTHEK ) public class Buch implements Serializable{ @Id private int id; @Column(name= NAME ) private String titel; public Buch(){} public int getid() { return id;} public void setid( int id ){ this.id=id } public String gettitel() { return titel;} public void settitel( String titel ){ this.titel = titel;} }

JPA - EntityManager Konfiguration/Initialisierung des EntityManager: EntityManagerFactory emf=persistence.createentitymanagerfactory( OracleTestDB"); EntityManager em=emf.getentitymanager(); EntityTransaction tx=em.gettransaction(); tx.begin(); Buch neuesbuch = new Buch(); neuesbuch.setid(4713); neuesbuch.settitel( Ein ganz neues Buch ); em.persist(neuesbuch); tx.commit(); em.close();

JPA - EntityManager Konfiguration/Initialisierung des EntityManager: EntityManagerFactory emf=persistence.createentitymanagerfactory( OracleTestDB"); EntityManager em=emf.getentitymanager(); EntityTransaction tx=em.gettransaction(); tx.begin(); Buch neuesbuch = new Buch(); neuesbuch.setid(4713); neuesbuch.settitel( Ein ganz neues Buch ); em.persist(neuesbuch); Woher kennt JPA die OracleTestDB? tx.commit(); em.close();

JPA - Konfiguration Datei persistence.xml: <persistence> <persistence-unit name= OracleTestDB"> <provider>oracle.toplink.essentials.ejb.cmp3.entitymanagerfactoryprovider</provider> <class>de.javastarterdays.buch</class> <properties> <!-- Provider-specific connection properties --> <property name="toplink.jdbc.driver" value="oracle.jdbc.driver.oracledriver"/> <property name="toplink.jdbc.url" value="jdbc:oracle:thin:scott/tiger@localhost:1521:xe"/> </properties> </persistence-unit> </persistence>

JPA Einträge finden und ändern EntityTransaction tx=em.gettransaction(); tx.begin(); Buch altesbuch = em.find(buch.class, 4711); if( altesbuch!= null ){ altesbuch.settitel( Ein geaenderter Titel ); } tx.commit();

JPA Abfragen Abfragen mit mehr als einem Ergebnis Query query = em.createquery( SELECT b FROM Buch b ) Collection buecher = query.getresultlist(); Abfragen mit genau einem Ergebnis Query query = em.createquery( SELECT b FROM Buch b WHERE b.id=:nr ); query.setparameter( nr, 4711); Buch dasgesuchtebuch = query.getsingleresult();

JPA Provider Übersicht über die bekanntesten Provider: Top Link OpenJPA Hibernate

Spring Ausgangspunkt EJB: Häufig genannte Kritik an EJB: - Komplexität - Zu viele Vorgaben, d.h. Klassen/Schnittstellen, die verpflichtend sind - Abhängigkeit von J2EE Container - Tests aufwändig - Performance bei Persistenzfragen kritisch - Abgrenzung J2EE J2SE Suche nach Alternativen

Spring - Historie Buch Expert One-on-One J2EE Design and Development Rod Johnson (2002) Begleitmaterial: Sourcecode für Applikationsframework Überführung in Open-Source-Projekt (2003) Name: Spring Heute: Populäres Open-Source-Framework Freie Nutzung Firma hinter Spring : SpringSource

Spring - Spring ist ein Framework Kein Produkt Keine Spezifikation Kein O/R-Mapping-Tool Bietet nicht nur Lösungen für Persistenz-Schicht, sondern viel mehr - Spring bietet Services an, um das Zusammenspiel von (Java-)Komponenten zu vereinfachen Einheitliche API-Schicht Abhängigkeiten zwischen Komponenten verwalten Aspekt-Orientierte Programmierung - Session Das SpringSource Advanced Pack for Oracle 13:00 Uhr

Spring und Persistenz Spring liefert keine eigene Persistenzlösung Stattdessen: Vereinfachung bei der Nutzung bestehender Persistenztechniken durch zusätzliche Abstraktionsschicht Spring kann zusammen mit allen bekannten Persistenztechniken eingesetzt werden: - JDBC - JDO - JPA - Hibernate -

Spring und Persistenz Spring vereinheitlicht Transaktionssteuerung, Exceptions, Verbindungshandling Hybride Ansätze möglich Entwickler implementiert nur die Businesslogik (Persistenz: Abfragen und Behandlung der Ergebnisse) Spring kümmert sich um den Rest Beispiel: JDBC Verbindungs- und Exceptionhandling

JDBC Connection con = null; Statement stmt = null; try{ con = getdatasource().getconnection(); stmt = con.preparestatement( select * from emp ); ResultSet resset = stmt.executequery();... stmt.close(); con.close(); } catch (SQLException ex) { } finally { if ( stmt!= null ){ try { stmt.close(); } catch (SQLException ex) { } } // analog con.close() }

JDBC Connection con = null; Statement stmt = null; try{ con = getdatasource().getconnection(); stmt = con.preparestatement( select * from emp ); ResultSet resset = stmt.executequery();... stmt.close(); con.close(); } catch (SQLException ex) { } finally { if ( stmt!= null ){ try { stmt.close(); } catch (SQLException ex) { } } // analog con.close() } Anwendungscode ist nur das! Rest ist - Verbindungshandling - Exception Handling und wird bei jedem JDBC-Zugriff benötigt ca. 80% des JDBC-Sourcecodes wiederholt sich

Spring Dasselbe mit Spring: public List getemplist() { return getjdbctemplate().queryforlist( select * from usertable ); } JdbcTemplate kümmert sich um den Rest DB-Zugriffsparameter in externer Konfigurationsdatei Eigene Spring-Exception-Hierarchie Exceptions unabhängig von verwendeter Technologie (JDBC- Exceptions ansonsten unterschiedlich zu Hibernate-EXceptions)

Inhalt JDBC JPA (Java Persistence API) Spring Alternative Architekturen (Java in der DB, Java Embedded DB ) Vergleich, Diskussion

Alternative Architekturen Bisher immer Standard-Architektur : Direktzugriff, z.b. JDBC Java-Anwendung Alternativen: Java in der Datenbank EJB, OR-Mapper, Datenbank in der Java-Anwendung Datenbank

Java in der Datenbank Java-Source-Code (*.java) Java-Class-Dateien (*.class) JAR-Archive (*.jar) loadjava Oracle-DB Java- Compiler Java- Sourcen Java- Klassen Java- Ressourcen

Alternative Architekturen Bisher immer Standard-Architektur : Direktzugriff, z.b. JDBC Java-Anwendung Alternativen: Java in der Datenbank EJB, OR-Mapper, Datenbank in der Java-Anwendung Datenbank

Java Embedded Datenbanken Einsatzgebiete: - Speicherung von Konfigurationsdaten - Ablage temporärer Nutzerdaten -... (andere Mini-Persistenz-Anforderungen ) Standardalternativen: - Speicherung in Betriebssystem-Datei - Speicherung in richtiger Datenbank

Java Embedded Datenbanken Standardalternativen: Speicherung in Betriebssystem-Datei: + Schnell implementiert - Sicherheit, Transaktionen, Backup, Speicherung in richtiger Datenbank: + Sicherheit, Transaktionen, Backup, - Kosten, Administration beim Endbenutzer erforderlich, Kompromisslösung: Embedded Datenbank

Java Embedded Datenbanken Java-Anwendung JDBC Java- Embedded- Datenbank JVM

Inhalt JDBC JPA (Java Persistence API) Spring Alternative Architekturen (Java in der DB, Java Embedded DB ) Vergleich, Diskussion

Auswahl der richtigen Persistenzstrategie Entscheidungskriterien Art der Java-Anwendung (J2SE, J2EE, J2ME) Meist: Persistenz nicht einzige Fragestellung Größe des Projektes Erfahrung mit Frameworks (Unterstützung der eingesetzten Datenbank) In bestehenden Projekten meist keine Wahl mehr

Auswahl der richtigen Persistenzstrategie Einige Lösungsansätze: Kleine Projekte mit einfachen DB-Zugriffen JDBC Neue Enterprise-Anwendungen JPA Hibernate Spring als Empfehlung für umfassendes Framework (nicht nur für Persistenz) Eigenentwicklung von Frameworks eher meiden