Die Persistenzschicht

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Imperative Programmierung
der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
DOM (Document Object Model)
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
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.
Document Object Model (DOM)
Speicherung von XML- Dokumenten als Large Objects.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
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.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
A. Zündorf, SE Group Reverse Engineering K2 1 Übersicht 1.Quelltextanalyse mit regulären Ausdrücken 2.Compilertechniken 3.Prozessanalyse 4.Dynamische Analyse.
Entwurfsmuster – Iterator
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Einführung in die Programmierung Datensammlung
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Programmierung im Netz und Internet: Einführung in die Programmiersprache Java Teil I 1 Klassen Objekte von.
Klassen und Schnittstellen Klasse: Definiert Zustandsraum ihrer Instanzen vollständig (Implementierung der Struktur, soweit Voraussetzung für die Methoden-
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
FH-Hof Singleton Pattern Richard Göbel. FH-Hof Motivation Bestimmte Klassen sollen nur ein Objekt haben Nur ein Fabrikobjekt für eine Fabrikklasse Zentraler.
D O M Document Object Model
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Universität zu Lübeck Institut für Informationssysteme Die Anwendungsschicht Implementierung der Geschäftsprozesse und Rechte.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Die Klasse String und ihre Methoden
2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Instanzmethoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Java-Kurs Übung Besprechung der Hausaufgabe
1 Java und XML Stephan Baldes Warum XML? In welchem Format wurden die Daten gespeichert? Bernd;Thomas;3;5;1987;Freiburg;Karlsruhe Peter;Maier;7;9;1980;Karlsruhe;Freiburg.
XML und Java Verarbeitung von XML-Dokumenten mit JAVA.
S INGLETON P ATTERN IN M ATLAB By Giuseppe
Tutorium Software-Engineering SS14 Florian Manghofer.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Zwei Denkansätze zur Klasse Schlange
Die Klasse Vielfrass in Java
Felder in Java.
Die Struktur einer Java-Klasse
Grundkurs Informatik 11-13
Cäsar-Verschlüsselung
Cäsar-Verschlüsselung
Implementieren von Klassen
Grundkurs Informatik 11-13
 Präsentation transkript:

Die Persistenzschicht Interfaces, Muster und DOM

Persistenzschicht Speicherung und Laden von fachlichen Objekten Mapping zwischen Objekten und „XML“ kein Wissen über die Anwendungsschicht, Präsentationsschicht

Design der Persistenzschicht Zugriff von aussen nur über eine Klasse -> Fassade Fassade wird zunächst als Interface modelliert Implementierung als Singleton d.h. nur ein Examplar der Klasse kann erzeugt werden XML-Objekte werden als DOMs persistent abgelegt (hier: mittels Infonyte)

Entwurfsmuster - Singleton Ziel: von einer Klasse existiert nur ein einziges Objekt -> zentraler Zugriffspunkt Beschreibung: private-Konstruktor verhindert unkontrolliertes erzeugen von Objekte mittels new mittels statischer Methode erhält man Referenz auf einziges Objekt.

Implementierung des Singleton public class Singleton{ private static Singleton instance = null; private int datum; private Singleton(){} public static Singleton getInstance(){ if(instance == null) instance = new Singleton(); return instance; } public void setDatum(int d){this.datum = d;} public int getDatum(){ return datum;}

Entwurfsmuster Fassade Ziel: soll Abhängigkeiten zwischen Klassen reduzieren -> Subsystem wird durch einheitliche Schnittstelle gekapselt. Klient Klient Klient Klient Klient Klient Fassade Subsystem Subsystem

Interface IPersistentMarktplatz commitBestellung(IBestellung bestellung); … commitPerson(IPerson person); IBestellung getBestellung(String bestellungID); IMarktteilnehmer getMarktteilnehmer(String marktteilnehmerID); String getMarktteilnehmerID(); Vector getBestellungen(); removeBestellung(String bestellungsID); removeMarktteilnehmer(String marktteilnehmerID);

Speichern von Objekten Mapping von Objekten (Person, …,Bestellung) auf XML-Objekte (DOM)

DOM generisches Objektmodell für XML-Dokumente tree of nodes – enthält und erhält Daten und Struktur eines XML-Dokuments dieser tree of nodes kann mittels DOM API modifiziert und bearbeitet werden DOM ist Sammlung von Interfaces Siehe Infonyte DB API

DOM Im DOM ist alles ein Knoten (Node) Das gesamte XML-Dokument, egal wie einfach wird in einen tree of nodes umgewandelt Der Wurzelknoten eines DOMs ist immer ein document object

DOM <?xml version=“1.0“?> document <addressbook> <person> person <name>Henrike S.</name> name=“Henrike S.“ <email>schuhart@ifis….</email> </person> email=“schuhart@..“ <person> person <name>...</name> name=“…“ <email>…</email> </person> email=“…“ </addressbook>

Wichtige DOM APIs <<interface>> Node int getNodeType(); String getNodeValue(); NodeList getChildNodes(); boolean hasChildNodes(); Node removeChild(Node oldChild); <<interface>> NodeList int getLength(); Node item(int i); <<interface>> Element public NodeList getElementsByTagName(String tag); String getAttribute(String name); Attr getAttributeNode(String name); String getTagName(); <<interface>> Document Element getDocumentElement(); Attr createAttribute(String name); Element createElement(String tagName); …

Das Node Interface Interface nodeName nodeValue attributes Attr name of attribute value of attribute null Comment "#comment" content of the comment Document "#document" Text “#text“ content of the text node Element tag name NamedNodeMap

Wichtiges zum DOM Element-, Attribut-, Text-Knoten werden immer über den Dokumentknoten erzeugt und erst anschließend als Kind an ihren eigentlichen Elternknoten gehängt In <name>Henrike S.</name> wird ein Element „name“ mit einem Textknoten als Kind erzeugt, der Textknoten hat als Wert „Henrike S.“ Alle Nodes eines Dokuments können nicht einfach in ein anderes übernommen werden ->import erforderlich

DOM Bsp. Document document=… Element person = document.createElement(“person“); document.appendChild(element); Attr id = document.createAttribute(“ID“); id.setValue(“123“); element.setAttributeNode(id); Element name = document.createElement(“name“); person.appendChild(name); Text textName = document.createTextNode(“Henrike“); name.append(textName);

Mapping von IBestellung ->Element(bestellung) (Bsp.) public static Node map(IBestellung bestellung, Document document) { Element element = document.createElement("bestellung"); if(bestellung.getBeschreibung()!=null) createElement("beschreibung",bestellung.getBeschreibung(),document,element); Vector positionen = bestellung.getPosition(); for(int i=0; i<positionen.size();i++) Element position = document.createElement("position"); element.appendChild(position); map((IBestellposition)positionen.get(i),document,position); } element.setAttribute("bestellungsID",bestellung.getBestellungsID()); element.setAttribute("anbieterID",bestellung.getAnbieter().getMarktteilnehmer().getMarktteilnehmerID()); element.setAttribute("kaeuferID",bestellung.getKaeufer().getMarktteilnehmer().getMarktteilnehmerID()); return element;

Arbeiten mit PDOMs und Infonyte einfache Hilfsklasse: Util.java wichtig: liefert PDOMs, pdom.getDocument() liefert das dazugehörige DOM-Objekt wichtig: immer Referenz auf PDOM und DOM behalten!!! Infonyte APIs und Dokumentation

Laden von Objekten Mapping von XML-Objekten (DOMs) auf Java-Objekte der Klassen (Person, …,Bestellung)

Mapping von Element(bestellung) ->Bestellung (Bsp.) public static IBestellung toBestellung(Element element) { IBestellung bestellung; String bestellungsID = element.getAttribute("bestellungsID"); String anbieterID = element.getAttribute("anbieterID"); String kaeuferID = element.getAttribute("kaeuferID"); bestellung = new BestellungProxy(bestellungsID,anbieterID,kaeuferID); String beschreibung = getContent("beschreibung",element); if(beschreibung!=null) bestellung.setBeschreibung(beschreibung); NodeList nl = getChilds("position",element); for(int i=0; i<nl.getLength();i++) Element position = (Element)nl.item(i); bestellung.addPosition(toBestellposition(position,bestellung)); } return bestellung;

Laden von Objekten Was passiert, wenn ich Anbieter mit Referenzen auf Katalog lade? Problem: theoretisch kann durch Laden eines Objekts ganze Datenbank geladen werden Lösung: Proxy

Entwurfsmuster Proxy Ziel: Einführung eines Stellvertreterobjekts, um Zugriff auf ein Objekt zu kontrollieren Beschreibung: Klient benutzt Proxy statt Original. Proxy verwaltet Referenz auf Original und leitet Anforderungen vom Klient geeignet weiter.

Entwurfsmuster Proxy Klient Subject +request() request(){ realSubject.request(); } Proxy +request() RealSubject +request()

Entwurfsmuster Proxy (Bsp.) public class BestellungProxy implements IBestellung{ private Bestellung bestellung; private String anbieterID; private String kaeuferID; public BestellungProxy(String bestellungsID, String anbieterID, String kaeuferID) { this.bestellung = new Bestellung(bestellungsID,null,null,null); this.anbieterID = anbieterID; this.kaeuferID = kaeuferID; } public IAnbieter getAnbieter() { IAnbieter anbieter = this.bestellung.getAnbieter(); if(anbieter!=null) return anbieter; anbieter = PersistentMarktplatz.getInstance().getAnbieter( this.anbieterID); this.bestellung.setAnbieter(anbieter); return anbieter; public class Bestellung implements IBestellung{ String bestellungsID; IAnbieter anbieter; IKaeufer kaeufer; ... public Bestellung(String bestellungsID, IAnbieter anbieter, IKaeufer kaeufer, IBestellposition bestellposition) { this.bestellungsID = bestellungsID; this.anbieter = anbieter; this.kaeufer = kaeufer; this.position = new Vector(); if(bestellposition!=null) this.position.add(bestellposition); } public IAnbieter getAnbieter() { return this.anbieter;