Architecture Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

Object Relational Mapping
Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Objektrelationales Mapping mit JPA
Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Objektrelationales Mapping mit JPA Advanced Topics Jonas Bandi Simon Martinelli.
Metamodell, Reflection in objektorientierten Sprachen
JPQL Java Persistence Query Language
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Objektrelationales Mapping mit JPA Working with Persistent Objects Jonas Bandi Simon Martinelli.
Objektrelationales Mapping mit JPA
Objektrelationales Mapping mit JPA Getting Started Jonas Bandi Simon Martinelli.
Zusammenfassung / Ausblick Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Java 2 Enterprise Edition (J2EE)
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Transaction Script Software Component Technology for Distributed Applications.
Modulare Programmierung
DVG Klassen und Objekte
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Einführung in die Programmierung Datensammlung
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Herzlich Willkommen… welcome… soyez la bienvenue….
Working With Persistent Objects
Wir bauen uns eine Webapplikation!
1 Sg 3 – JSP - Java Server Pages Softwareengineering Praktikum Java Server Pages Nicole Brandstätter Josef Sturm Karl Streicher.
Objektrelationales Mapping mit JPA 2.0
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Aichinger Christian, Strasser Jürgen. Inhalt JSF EJB Praxis - Integration.
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
Bean Validation JSR-303 Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Objektrelationales Mapping mit JPA 2.0
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Getting Started Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Dynamische Datentypen
Referent: Stephan Metzler
Ein JEE 5 Webframework Jörg Wüthrich Infopoint, 4. Februar 2009
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Hibernate (OR-Mapping)
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
11 Zugriffskontrolle (Access Control) Ziele Privilegien Rollen GRANT und REVOKE Befehl Privilegien Rollen GRANT und REVOKE Befehl.
EJB Architektur für große Web - Applikationen Gerald Weber
Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Rusch Philipp, Spiegel Philipp, Sieber Michael, Ucar Sahin, Wetzel Markus.
Objektorientierte (OO) Programmierung
1 Persistence Strategies for WebServices Senior Consultant Java Forum Stuttgart, 27. Juni 2002.
© 2012 TravelTainment Datenbankzugriffe in Java-Applikationen mit Hilfe des Spring Frameworks Simon Wirtz Seminarvortrag WS 13/14 Oktober 2013.
Protokollieren, überwachen und verfolgen Vortrag zum Seminar „Aspektorientierte Programmierung“ von Andre Kaplick - 6. Juni 2016.
Tutorstunde 10.
 Präsentation transkript:

Architecture Persistente Domänenmodelle mit JPA 2.0 und Bean Validation

2 Java EE 6 Integration

JSF 2.0 und Bean Validation <h:inputText id="name" value="#{employeeBean.employee.name}"> 3

JSF und NULL Werte Leere Input Felder werden von JSF als «» (leerer String) behandelt Dies ist evtl. ein Problem für die Constraint greift nicht Lösung: javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL true Achtung vor allfälligen «Nebenwirkungen»! 4

EJB 3.x Dependency Liefert eine Referenz zur Liefert eine Referenz zum EntityManger private EntityManager private EntityManagerFactory emf;

JPA 2.0 und JSR statt statt statt bei numerischen bei für Collections und Arrays 6

Stateless Session Beans public class EmployeeService type=PersistenceContextType.TRANSACTION) private EntityManager em; public Employee findById(Integer id) { Employee e = em.find(Employee.class, id); return e; }

Stateful Session Beans public class EmployeeService type=PersistenceContextType.EXTENDED) private EntityManager em; public Employee findById(Integer id) { Employee e = em.find(Employee.class, id); return e; }

Persistence Unit 9 jdbc/emp

JPA 2.0 und JSR statt statt statt bei numerischen bei für Collections und Arrays 10

11 Patterns

Data Access Object (DAO) Problem You want to encapsulate data access and manipulation in a separate layer Solution Use a Data Access Object to encapsulate all access to the persistent store. The Data Access Object manages the connection with the data source to obtain and store data DAOs werden als einfache, zustandslose Klassen realisiert, die den Zugriff auf eine Datenquelle kapseln Ziele: Trennung von Business Logik und technischer Zugriffslogik Kapselung von Zugriff auf Datenbank oder Fremdsystem

DAO Klassendiagramm

DAO und JPA Häufig überflüssig dank EntityManager Wenn schon DAO dann generisch public interface GenericDAO { T create(T t); T find(Class type, Serializable id); T update(T t); void delete(Object t); List findByNamedQuery(String queryName); List findByNamedQuery(String queryName, Map parameters); }

Transfer Object (TO) Problem You want to transfer multiple data elements over a tier Solution Use a Transfer Object to carry multiple data across a tier Daten werden in Datencontainern zusammengefasst und über Tier-Grenzen transportiert Das Konzept sollte generell zwischen den Schichten eingesetzt werden Ziel: Verringerung der übertragenen Datenmenge

TO und JPA Mit Constructor Expressions existiert eine einfache Möglichkeit direkt aus den Resultaten Transfer Objects zu erzeugen. public class EmpMenu { public EmpMenu(String employeeName, String deptName){...} } List result = em.createQuery( "SELECT NEW jpa.util.EmpMenu(e.name, e.department.name) " + "FROM Project p JOIN p.employees e " + "where p.name = "ZLD").getResultList(); for (EmpMenu menu : result) { log.info(menu.employeeName + "," + menu.deptName); }

Schichtung und Verteilung ApplikationsserverDB Server Datenzugriff Business Client oder Webserver Präsentations- schicht Datenhaltung ServiceFassade 3rd Party Applikation XY TOs und Entities Ausschliesslich TOs

Client/Server Ausschliesslich TOs Entities

Lazy Loading und Verteilung Lazy Loading deaktivieren Vorteil: einfach, für wenig Daten nutzbar Nachteil: bei vielen Daten aus Performance Gründen nicht nutzbar Open Session in View Pattern geht davon aus, dass in einer Webappliaktion die Session erst geschlossen wird, wenn der Request beendet ist. Vorteil: Die Daten werden bei Bedarf nachgeladen Nachteil: Funktioniert nur bei einer Webapplikation, Änderungen der Daten auf dem GUI-Level unter Umgehung der Businesslogik, saubere Trennung der Layer nicht möglich. Preload Pattern: Der Aufrufer einer DAO-Methode übergibt Informationen, welche Daten vorgeladen werden sollen. Vorteil: Abhängig von der Situation kann Lazy Loading eingesetzt oder umgangen werden Nachteil: Kann zu einer Schwemme von DAO-Methoden führen um die möglichen Kombinationen anzubieten. 19 Java Persistence API

Open Session in View 20 Java Persistence API HTTP Session Transaktion 1Transaktion 2 O1 Lazy

Preload Pattern nach Jürgen Kohl (1) Jürgen Kohl beschreibt in der Ausgabe 4/2008 des Java Magazins sein Preload Pattern, dass in einigen Praxisprojekten erfolgreich eingesetzt wurde. Hierbei liegt der Fokus darauf die Methodenschwemme zu vermeiden und weiterhin die Nutzung eines GenericDAO zu erlauben. Seine Anforderungen sind: generischer Mechanismus keine Verkomplizierung der Backend-Methoden bei steigender Komplexität des Domain Models Anwender der Backend-Methoden können denkbare Preload-kombinationen selbst definieren. 21 Java Persistence API

Preload Pattern nach Jürgen Kohl (2) 22 Java Persistence API public class Preload { private Class modelClass; private String property; public Preload(Class modelClass, String property) { this.modelClass = modelClass; this.property = property; } }

Preload Pattern nach Jürgen Kohl (3) 23 Java Persistence API public abstract class GenericDAO { private Class persistentClass; private String getPropertyGetterName(String property ) { String propertyUpper = property.toUpperCase().substring(0, 1); return "get" + propertyUpper + property.substring(1); } private Object invokeGetter(Object entity, Preload preload) { String getterName = getPropertyGetterName(preload.getProperty()); try { Method method = preload.getModelClass().getMethod( getterName, (Class[]) null); return method.invoke(entity, (Object[]) null); } catch (Exception ex) { throw new RuntimeException("Can't invoke getter for property: " + preload.getProperty(), ex); } }

Preload Pattern nach Jürgen Kohl (4) 24 Java Persistence API // Fortsetzung GenericDAO protected void preload(Object entity, Preload[] preloads) { if (entity instanceof Collection) { for (Object resultEntity : (Collection) entity) { preload(resultEntity, preloads); } } else { for (Preload preload : preloads) { if (preload.getModelClass().isInstance(entity)) { Object getterResult = invokeGetter(entity, preload); preload( getterResult, preloads); } }

Preload Pattern nach Adam Bien Idee: Verwendung JXPath für die Initiatlisierung von Lazy Loading Beziehungen Beispielklasse mit Lazy OneToOne Beziehung: Aufruf der Getter-Methode mit JXPath: 25 Java Persistence public class Master private Detail detail;... } JXPathContext.newContext(master).getValue("/detail");

Batch Problematik Sequenzielle Verarbeitung von grossen Datenmengen Verwendung von Cursors mit JPA nicht möglich Lösung Pagination Vorsicht Persistence Context kann gross werden und sollte regelmässig aufgeräumt werden (EntitManager.clear())

Clustering Zur Erhöhung der Verfügbarkeit und der Verbesserung der Performance werden Application Server häufig geclustert Problem Persistence Context auf mehreren Knoten vorhanden Synchronität mit Datenbank nicht gegeben Lösung Synchronisation (Providerabhängig) Referesh der Entitäten bei Bedarf