Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Universität zu Lübeck Institut für Informationssysteme Die Persistenzschicht Interfaces, Muster und DOM.

Ähnliche Präsentationen


Präsentation zum Thema: "Universität zu Lübeck Institut für Informationssysteme Die Persistenzschicht Interfaces, Muster und DOM."—  Präsentation transkript:

1 Universität zu Lübeck Institut für Informationssysteme Die Persistenzschicht Interfaces, Muster und DOM

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

3 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)

4 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.

5 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;} }

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

7 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);

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

9 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

10 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

11 DOM Henrike S. … document addressbook person name=Henrike S. name=… =…

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

13 Das Node Interface InterfacenodeNamenodeValueattributes Attrname of attribute value of attributenull Comment "#comment" content of the comment null Document "#document" null Text#textcontent of the text node null Elementtag namenullNamedNo deMap

14 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 Henrike S. 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

15 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);

16 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

17 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

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

19 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

20 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

21 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.

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

23 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; }


Herunterladen ppt "Universität zu Lübeck Institut für Informationssysteme Die Persistenzschicht Interfaces, Muster und DOM."

Ähnliche Präsentationen


Google-Anzeigen