Title: Persistenz in J2EE-Architekturen
1Persistenz in J2EE-Architekturen
Rolf KnollTechnischer LeiterPersistence
Software GmbHRolf.Knoll_at_persistence.com
2Agenda
- Definitionen
- Kriterien
- O/R-Mapping
- Performanz und Skalierbarkeit/Caching
- Persistenzvarianten in J2EE
- Einsatzszenarien Persistenzframeworks
- Lösungen
- JDO
- Hibernate
- Persistence EdgeXtend
- Bewertung/Ausblick
- FA
3Persistenz Allgemeine Definitionen
- Fremdwörter-DudenBestehenbleiben eines
Zustandes über längere Zeit - Software-Entwicklung (allgemein)dauerhaftes
Speichern von Daten ĂĽber Programmaufrufe hinweg - Objektorientierte Software-Entw.dauerhaftes
Speichern der Zustände von (Geschäfts-)Objekten
4Persistenz(mechanismus) Meine Definition
- Die Abbildung zwischen (relationalen)
Datenbeständen und Geschäftsobjekten für den
performanten Einsatz in objektorientierten
Systemen - Flexibles O/R-Mapping
- Performanzsteigernde Mechanismen Caching
5Java 2 Enterprise Edition J2EE Definition
- the standard for developing component-based
multitier enterprise applications. Features
include Web services support and development
tools (SDK)
6Kriterien zur Beurteilung
7O/R-Mapping Kriterien
Row Data Gateway Eine Objektinstanz
repräsentiert eine Tabellenzeile
- Vererbung
- Horizontal
- Vertikal
- Single Table
Collections - Spezifizierbare Typen
- Relationen
- 1-zu-1
- 1-zu-n
- m-zu-n
- Aggregation
- Assoziation
- Persistenztypen
- Entitties
- Dependents
Attribute - Erweiterbares Typsystem
- Queries
- Deklarativ Spezifizierbar
- Query Language
8Caching BegrĂĽndung fĂĽr den Fokus
- Caching is such a fundamental concept in
object/relational persistence that you cant
understand the performance, scalability, or
transactional semantics of an ORM implementation
without first knowing what kind of caching
strategy (or strategies) it uses. - There are three main types of cache
- Transaction scope -gt transaktionales Caching
- Process scope -gt Shared Caching
- Cluster scope - gt Distributed Caching
- (Aus Hibernate in Action von Christina Bauer
und Gavin King)
9J2EE EinsatzszenarienPersistenz und Caching
Client Container
App Client
J2EE Application Server
Persistenz-fw
- Caching von
- Objektinstanzen
- Objektgeflechten
- Cachingstrategie
- Instanziierung
- Invalidierungvon Objekte
Shared Cache
Tx Cache
Tx Cache
RDBMS
10J2EE EinsatzszenarienPersistenz und Caching
Client Container
App Client
J2EE Application Server
J2EE Application S
Persistenz-fw
Persistenz-fw
ation Server
Persistenz-fw
Tx Cache
Shared Cache
Shared Cache
Shared Cache
RDBMS
11Persistenzvarianten
12J2EE - Java 2 Enterprise EditionPersistenzvariant
en
Client Container
WEB Device
J2EE Application Server
App Client
WEB Client
JMS
WEB Container
JavaMail
JNDI
Services
JDBC
JSP
Servlet
JTA
EJB Container
JCA
Session
Entity
POJO
RDBMS
13J2EE - Java 2 Enterprise Edition
Persistenzvarianten
Client Container
WEB Device
J2EE Application Server
App Client
WEB Client
JMS
WEB Container
JavaMail
JNDI
Services
JDBC
JSP
Servlet
JTA
EJB Container
JCA
Session
Entity
POJO
RDBMS
14J2EE - Java 2 Enterprise Edition
Persistenzvarianten
J2EE - Java 2 Enterprise EditionCMP Persistenz
des Containers
J2EE - Java 2 Enterprise EditionBMP JDBC
handcodiert
J2EE - Java 2 Enterprise Edition
J2EE - Java 2 Enterprise EditionCMP Pfw direkt
integriert
J2EE - Java 2 Enterprise EditionBMP Pfw direkt
integriert
J2EE - Java 2 Enterprise EditionBMP Pfw ĂĽber
JCA integriert
J2EE - Java 2 Enterprise EditionPOJO Pfw ĂĽber
JCA integriert
- J2EE-Compliant
- Portable bezĂĽglich AppServer/DBMS
- CMR
- EJB-QL
- Implementierung wenig aufwändig
- Schlechte Performanz
- Nur für grobgranulare Komponenten adäquat
- J2EE-Compliant
- Portable bezĂĽglich AppServer
- Bedingt portabel bezĂĽglich DBMS
- Implementierung sehr aufwändig
- gute Performanz nur schwer erreichbar
- J2EE-Compliant
- Portable bezĂĽglich DBMS
- Implementierung wenig aufwändig
- Optimierungen des Pfw nutzbar
- Nicht portabel bezĂĽglich AppServer
- Nutzung von proprietärem Container-API
- J2EE-Compliant
- Portable bezĂĽglich DBMS
- Implementierung wenig aufwändig
- Optimierungen des Pfw nutzbar
- Nicht portabel bezĂĽglich AppServer
- Nutzung von proprietärem Container-API
- J2EE-Compliant
- Portable bezĂĽglich DBMS
- Portabel bezĂĽglich AppServer
- Implementierung wenig aufwändig
- Optimierungen des Pfw nutzbar
- Portable bezĂĽglich DBMS
- Portabel bezĂĽglich AppServer
- Auch ohne AppServer verwendbar
- Implementierung wenig aufwändig
- Optimierungen des Pfw nutzbar
J2EE Application Server
EJB Container
Services
JCA
Persistenz-fw
CMP
BMP
POJO
Tx Cache
Shared Cache
RDBMS
15Produkte/Produktgruppen
16JDOCharakterisierung
- Spezifikation fĂĽr transparente Persistenz in
Java - Mapping
- Beliebige Java-Objekte können mit JDO persistent
gemacht werden, auch ohne verfĂĽgbaren Quellcode - JDO stellt explizit keine Voraussetzungen an die
Speichermedien - Je nach Implementierung können RDBMS, OODBMS, XML
und/oder andere Medien unterstĂĽtzt werden - Die Mappinginformation wird fĂĽr die persistente
Klassen in XML-Files spezifiziert - Mit JDO-QL umfassende QL verfĂĽgbar
- Die Integration in J2EE AppServer erfolgt ĂĽber
JCA - JDO-Enhancer als Standardansatz fĂĽr die
Persistierung - Konkrete JDO-Implementierungen sollten
grundsätzlich leicht austauschbar sein
17JDOO/R-Mapping (v 1.0.1)
- Das Mapping ist in JDO nicht konkret spezifiziert
- Konkret unterstützte Mappingvarianten abhängig
vom jeweiligen JDO-Tool - Inheritance
- Wird generell unterstĂĽtzt.
- Relationen
- Werden generell unterstĂĽtzt
- Attribute
- Alle Java-Typen
- Mapping von BLOBs/CLOBs nicht spezifiziert
- Dependents
- SCO (Second Class Objects)
- Queries
- Mit JDO-QL vollwertige QL
18JDOO/R-Mapping (v 2.0 early draft)
- Klasse abgebildet auf
- Eine Tabelle
- Mehrere Tabellen
- Inheritance
- Sehr flexible und umfassende UnterstĂĽtzung
- Je Klasse new-table/superclass-table/no-table
- Relationen
- 1-zu-1 und 1-zu-n explizit unterstĂĽtzt
- m-zu-n abhängig vom konkreten JDO-Tool
- Versionierung
- time-stamp/state/version-field
19JDOCaching
- Transaktionales Caching
- Verwaltet vom PersistenceManager
- Verhalten von Objektinstanzen ist ĂĽber tx-Ende
hinaus spezifizierbar (RetainValues
RestoreValues) - TransaktionsĂĽbergreifendes Caching (shared
Caching) wird fĂĽr J2EE nicht unterstĂĽtzt - Verteiltes Caching nicht spezifiziert
- Konkrete JDO-Tools können jedoch weitergehendes
Caching anbieten
20JDOweitere Features
- Locking
- Default ist pessimistisches Locking
- Die UnterstĂĽtzung von optimistischem Locking
bleibt dem konkreten JDO-Tool ĂĽberlassen - Lese/Ladestrategien
- Lazy Loading von Objektmengen und Attributgruppen
(auch Objektreferenzen) spezifizierbar - Prefetching ist (noch) nicht spezifiziert
- Schreibstrategien
- Write Immediate
- Delete Actions/Update Actions (ab v 2.0)
21JDOexemplarische Tools
- SolarMetric Kodo
- Fokus auf RDBMS
- Shared Caching
- Distributed Caching mit Invalidierung (JMSTCP)
- LiBeLIS Lido
- UnterstĂĽtzt werden RDBMS XML Versant FileDB
- Shared Caching
- Distributed Caching (Tangosol, Coherent
integrierbar) - Signsoft IntelliBO
- UnterstĂĽtzt werden RDBMS XML Versant
- Distributed Caching
22JDOBewertung
- JDO ist ein Standard fĂĽr leichtgewichtige,
persistente Java-Objekte - JDO ist als Standard nicht in J2EE integriert
(Konkurrenz zu EJB 3.0) Marktrelevanz ? - Modellbasierte Entwicklung wird nicht unterstĂĽtzt
- Es gibt keine klare Trennung zwischen transient
und persistent das sind Zustände derselben
Objektinstanzen - Eine transiente Instanz muss durch den Aufruf
makePersistent explizit persistent gemacht werden - Schreiboptimierungen bezĂĽglich Datenhaltung ist
nicht spezifiziert (deferred write batch write)
aber von konkreten JDO-Tools zum Teil unterstĂĽtzt
23HibernateCharakterisierung
- Open-Source-Produkt fĂĽr transparentes
O/R-Mapping in Java - Mapping
- Allgemeine Java-Klassen (mit geringen
Einschränkungen) können mit Hibernate persistent
gemacht werden, auch ohne verfĂĽgbaren Quellcode - Die Mappinginformation wird fĂĽr die persistenten
Klassen in XML-Files spezifiziert - Mit HQL umfassende QL verfĂĽgbar
- Die Integration in J2EE AppServer erfolgt ĂĽber
JCA , JMX oder ĂĽber JNDI/JTA - Runtime-Reflection/Runtime-Bytecode-Generation
zur Persistierung
24HibernateO/R-Mapping
- Klasse abgebildet auf
- Eine Tabelle
- Mehrere Tabellen
- Inheritance
- Umfassende UnterstĂĽtzung
- table-per-class
- table-per-class-hierarchy
- table-per-subclass
- Dependents
- Objekte/Collections
- Relationen
- 1-zu-1, 1-zu-n und n-zu-m explizit unterstĂĽtzt
- Versionierung
- time-stamp/version-field
25HibernateCaching
- first level cache
- Transaktionales Caching
- Einer Session zugeordnet
- Wird innerhalb der aktiven tx automatisch genutzt
- GĂĽltigkeit der Objektinstanzen endet mit tx-Ende
- Keine weitergehende Konfiguration möglich
- second level cache
- Optional als shared cache oder distributed cache
nutzbar - Cache Policy spezifizierbar auf Klassen- und
Assoziationsbasis - Mehrere alternative Implementierungen sind
verfĂĽgbar (jeweils fĂĽr shared und distributed
cache) - FĂĽr distributed cache Objektinvalidierung und
Objektsynchronisation realisiert
26Hibernateweitere Features
- Locking
- Default ist optimistisches Locking (Time stamp
version number) - Pessimistisches Locking ist ebenfalls einsetzbar
- Lese/Ladestrategien
- Lazy Loading von Objektmengen und Objektinstanzen
spezifizierbar - Batch Fetching fĂĽr Assoziationen
- Schreibstrategien
- WriteOnCommit
- Batch Write
27HibernateBewertung
- Hibernate ist eine 0pen-Source-Lösung für
leichtgewichtige, persistente Java-Objekte - Die Relevanz von Hibernate könnte durch die
Standardisierung fĂĽr EJB 3.0 zunehmen - Modellbasierte Entwicklung wird nicht unterstĂĽtzt
- Es gibt keine klare Trennung zwischen transient
und persistent das sind Zustände derselben
Objektinstanzen - Eine transiente Instanz muss durch den Aufruf
save explizit persistent gemacht werden - Umfassendes Caching bereits im Produkt enthalten
- Write On Commit mit Batch Writing wird unterstĂĽtzt
28Persistence EdgeXtendCharakterisierung
- C-basiertes Persistenzframework mit starkem
Fokus auf Caching/verteiltem Caching - Modellbasierte/generative Vorgehensweise
- Integration in Rose, Together, Innovator, eclipse
- Die Mappinginformation wird während der
Modellierung spezifiziert und ist in separat
generierter Metadatenklassen verfĂĽgbar - Aus einem Modell Generierung von POJOs (PDOs),
BMPs, C oder C Klassen - Interface und ImplClass mit finder-Methoden und
Traversierungs-Methoden für referenzierte Objekte - jeweils zusätzlich FactoryClass, StateClass,
PKClass - Integration in J2EE AppServer als JCA Ressource
29Persistence EdgeXtendO/R-Mapping 1
- Klasse abgebildet auf
- Eine Tabelle
- Eine View (inkl StoredProcedures fĂĽr Ă„nderung)
- Inheritance
- Horizontal
- Single table
- Vertikal (ĂĽber speziellen Generator)
- Relationen
- Aggregation/Assoziation
- 1-zu-1 1-zu-n n-zu-m ĂĽber Zwischenklasse
- Rollenzuordnung/Delete Actions
30Persistence EdgeXtendO/R-Mapping 2
- Dependents
- als Subset der Tabellenspalten
- mit eigener Tabelle (ĂĽber speziellen Generator)
- Queries
- Keine vollwertige QL
- Werden über Attribute/Attributmengen während der
Modellierung spezifiziertfinder-Methoden werden
generiert - Standardfinder sind fĂĽr alle Klassen vorhanden
(findByPK findBySQLWhere, findByJoin) - Spezifische Attributtypen
- Können während der Modellierung spezifiziert und
generiert werden (auch ĂĽber mehrere
Tabellenspalten)
31Persistence EdgeXtendCaching
- Transparentes Caching von Objektinstanzen und
Objektgeflechten innerhalb von Transaktionen und
transaktionsĂĽbergreifend - Shared Cache fĂĽr Objekte auĂźerhalb von
Transaktionen - Transactional Cache ein isolierter Bereich je
tx - Verweildauer fĂĽr Instanzen spezifizierbar
- Verteiltes Caching mit Synchronisation der
Inhalte ĂĽber Cache-Instanzen hinweg - Verschiedene Transportmechanismen unterstĂĽtzt
- Teilnahme fĂĽr Instanzen spezifizierbar
- Auch in heterogenen Clustern (z.B. J2EE
kombiniert mit .NET) einsetzbar
32Persistence EdgeXtendweitere Features
- Lese/Ladestrategien
- Lazy Loading/Prefetching von Ergebnismengen
- Referenzierte Objekte werden standardmässig nicht
mitgeladen - Referenzierte Objekte können explizit in
beliebiger Tiefe mitgeladen werden
(MultiClassObjectFetch) - Schreibstrategien
- Write Immediate
- Write on Commit
- Write Never
- Batch Writing
33Persistence EdgeXtendBewertung
- Oberstes Ziel sind performante und skalierbare
Lösungen. Die Basis hierfür ist der intensive
Einsatz von Caching - Das Standardprodukt unterstĂĽtzt
performanz-optimiert die wichtigsten
Mapping-Features ĂĽber einen anpassbaren
Generator können darüberhinaus kundenspezifische
Mappings realisiert werden. - J2EE ist zwar eine der wichtigsten
Zielplattformen, aber es werden
technologieübergreifende Lösungen unterstützt
(Java, EJB, CORBA, .NET) - Das verteilte Caching mit Cache-Synchronisation
ist seit Jahren bei vielen groĂźen Kundenprojekten
produktiv im Einsatz
34FazitBewertung O/R-Mapping
- Umfassende Mapping-Varianten sind generell
vorhanden - Jeweils Metadatenbasiertes Mapping
- XML-Spezifikation mit Bytecode-Enhancer (JDO)
- XML-Spezifikation mit Runtime-Reflection
(Hibernate) - Aus dem UML-Modell generierte Persistenz- und
Metadatenklassen (EdgeXtend) - Queries
- Umfassende QL
- JDO-QL (JDO)
- HQL (Hibernate)
- Aus dem Modell generierte Querymethoden
(EdgeXtend)
35FazitBewertung Caching
- Transaktionales Caching
- state of the art
- Shared Caching
- Zustandskonsistenz als Differenzierungsmerkmal
- ease of use als Differenzierungsmerkmal
- Explizite Verwendung (Hibernate, einige
JDO-Tools) - Automatische Verwendung (EdgeXtend)
- Distributed Caching
- Performanz/Overhead als Differenzierungsmerkmal
- Synchronisationsqualität als Differenzierungsmerkm
al - Zustandssynchronisation von Objektegeflechten
(EdgeXtend, Hibernate/JBossCache) - Invalidierung (EdgeXtend, Hibernate/SwammCache,
einige JDO-Tools)
36FazitVorgehensweise/Mechanismen
- Persistenzmechanismus
- Transparent (Hibernate, JDO)
- Automatisch (EdgeXtend, EJB)
- Persistierung
- Modellbasiert (EdgeXtend)
- Bytecode-Enhancer (JDO)
- Runtime-Reflection (Hibernate)
- Zielplattformen
- Java-Anwendungen/J2EE (JDO, Hibernate)
- Java/C-Anw./J2EE/.NET/CORBA (EdgeXtend)
- Datenhaltungskomponenten
- RDBMS, OODBMS, XML, flat file (JDO
toolabhängig) - RDBMS (Hibernate, EdgeXtend)
- Tool-Realisierung
- 100 pure Java (JOD, Hibernate)
- C (EdgeXtend)
37Fragen ?
Was ist noch offen ?ErfĂĽllt das jeweilige
Produkt die Erwartungen entsprechend den Aussagen
der Dokumentation ?Machen Sie einen PoC
basierend auf Ihren projektspezifischen
Anforderungen