Realisierung verteilter Anwendungen: Teil 7 zBeim vorigen Mal: yMultitier-Architekturen: Enterprise Java Beans zInhalt heute: yFortsetzung der Einführung.

Slides:



Advertisements
Ähnliche Präsentationen
EJB, Norbert Schuler1 Enterprise Java Beans z Was sind Enterprise JavaBeans? z Historie z Motivation z Architektur z Konstruktion eines Enterprise.
Advertisements

Object Relational Mapping
Mehrbenutzersynchronisation
Transaktionsverwaltung Beispiel einer typischen Transaktion in einer Bankanwendung: 1.Lese den Kontostand von A in die Variable a: read(A,a); 2.Reduziere.
Java-Servlets Gliederung: Allgemeine Informationen zu Servlets
Kapitel 11 Deadlocks RW-Systemarchitekur Kap. 11.
Rücksetzen Bisher betrachtetes Scheduling gewährleistet Isolation, d.h. Serialisierbarkeit, setzt jedoch voraus, dass Transaktionen abgebrochen und rückgesetzt.
C Tutorium – Semaphoren –
Transaktionsverwaltung
Transaktionsverwaltung
Internet-Datenbanken
Transaktionsverwaltung Beispiel einer typischen Transaktion in einer Bankanwendung: 1.Lese den Kontostand von A in die Variable a: read(A,a); 2.Reduziere.
Tomcat Web-Server installieren
Java 2 Enterprise Edition (J2EE)
Kapitel 6.1 Nebenläufigkeit und wechselseitiger Ausschluss
Ausnahmen HS Merseburg (FH) WS 06/07.
Internet-Datenbanken Grundlagen des WWW HTML HTTP Web-Anbindung von Datenbanken Servlets JSP JDBC XML Datenmodell Schemabeschreibungssprachen Anfragesprachen.
Java: Dynamische Datentypen
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Dynamische Webseiten Java servlets.
Transaktionen in verteilten Datenbanken
3.1.7 Korrektheit von Objekten Voraussetzung für die Diskussion der Korrektheit von nichtsequentiell benutzten abstrakten Objekten: Modellbasierte Spezifikation:
Datenbanksysteme für FÜ WS 2004/2005 Transaktionen 1 Worzyk FH Anhalt Transaktionen und Parallelverarbeitung Eigenschaften von Transaktionen Konsistenz.
Datenbanksysteme für FÜ SS 2000 Seite Worzyk FH Anhalt Transaktionen und Parallelverarbeitung Eigenschaften von Transaktionen Konsistenz Isolation.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Kapitel 13: Mehrbenutzersynchronisation
1 Kapitel 12: Transaktionsverwaltung Oliver Vornberger Fachbereich Mathematik/Informatik Universität Osnabrück Osnabrück
1 Kapitel 12: Transaktionsverwaltung. 2 Transaktion Bündelung mehrerer Datenbankoperationen Mehrbenutzersynchronisation Recovery.
15.1 Synchronisation nebenläufiger Prozesse
Erhard Künzel für Info 9. Klasse: Digitale Schule Bayern© Erhard Künzel.
Einige Begriffe zum Anfang.... Transaktionsprozedur: Folge primitiver Operationen als Einheit der Konsistenz und der Robustheit. Transaktion (TA): Ausführung.
Transaktion 1Transaktion 2... Transaktion n Synchronisation durch Scheduler Datenbasis-Verwalter lokaler Schedule 1lokaler Schedule n konfliktserialisierbarer.
4.4.2 Sperrverfahren (9/18) Regeln für das Setzen von Sperren
Verklemmungen Bei sperrenbasierter Synchronisation können sogenannte Verklemmungen (engl. deadlocks) auftreten, in denen Transaktionen sich gegenseitig.
Ausführungsmodell Zustandsübergang einer Transaktion aus Nutzersicht:
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
Synchronisation paralleler Transaktionen AIFB SS Konzept der Transaktion 4.2 Konzept der Transaktion (1/4) Eine Transaktion ist ein in sich geschlossener,
Einführung Servlets/JSPs
Mehrbenutzersynchronisation
WS 2012/13 Datenbanksysteme Mi 15:15 – 16:45 R Vorlesung #11 Transaktionsverwaltung.
WS 2011/12 Datenbanksysteme Mi 15:15 – 16:45 R Vorlesung #10 Transaktionsverwaltung.
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #12 Mehrbenutzersynchronisation.
WS 2004/2005 Datenbanken II - 5W Mi 17:00 – 18:30 G 3.18 Vorlesung #7 Mehrbenutzersynchronisation (Teil 1)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #12 Mehrbenutzersynchronisation.
Transaktion Huang Zhenhao FU Shuai.
Vorlesung #12 Mehrbenutzersynchronisation
Datenbanksysteme Technische Grundlagen Transaktions-Konzept, Mehrbenutzer-Synchronisation, Fehlerbehandlung Prof. Dr. Manfred Gruber FH München.
Vorlesung Datenbanksysteme WS 2.0 Christoph Koch (Subject: DBVO:...
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Übung: Transaktionale Systeme (Zusammenfassung der Vorlesungsinhalte)
Transaktionen Dr. Heidrun Bethge Datenbanken II.
Mehrbenutzerzugriff auf GIS-Daten
Mehrbenutzersynchronisation
Transaktionsverwaltung
Synchronisation paralleler Transaktionen  AIFB SS Sperrverfahren Sperrverfahren (13/18) Behandlung von Konflikten bei der Sperrvergabe.
Synchronisation paralleler Transaktionen  AIFB SS Synchronisationsverfahren 4.4 Synchronisationsverfahren (1/3) Typen von Synchronisationsverfahren.
Vs Verteilte Transaktionen Situation:Fragmentierung: Ein Datenbestand ist über mehrere Stationen verteilt (z.B. verteilte Datenbank, verteiltes Dateisystem,...)
6.3 Verteilte Transaktionen
Transaktionsverwaltung Beispiel einer typischen Transaktion in einer Bankanwendung: 1.Lese den Kontostand von A in die Variable a: read(A,a); 2.Reduziere.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #12 Mehrbenutzersynchronisation.
Rusch Philipp, Spiegel Philipp, Sieber Michael, Ucar Sahin, Wetzel Markus.
Realisierung verteilter Anwendungen: Teil 6 zBeim vorigen Mal: yEinführung in Multitier-Architekturen yDynamische Seitengenerierung (JSP und Servlets)
Objektorientierte Datenbanken zBeim vorigen Mal: yArchitektur von DB-Systemen yGrundlagen der Entity-Relationship-Modellierung yProbleme beim Übergang.
Oracle ADF FacesSeite 1 Oracle ADF Faces OPITZ CONSULTING Oracles Implementierung der JavaServer Faces Spezifikation.
Transaktionsverwaltung Beispiel einer typischen Transaktion in einer Bankanwendung: 1.Lese den Kontostand von A in die Variable a: read(A,a); 2.Reduziere.
Dynamische Webseiten CGI & co. © CGI - Lösung für alle ? Ja CGI kann alles tun, was man für Anwendungen braucht flexibel (beliebige.
6.3 Verteilte Transaktionen
WS 2001/2002 Mehrbenutzerzugriff auf GIS-Daten
 Präsentation transkript:

Realisierung verteilter Anwendungen: Teil 7 zBeim vorigen Mal: yMultitier-Architekturen: Enterprise Java Beans zInhalt heute: yFortsetzung der Einführung zu Multitier- Architekturen xTransaktionen zLernziele: yGrundverständnis für die EJB-Architektur, insbesondere Transaktionen Ralf Möller, FH-Wedel

Nebenläufigkeit und Transaktionen Der erste Teil dieser Vorlesung (13 Präsentationen) baut auf der Vorlesung "P3" von Bernd Neumann an der Universität Hamburg auf. Für eine Vertiefung des Themas Transaktionen und Sperren (Locks) siehe Kapitel 12 aus:

Beispiel Kontoführung Prozeß 1: Umbuchung eines Betrages von Konto A nach Konto B Prozeß 2: Zinsgutschrift für Konto A Umbuchung read (A, a1) a1 := a write (A, a1) read (B, b1) b1 := b write (B, b1) Zinsgutschrift read (A, a2) a2 := a2 * 1.03 write (A, a2) Möglicher verzahnter Ablauf: Umbuchung Zinsgutschrift read (A, a1) a1 := a read (A, a2) a2 := a2 * 1.03 write (A, a2) write (A, a1) read (B, b1) b1 := b write (B, b1) Wo ist die Zinsgutschrift geblieben??

Beispiel Besucherzählung Drehkreuz1: loop { read (Counter, c1) if (c1 ≥ MaxN) lock if (c1 < MaxN) open if enter incr(c1) if leave decr(c1) write (Counter, c1) } Drehkreuz2: loop { read (Counter, c2) if (c2 ≥ MaxN) lock if (c2 < MaxN) open if enter incr(c2) if leave decr(c2) write (Counter, c2) } Verzahnte Ausführung der zwei Prozesse Drehkreuz1 und Drehkreuz2 mit Zugriff auf gemeinsamen Counter kann inkorrekte Besucherzahl ergeben! =>Überfüllung, Panik, Katastrophen durch Studium der Nebenläufigkeit vermeiden

Mehrbenutzersynchronisation Die nebenläufige Ausführung mehrerer Prozesse auf einem Rechner kann grundsätzlich zu einer besseren Ausnutzung des Prozessors führen, weil Wartezeiten eines Prozesses (z.B. auf ein I/O-Gerät) durch Aktivitäten eines anderen Prozesses ausgefüllt werden können. Zeit unverzahnte Ausführung verzahnte Ausführung Prozesse synchronisieren = partielle zeitliche Ordnung herstellen

Mehrbenutzerbetrieb von Datenbanksystemen Um Probleme durch unerwünschte Verzahnung nebenläufiger Zugriffe (s. Beispiel Kontoführung) zu vermeiden, werden atomare Aktionen zu größeren Einheiten geklammert: Transaktionen. Eine Transaktion ist eine Folge von Aktionen (Anweisungen), die ununterbrechbar ausgeführt werden soll. Da Fehler während einer Transaktion auftreten können, muß eine Transaktionsverwaltung dafür sorgen, daß unvollständige Transaktionen ggf. zurückgenommen werden können. Befehle für Transaktionsverwaltung: begin of transaction (BOT)Beginn der Anweisungsfolge einer Transaktion commitEinleitung des Endes einer Transaktion, Änderungen der Datenbasis werden festgeschrieben abortAbbruch der Transaktion, Datenbasis wird in den Zustand vor der Transaktion zurückversetzt

Eigenschaften von Transaktionen ACID-Paradigma steht für 4 Eigenschaften: A tomicity (Atomarität) Eine Transaktion wird als unteilbare Einheit behandelt ("alles-oder-nichts"). C onsistency (Konsistenz) Eine Transaktion hinterläßt nach (erfolgreicher oder erfolgloser) Beendigung eine konsistente Datenbasis. I solation Nebenläufig ausgeführte Transaktionen beeinflussen sich nicht gegenseitig. D urability (Dauerhaftigkeit) Eine erfolgreich abgeschlossene Transaktion hat dauerhafte Wirkung auf die Datenbank, auch bei Hardware- und Software-Fehlern.

Mehrbenutzerbetrieb in DBsystemen Synchronisation mehrerer nebenläufiger Transaktionen: Bewahrung der indendierten Semantik einzelner Transaktionen Protokolle zur Sicherung der Serialisierbarkeit Sicherung von Rücksetzmöglichkeiten im Falle von Abbrüchen Vermeidung von Schneeballeffekten beim Rücksetzen Behandlung von Verklemmungen

Synchronisation bei Mehrbenutzerbetrieb Synchronisationsproblem = verzahnte sequentielle Ausführung nebenläufiger Transaktionen, so daß deren Wirkung der intendierten unverzahnten ("seriellen") Hintereinanderausführung der Transaktionen entspricht. Konfliktursache im DB-Kontext ist read und write von zwei Prozessen i und k auf dasselbe Datum A: read i (A)read k (A)Reihenfolge irrelevant, kein Konflikt read i (A)write k (A)Reihenfolge muß spezifiziert werden, Konflikt write i (A)read k (A)analog write i (A) write k (A)Reihenfolge muß spezifiziert werden, Konflikt Serialisierbarkeitsgraph: Knoten = atomare Operationen (read, write) Kanten = Ordnungsbeziehung (Operation i vor Operation k) Serialisierbarkeitstheorem: Eine partiell geordnete Menge nebenläufiger Operationen ist genau dann serialisierbar, wenn der Serialisierungsgraph zyklenfrei ist.

Beispiel für nicht serialisierbare Historie T1T2 BOT read(A) write(A) BOT read(A) write(A) read(B) write(B) commit read(B) write(B) commit Der Effekt dieser Verzahnung entspricht keiner der 2 möglichen Serialisierungen T1 vor T2 oder T2 vor T1: Die Historie ist nicht serialisierbar T1T2 BOT read(A) write(A) read(B) write(B) commit BOT read(A) write(A) read(B) write(B) commit T1T2 BOT read(A) write(A) read(B) write(B) commit BOT read(A) write(A) read(B) write(B) commit verzahnte HistorieSerialisierung 1Serialisierung 2

Sperrsynchronisation Viele Datenbank-Scheduler verwenden Sperranweisungen zur Erzeugung konfliktfreier Abläufe: Sperrmodus S (shared, read lock, Lesesperre) Wenn Transaktion T i eine S-Sperre für ein Datum A besitzt, kann T i read(A) ausführen. Mehrere Transaktionen können gleichzeitig eine S-Sperre für dasselbe Objekt A besitzen. Sperrmodus X (exclusive, write lock, Schreibsperre) Nur eine einzige Transaktion, die eine X-Sperre für A besitzt, darf write(A) ausführen. Verträglichkeit der Sperren untereinander: (NL = no lock, keine Sperrung) NLSX Sokok- Xok--

Zwei-Phasen-Sperrprotokoll (Englisch: two-phase locking, 2PL) Protokoll gewährleistet die Serialisierbarkeit von Transaktionen. Für jede individuelle Transaktion muß gelten: Verschärfung zum "Strengen 2PL-Protokoll" zur Vermeidung nicht- rücksetzbarer Abläufe: Keine Schrumpfungsphase, alle Sperren werden bei EOT freigegeben. 1. Jedes von einer Transaktion betroffene Objekt muß vorher entsprechend gesperrt werden. 2. Eine Transaktion fordert eine Sperre, die sie besitzt, nicht erneut an. 3. Eine Transaktion muß solange warten, bis es eine erforderliche Sperre entsprechend der Verträglichkeitstabelle erhalten kann. 4. Jede Transaktion durchläuft 2 Phasen: - in Wachstumsphase werden Sperren angefordert, aber nicht freigegeben - in Schrumpfungsphase werden Sperren freigegeben, aber nicht angefordert 5. Bei EOT (Transaktionsende) muß eine Transaktion alle ihre Sperren zurückgeben.

Beispiel für 2PL-Verzahnung T1T2 BOT lockX(A) read(A) write(A) BOT lockS(A)T2 muß warten lockX(B) read(B) unlockX(A)T2 wecken read(A) lockS(B)T2 muß warten write(B) unlock(B)T2 wecken read(B) commit unlockS(A) unlockS(B) commit T1: Modifikation von A und B (z.B. Umbuchung) T2:Lesen von A und B (z.B. Addieren der Salden)

Verklemmungen (Deadlocks) Sperrbasierte Synchronisationsmethoden können (unvermeidbar) zu Verklemmungen führen: Gegenseitiges Warten auf Freigabe von Sperren T1T2 BOT lockX(A) BOT lockS(B) read(B) read(A) write(A) lockX(B)T1 muß auf T2 warten lockS(A)T2 muß auf T1 warten => Deadlock T1: Modifikation von A und B (z.B. Umbuchung) T2:Lesen von B und A (z.B. Addieren der Salden) Transaktionen leicht modifiziert:

Strategien zur Erkennung und Vermeidung von Verklemmungen 1. Wartegraph hat Zyklen T1T1 T2T2 T3T3 w = wartet auf w w w T4T4 w Nach Erkennen eines Zyklus muß Verklemmung durch Zurücksetzen einer geeigneten Transaktion beseitigt werden. 2. Preclaiming - Vorabforderung aller Sperren Beginn einer Transaktion erst, nachdem die für diese Transaktion insgesamt erforderlichen Sperren erfolgt sind. Problem: Vorab die erforderlichen Sperren erkennen 3. Zeitstempel Transaktionen werden durch Zeitstempel priorisiert. Zurücksetzen statt Warten, wenn T 1 Sperre fordert, T 2 aber Sperre erst freigeben muß: Strategie Wound-wait: Abbruch von T 2, falls T 2 jünger als T 1, sonst warten Strategie Wait-die: Abbruch von T 1, wenn T 1 jünger als T 2, sonst warten

Transaktionen in der J2EE-Architektur zErleichterung der Anwendungsprogrammierung zAufsetzen einer Transaktion: Was ist zu tun? yDeklaration des Transaktionsanfangs (begin) yAusführung von Ressource-Anfragen und -Updates yDeklaration des Transaktionsendes (commit) zTransaktionen können durch Bean oder durch Container aufgesetzt werden z"Aufsetzen" wird auch Demarkation genannt

Wiederholung: Aufruf von Beans

Initialisierungsmethode für Servlet public class BonusServlet extends HttpServlet { CalcHome homecalc; public void init(ServletConfig config) throws ServletException{ //Look up home interface try{ InitialContext ctx = new InitialContext(); Object objref = ctx.lookup("calcs"); homecalc = (CalcHome)PortableRemoteObject.narrow (objref, CalcHome.class);... }}

doGet Methode  Eingabe: request und response Objekt zRequests repräsentieren die Eingabe vom Browser zResponses repräsentieren einen Ausgabekanal zum Browser zAufgaben: yFinden des Home-Interfaces des Anwendungsobjekts  Aufruf der Methode calcBonus yGenerieren des Antwort-HTML-Seite

doGet Methode (Ausschnitt) public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String socsec = null; int multiplier = 0; double calc = 0.0; PrintWriter out; response.setContentType("text/html"); String title = "EJB Example"; out = response.getWriter(); out.println(" ) out.println(title); out.println(" ");

doGet Methode (Ausschnitt) try{ Calc theCalculation; //Retrieve Bonus and Social Security Information String strMult = request.getParameter("MULTIPLIER"); Integer integerMult = new Integer(strMult); multiplier = integerMult.intValue(); socsec = request.getParameter("SOCSEC"); //Calculate bonus double bonus = ; theCalculation = homecalc.create(); calc = theCalculation.calcBonus(multiplier, bonus); } catch(Exception CreateException){ CreateException.printStackTrace(); }

doGet Methode (Ausschnitt) //Display Data out.println(" Bonus Calculation "); out.println(" Soc Sec: " + socsec); out.println(" Multiplier: " + multiplier); out.println(" Bonus Amount: " + calc); out.println(" "); out.close(); }

CalcHome package Beans; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface CalcHome extends EJBHome { Calc create() throws CreateException, RemoteException; }

Calc Remote Interface package Beans; import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Calc extends EJBObject { public double calcBonus(int multiplier, double bonus) throws RemoteException; }

CalcBean (Ausschnitt) public class CalcBean implements SessionBean { public double calcBonus(int multiplier, double bonus) { double calc = (multiplier*bonus); return calc; }... }

Aufsetzen einer Transaktion durch Bean (1) import javax.sql.*; import java.sql.*; public class MySessionEJB implements SessionBean { EJBContext ejbContext; public void someMethod (...) { javax.transaction.UserTransaction ut; DataSource ds1, ds2; Connection con1, con2; Statement stmt1, stmt2; InitialContext initCtx = new InitialContext();

Aufsetzen einer Transaktion durch Bean (2) ds1 = (DataSource)initCtx.lookup(...); con1 = ds1.getConnection(); stmt1 = con1.createStatement();... ut = ejbContext.getUserTransaction(); ut.begin(); stmt1.executeQuery(...);... stmt1.executeUpdate(...);... ut.commit();... }... }

Diskussion zTransaktionen im J2EE-Kontext zEs wurde in dieser Vorlesung ein grober Eindruck der Ziele und wesentlichen Ideen vermittelt

Beim nächsten Mal zFortsetzung der Behandlung von Transaktionen z... wiederum am praktischen Beispiel von J2EE