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