DOAG Regionaltreffen
Trier/Saarland
Verwendung von TopLink in
J2EE Applikationen
09. September 2003
Marcus Keuper, Pfeil GmbH
mkeuper@pfeilgmbh.de
www.pfeilgmbh.de
Übersicht
Aufgabe
Persistenz-Schicht
TopLink als O/R-Mapper
Realisierung
Ausblick
Aufgabe
Migration einer Client-ServerApplikation nach J2EE
Fachl. Anforderungen
Ergonomisch
Datenintegrität
Erweiterung der Funktionalität
Techn. Anforderungen
Java Applikation J2EE
Thin-Client
Plattformunabhängig
Performant
Zukunftssicher
Abwärtskompatibel
J2EE Architektur
Quelle: Sun
Persistenz-Schicht
Eine Abstraktionsebene, welche die
Details der Speicherung in einer
Datenbank von Objekt- und
Applikationsschicht trennt
JDBC
JDBC ist kein PersistenzFramework, aber es bietet die
Möglichkeit, auf seiner Basis ein
Framework zu erstellen
JDBC verwendet SQL und liefert
relationale „result sets“
Sehr schnell
Hoher Programmieraufwand
Entity Beans
Langsam
Skalierbar
Hohe Komplexität
Aufwändig zu Warten
O/R Mapper
Bester Kompromiss zwischen
Nutzen und Aufwand
OJB (Apache)
Hibernate (Sourceforge)
CoCo-Base
TopLink
O/R-Mapper
Bytecode-Enhancing
Via Reflection
Deklarativ (XML)
Vorteile eines PersistenzFrameworks
Übernimmt die Übersetzung von
Datenbankobjekten in Java-Objekte
Stellt eine abstrahierte
Abfragesprache zur Verfügung
Verwaltet Datenbankanbindungen
und Transaktionen
Eigenentwicklung ?
Meist Projektressourcen > 40 %
Hohe Wartungskosten
Fehleranfälligkeit in Applikationen
Flexibilität bei Applikationsänderung
Was ist TopLink ?
O/R-Mapper
Deklarativer Mapper
„proven industry-standard
persistence framework“
Realisierung
Standard-Vorgehensweise
Randbedingungen
Übernahme des DatenbankSchema
Beispiel
Standard-Vorgehen
Daten-Modell
Beispiel WebPSE
Use-Case
Beispiel WebPSE
Use-Case „Spesen erfassen“
Tabelle „Spesen“
P_ID
M_ID
BETRAG
DATUM
ZWECK
ZAEHLER
CHAR(30)
NUMBER(3)
NUMBER(19,2)
DATE
VARCHAR2(2000)
NOT NULL NUMBER(22)
Java-Klasse
public class Spesen {
private double betrag;
private Date datum;
private BigDecimal mitarbeiterId;
private String projektId;
private BigDecimal spesenId;
private String zweck;
private Projekt projekt = null;
// Rückreferenz auf Projekt
public Spesen () {
} .......
+ getter/setter - Methoden
Klassen
Mapping-Info
Tabelle
TopLink Workbench
TopLink Workbench
Konfiguration
Möglichkeit des nativen Sequencing
Lazy Initialisation via „Indirection“
Verschiedene Mappings möglich
„Direct to Field“
„One to One“
„One to Many“
„Many to Many“
Implizite Typkonvertierung
Und vieles mehr....
Object-Caching
Standard-Verhalten
Abfrage
SQL-Query
Ergebnis(se)
Existenzprüfung mit Primary Key im
Cache
Ja “liefere Objekt aus Cache“
Nein Datenbank-Abfrage, „erstelle Objekt im Cache
und liefere es zurück“
Caching-Strategien
None
Always
Only if newer Version
Metadaten-Architektur
Mit Hilfe der Workbench werden
Metadaten im XML-Format erzeugt
Mapping-Informationen sind nicht im Objekt gespeichert
TopLink verändert weder das Objektmodell noch das
Datenbank-Schema
Schnelles Anpassen Änderungen
(Datenbank)
Projekt-Deskriptor
Deskriptoren
Beispiel WebPSE
Import der generierten Metadaten
mit Hilfe einer Java-Klasse
Herstellen der Datenbankanbindung
Datanbankanbindung im Kontext
der Applikation
Serviceorientierte Architektur
Use-Cases in Struts-Actions
implementiert
Ergebnisse werden in FormBeans
gewrappt und auf JSPs ausgegeben
Abfragen 1
public Spesen readSpesen(BigDecimal id) {
Spesen spe = new Spesen();
ExpressionBuilder builder = new ExpressionBuilder();
Expression expr = builder.get("spesenId").equal(id);
Lesen aus DB/Cache
spe = (Spesen)session.readObject(Spesen.class,expr);
return spe;
}
Vorteil: Kein einziges SQL-Statement nötig
Kann aber bei Bedarf in der „Mapping
Workbench“ konfiguriert werden
Abfragen 2
Erstellen der
Abfrage
public Vector spesenAnzeigen(String projektId) {
Vector vecSpesen = new Vector();
ReadAllQuery query = new
ReadAllQuery(Spesen.class);
ExpressionBuilder builder = new ExpressionBuilder();
Expression expr1 =
builder.get("projektId").equal(projektId);
Expression expr2 =
builder.get("mitarbeiterId").equal(userId);
Expression finalExpr = expr1.and(expr2);
Sortieren
query.setSelectionCriteria(finalExpr);
query.addAscendingOrdering("datum");
vecSpesen = (Vector)session.executeQuery(query);
return vecSpesen;
}
Datensicht
FormBean
Actions
Zusammenfassung
Reduzierung des
Entwicklungsaufwands
Intuitive graphische Oberfläche zum
Entwickeln (Mapping Workbench)
100% Pure Java
Anbindung an fast jede relationale
und nicht-relationale Datenbank
durch passende JDBC-Treiber
möglich
Alternativen
Open Source
OJB (Apache)
Hibernate (Sourceforge)
Commercial
TopLink
CoCo-Base
Ausblick
Komplette Migration der Applikation
Komplettes Abschalten der ‚alten‘
Client-Server-Applikation
Zugang zur Applikation über die
Firmen-Homepage
Schluss
Schlechte
Dokumentation/Kompatibilität
Hoher Einarbeitungsaufwand
Durch Migration höhere
technologische Qualität
Leichte Wartbarkeit
Leichte Anpassung
DOAG Regionaltreffen
Trier/Saarland
Verwendung von TopLink in
modernen J2EE Applikationen
09. September 2003
Marcus Keuper, Pfeil GmbH
mkeuper@pfeilgmbh.de
www.pfeilgmbh.de