Verwendung von TopLink in J2EE Applikationen

Werbung
DOAG Regionaltreffen
Trier/Saarland
Verwendung von TopLink in
J2EE Applikationen
09. September 2003
Marcus Keuper, Pfeil GmbH
[email protected]
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
[email protected]
www.pfeilgmbh.de
Herunterladen