5.4 Java-Servlets (4) 5.5 Servlet-Filter ■ Einfügen von Ausgaben anderer Servlets ■ Komponente ähnlich Servlet ◆ für generische Komponenten von Webseiten ◆ wird für URIs konfiguriert Browser ◆ mehrere Filter möglich • z.B. Banner, Hit-Counter etc. ◆ Realisierung: • Filterkette HTTP ◆ Änderung der Anfrage und/oder der Antwort • Ermitteln eines RequestDispatcher-Objekts • Aufruf der Methode include Container Filter Filter Servlet ■ Realisierung ■ Weiterleiten der Anfrage ◆ z.B. in Dispatcher-Servlets Weiterleitung an dedizierte Servlets je nach Inhalt eines Formulars ◆ Implementierung der Methode void doFilter( ◆ Realisierung ServletRequest request, ServletResponse response, FilterChain chain ); • Ermitteln eines RequestDispatcher-Objekts • Weiterleitung an nächsten Filter • Aufruf der Methode forward • Beeinflussung der Anfrage • Beeinflussung der Antwort B.41 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.42 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 5.5 Servlet-Filter (2) 5.6 Servlet-Deployment ■ Einsatzgebiet ■ Konfiguration des Containers ◆ Authentisierung ◆ „Deployment“ (wörtlich Einsatz, Stationierung) ◆ Logging ◆ Bereitstellung der Dienste ◆ Konvertierungen • Konfiguration der Servlet-Klassen für verschiedene URIs • Formatkonvertierungen z.B. Bilder ■ Zentrales Element • Kompression ◆ spezielles Java-Archive-File mit Endung .war • XSLT-Nachbearbeitungen ◆ enthält Java-Klassendateien für Servlets ◆ enthält einen XML-basierten Deployment-Deskriptor (web.xml) ◆ enthält zusätzliche Dateien • z.B. statische Webseiten zur Unterstützung der Servlets ◆ eine WAR-Datei enthält typischerweise eine Web-basierte Anwendung / einen Web-basierten Dienst ■ Containerabhängiges Deployment B.43 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ ◆ verschiedene Realisierungen © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.44 5.6 Servlet-Deployment (2) 5.7 Anwendungszustand ■ Container beherbergt typischerweise mehrere Dienste ▲ HTTP-Protokoll ist zustandslos ◆ durch Konfiguration im Deployment wird festgelegt: ■ Web-basierte Anwendung kann Zustand speichern • Zuordnung von eingehenden URIs auf Servlets ◆ Kontextobjekt • Zuordnung von eingehenden URIs auf statische Inhalte • von jedem Servlet aus erreichbar • Zuordnung von Filterkomponenten auf Servlets • kann beliebige Objekte unter Namen speichern (getAttribute, setAttribute) ◆ Zugriff durch Servlets und Filter der gleichen Anwendung Browser ◆ Einsatz HTTP Container Servlet Servlet Servlet • z.B. Hit-Counter, Zugangsdaten für Datenbankzugriff Web-basierte Anwendung Servlet Servlet Servlet Servlet Servlet Servlet B.45 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.46 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 5.8 Sitzungszustand 5.8 Sitzungszustand (2) ▲ HTTP-Protkoll ist zustandslos ■ Beenden der Sitzung ◆ zusammenhängende Interaktionen eines Client nicht zuordenbar ◆ explizites Invalidieren durch Methode invalidate ◆ Timeout der Sitzung bei Inaktivität ✱ Servlet-Container verwaltet Sitzungszustand • konfigurierbar im Deployment-Deskriptor ■ Erzeugung einer Sitzung ◆ Zugriff auf Sitzungsobjekt vom Typ HttpSession durch Aufruf von getSession am Request-Objekt ■ Realisierung der Zuordnung ◆ Einsatz von Cookies ◆ Sitzungsobjekt kann beliebige Objekte unter Namen speichern • automatisch durch Container • Zugriff über getAttribute, setAttribute ◆ Einsatz von Sitzungs-IDs in den URIs, z.B.: ■ Nutzung des Sitzungsobjekts http://www.treasurebank.de/konto;jsessionid=aBcd430872Dc ◆ Zwischenspeichern von Informationen über mehrere HTTP-Requests hinweg • z.B. Zustand einer mehrstufigen Operation (Aufüllen mehrere Formulare bis zum Ende der Operation) ◆ Problem richtige URIs auf der gelieferten Resultatseite • Einsatz von Codierfunktion encodeURL unter Angabe der Original URI • z.B. Einkaufswagen B.47 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.48 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 5.9 Java-Server-Pages 5.9 Java-Server-Pages (2) ■ Nachteil von Servlets ✱ JSP-Seite ist umgestülptes Servlet (und umgekehrt) ◆ Programmieraufwand für fast vollständig statische Web-Inhalte ■ Interne Implementierung • z.B. lediglich Page-Counter hinzuzufügen ◆ automatische Erzeugung eines Servlets aus HTML/XML-Dokument im JSP-Container • z.B. lediglich wenige benutzerspezifischen Teile anzupassen • in der Regel bei erster Anfrage ■ Konzept der Java-Server-Pages (JSP) ◆ Entwicklung eines HTML, XHTML- oder XML-Dokuments <html> <body> <p>...</p> Servlet Code • wird als Ergebnis einer Anfrage zurückgegeben ◆ dynamische Anteile durch spezielle Auszeichnungen • zum Zugriff auf Java-Variablen ... doGet(...) { ... out.print “<html>\n<body>\n”; out.print “<p>...</p>\n”; Servlet Code </body> </html> • zum Aufruf von Java-Objekten • für Bedingungen und Schleifen out.print “</body>\n</html>”; ... } XHTML-Dokument Servlet-Klasse B.49 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.50 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 5.10 Auszeichnungen 5.11 Deployment ■ HTML ■ Integration in war-Files ◆ nutzt „Standardsyntax“ ◆ Erkennung von Dateien mit Endung .jsp als JSP-Dokumente ◆ Integration in Deployment-Deskriptor web.xml • spezielle zusätzliche Auszeichnungen, z.B. <%...%> und <@...@> ■ XML ■ Lebenszyklus ◆ XML-Elemente in speziellem Namensraum ◆ Ansprechen der URI durch Browser ◆ z.B.: ◆ Erzeugen des Servlet-Codes aus den JSP-Auszeichnungen • Direktiven entscheiden über Zeitpunkt und Art der Erzeugung <jsp:setProperty xmlns:jsp="http://java.sun.com/JSP/Page" name="..." property="..." value="..." /> • direkte Übernahme von Java-Codeschnipsel ■ Programmierung im JSP-Dokument • Umsetzen von Auszeichnungen in Java-Code ◆ vorgegebene Anweisungen/Auszeichnungen und XML-Elemente • Umsetzen von statischen Seitenanteilen in Ausgabeanweisungen ◆ weitere Anweisungen integrierbar durch Tag-Libraries • Umsetzen von Tags aus Tag-Libraries in Aufrufe an spezielle Handler-Klassen ◆ Initialisierung des Servlets ◆ Aufruf des Servlets B.51 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.52 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 5.12 Anwendungsprogrammierung 5.12 Anwendungsprogrammierung (2) ■ JSP Expression Language ■ Speicherung von Anwendungsdaten ◆ eigene Miniprogrammiersprache für Ausdruckbearbeitung ◆ Typisch: Nutzung von JavaBeans ◆ spezielle JSP-Anweisungen zum Zugriff • Zugriff auf Variablen (Arrays, Lists, Maps etc.) • Zugriff auf JavaBean-Objekte – Konvention für die Programmierung von Java POJOs – z.B. getXyz() und setXyz() Methoden • Beispiel • einfache Rechen- und Vergleichsfunktionen • Zugriffsbeispiel <jsp:useBean id="shoppingcart" class="avid.Cart" scope="session" /> ${shoppingcart.totalAmount} • Funktionsaufrufe ◆ Beispiel: ${header["host"] eq "www.uni-ulm.de"} ■ Implizite Objekte ◆ erlauben Zugriff auf Request-Parameter ◆ spezielle Map-Objekte für Kontextabhängige Objekte • z.B. Attribute aus dem Sitzungskontext (vgl. Servlets) B.53 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.54 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 5.13 Tag-Library 5.14 Bewertung ■ Tag-Library ▲ Nachteile von CGI, Servlets und JSP ◆ Java-Klassenbibliothek mit speziellen Schnittstellen ◆ Zugang zu persistenten Zustandsinformationen mühsam ◆ Deployment im Container und im JSP-Dokument • Stichwort: Persistenz ◆ neuer XML-Namensraum für Anweisungen einer Tag-Lib ◆ Koordinierung nebenläufiger Anfragen problematisch ◆ verschiedene Anwendungsbereiche • Stichwort: Transaktionen • Datenbankanbindung ◆ unter Umständen Vermischung von Darstellung und Anwendungslogik • Stringmanipulationen ◆ Sicherheitsanforderungen müssen integriert werden • Zugang zu Verzeichnisdiensten • unter Umständen Vermischung mit Anwendungslogik nötig • etc. B.55 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.56 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 5.15 Literatur 6 Model-View-Controller ■ Verwendete Referenzen und weiterführende Literatur ■ Entwurfsmuster für Anbindung von Benutzeroberflächen an Anwendung ◆ Sun Microsystems: Java Enterprise Edition 5, Tutorial. <http://java.sun.com/javaee/5/docs/tutorial/doc/> ◆ kein Entwurfsmuster im strikten Sinn ◆ Idee: Entkoppelung der Anwendungslogik von der Darstellung und der Interaktion durch den Benutzer ◆ Sun Microsystems: JavaServer Pages 2.0 specification. <http://java.sun.com/products/jsp/download.html#specs > ◆ Erfinder: Trygve Reenskaug (1979) ◆ Sun Microsystems: The JavaServer Pages Standard Tag Library (JSTL) web site. <http://java.sun.com/products/jsp/jstl > ◆ Sun Microsystems: Java Beans specification. Ver. 1.01-A. Graham Hamilton (Ed.), 1998. <http://java.sun.com/beans> View Client Anwendung Model Controller B.57 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.58 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 6 Model-View-Controller (2) 6 Model-View-Controller (3) ■ Model ✱ Vorteile ◆ enthält Programmlogik ◆ mehrere Views und Controller ohne Änderung der Anwendungslogik ◆ verschiedene Darstellungsformen • z.B. Webshop-Funktionalität ◆ enthält Anwendungsdaten • verschiedene GUI-Konzepte (z.B. HTML, Swing) • Anpassung an verschiedene Endgeräte ■ View ◆ erzeugt die Präsentation nach außen aus den Anwendungsdaten • Einsatz des Observer-Patterns zur Beobachtung des Modelinhalts ◆ komponierbar aus mehreren Teilen • z.B. Banner, Sidebar • Einsatz des Composite-Patterns ■ Controller ◆ nimmt Benutzereingaben entgegen ◆ wandelt Eingaben in Interaktionen mit dem Model um B.59 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.60 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 6.1 MVC und JSP/Servlets 6.1 MVC und JSP/Servlets (2) ■ „Model-1“ Architektur Client ■ „Model-2“ Architekturen View/Ctrl. View/Ctrl. View/Ctrl. Anwendung View View View/JSP Model Client Anwendung Model Ctrl/Servlet ◆ Interaktion und Darstellung basiert auf Seiten und Links ◆ View ◆ Interaktionen erfolgen über einen zentralen Controller • JSP-Seite oder Servlet • z.B. realisiert durch zentrales Dispatcher-Servlet ◆ Model ◆ Choreographie der Eingaben zu verschiedenen Ansichten • lässt sich in Java-Objekte z.B. Beans auslagern • z.B. realisiert durch JSP-Seiten • häufig Vermischung mit View nicht ganz vermeidbar • Beschreibung der Kontrollfunktion außerhalb der Views ◆ Controller ◆ Beispiel: Java Server Faces, JSF • verstreut über JSP-Seiten bzw. Servlets – Verlinkung zu anderen Seiten – Eingabeprüfung etc. • Vermischung mit View B.61 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.62 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 6.2 Literatur 7 RPC ■ Verwendete Referenzen und weiterführende Literatur ✱ Motivation ◆ T. Reenskaug: The model-view-controller (MVC), its past and present. 2003. ◆ Verteilung von Software-Einheiten auf mehrere Rechensysteme ◆ L. Singer: Model-View-Controller. Kurz und Gut. Software-Engineering, Leibniz Univ. Hannover, 2004. ■ Prozeduren (oder Funktionen) als Verteilungseinheiten ◆ Zugriffstransparenz: lokaler Prozeduraufruf nicht von entferntem Prozeduraufruf unterscheidbar (im Idealfall, wenn fehlerlos) ◆ entfernter Prozeduraufruf (Remote Procedure Call, RPC) ■ Aufrufpfad bei lokalem Aufruf Prozedur B.63 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.64 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 7 RPC (2) 7.1 Stellvertreter ■ Aufrufpfad bei entferntem Aufruf ■ Aufgabe des client-seitigen Stellvertreters ◆ stellt Stub-Prozedur für Aufrufe bereit entf. Prozedur ◆ Einpacken der Parameter (Marshalling) ◆ Kommunikation mit server-seitigem Stellvertreter (in der Regel Nachricht hin und zurück) ◆ Auspacken der Ergebnisse (Unmarshalling) ◆ Rückgabe der Ergebnisse an Aufrufer ▲ Problem Netzwerk ◆ Behandlung von Fehlersituationen Rechnergrenze • server-seitiger Stellvertreter antwortet nicht ◆ Stellvertreterkomponenten auf Client- als auch auf Server-Seite (Proxy, Stub, Skeleton) • Antwort geht verloren ◆ Aufrufer muss nicht zwischen lokalen und entfernten Aufrufen unterscheiden B.65 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.66 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 7.1 Stellvertreter (2) 7.2 Parameterübergabe ■ Aufgabe des server-seitiger Stellvertreter ■ Probleme der Parameterübertragung ◆ Annahme von Anfragen vom Netzwerk (in der Regel Nachricht annehmen) ◆ große Parameter ◆ Auspacken der Parameter (Unmarshalling) ◆ Zeiger • Felder, Matrizen etc. ◆ Aufruf der gewünschten Prozedur • Speicheradressen sind auf anderem Rechner bedeutungslos ◆ Einpacken der Ergebnisse (Marshalling) ◆ Call-by-Reference, Call-by-Name ◆ Kommunikation mit client-seitigem Stellvertreter (in der Regel Nachricht versenden) • Rückzugriff auf Variable muss über das Netz ermöglicht werden • meist nur für eingeschränkte Datentypen erlaubt (z.B. entfernte Prozeduren) ▲ Probleme ◆ Finden der gewünschten Prozedur ◆ Unterstützung bei Kommunikationsfehlern B.67 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.68 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 7.3 RPC-Semantik 7.3 RPC-Semantik (2) ✱ Wie wird ein entfernter Prozeduraufruf im Fehlerfall ausgeführt? ■ At-Least-Once Semantik ◆ ein Aufruf wird mindestens einmal ausgeführt (evtl. auch mehrfach) ■ Exactly-Once Semantik ◆ Aufrufer bemerkt niemals einen Fehler ◆ ideal: Aufruf wird genau einmal ausgeführt ■ Mögliche Implementierung ◆ im Verteilten System schwierig zu erreichen • Fehler in asynchronen Systemen nicht von langen Laufzeiten unterscheidbar • realisierbar mittels Transaktionen oder mit stabilem, persistentem Speicher ◆ kommt keine Antwort innerhalb einer gewissen Zeit (Timeout), wiederholt Client-seitiger Stellvertreter die Anfrage ◆ keine weiteren Maßnahmen bei Server-seitigem Stellvertreter nötig ■ Annahme ◆ Server-seitiger Stellvertreter könnte doppelte Anfragen erkennen (clientspezifische Seriennummer) ◆ unzuverlässige, nachrichtenbasierte Kommunikation als Basis • potenziell unbegrenzt lange Nachrichtenlaufzeit, d.h. Nachricht, die der Sender als verloren ansieht, könnte doch angekommen sein ▲ Problem: idempotente Prozedur notwendig ◆ mehrfacher Aufruf ändert nichts an dem Gesamtergebnis B.69 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.70 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 7.3 RPC-Semantik (3) 7.3 RPC-Semantik (4) ■ At-Most-Once Semantik ■ Komplexere Implementierung ◆ Anfrage wird höchstens einmal ausgeführt ◆ Client-seitiger Stellvertreter wiederholt Anfrage nach Timeout (maskiert verlorene Anfragen im Netzwerk) ◆ im Problemfall: Server Client • keine Angabe, ob ausgeführt (vollständig oder teilweise) ■ Einfache Implementierung (nur Client-Seite) Anfragen Timeout ◆ kommt keine Antwort innerhalb einer gewissen Zeit (Timeout), gibt Clientseitiger Stellvertreter Fehler an Aufrufer zurück (At-Most-Once Sem.) ◆ ansonsten wird Ergebnis zurückgegeben (Exactly-Once Sem.) Annehmen Anfrage laufend blockiert nachrich t ▲ Problem ◆ häufige Fehler wg. langer Prozedurlaufzeiten Antwortn ◆ schlechte Fehlererkennung wg. langer Timeouts achricht Antworten B.71 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.72 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 7.3 RPC-Semantik (5) 7.3 RPC-Semantik (6) ◆ Server ignoriert wiederholte Anfrage falls Antwort noch nicht gesendet wurde (Seriennummer) achricht Timeout Anfrage n Anfragen Annehmen Timeout laufend blockiert Ignorieren Antwortn achricht Server Client Server Client Anfragen ◆ Server speichert Antworten und wiederholt diese bei identischen Anfragen (Seriennummern) Anfrage nachrich t Antwortn achricht Antworten laufend blockiert a Antwortn Antworten Annehmen chricht Wiederholen ◆ ansonsten wird Ergebnis zurückgegeben (Exactly-Once Sem.) B.73 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.74 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 7.3 RPC-Semantik (7) 7.3 RPC-Semantik (8) ▲ Problem: Serverausfälle ■ Serverausfall ◆ nicht erkennbar, ob Anfrage bearbeitet wurde oder nicht Server Client ■ Erweiterung der Implementierung Anfragen ◆ Client erkennt Serverausfall und gibt Fehler an Aufrufer zurück (At-Most-Once Sem.) nachrich t Annehmen laufend blockiert Timeout ◆ Server-seitiger Stellvertreter erkennt und ignoriert Anfragen von vor dem Serverausfall Anfrage ◆ Realisierung: persistente Generationsnummern im Server • Client verschickt immer aktuelle Generationsnummer des Servers an den Server ort Fehlerantw Fehler • Server zählt beim Ausfall Generationsnummer hoch • Server ignoriert Anfragen kleinerer Generationsnummern und teilt Client neue Generationsnummer mit B.75 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.76 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 7.4 Implementierung des RPC 8 Java RMI ■ Methodenaufrufe ■ Java Remote Method Invocation ◆ wie Prozeduraufrufe mit zusätzlichem impliziten Parameter (Objektbezeichner) ◆ Erweiterung des Java Programmiermodells für Verteilung ◆ mehrere Java-Virtual-Machines (JVMs) spannen ein verteiltes System auf ■ Implementierung der Aufrufprotokolle ■ Java Objekte werden verteilt ◆ über Nachrichten ◆ orts- und zugriffstransparente Methodenaufrufe an verteilten Java Objekten • Abbildung auf nachrichtenbasierte Kommunikation • Anfrage- und Antwortnachricht, Fehlernachrichten etc. ■ Schnittstelle • z.B. Sun RPC (basiert auf UDP/IP) ◆ verteilte Java Objekte / RMI-Objekte implementieren spezielles Java-Interface (java.rmi.Remote) ◆ über Ströme • Abbildung auf Datenstrom ◆ nur Marker, enthält keine Methoden • Anfrage und Antwort eingebettet in Datenstrom ◆ alle Methoden in von java.rmi.Remote erbenden Interfaces müssen die Exception java.rmi.RemoteException deklarieren • basiert oft auf TCP/IP (weniger wg. Stromeigenschaft als wg. Zuverlässiggkeit), z.B. CORBA IIOP, Java JRMP (RMI-Protokoll) • zeigt Fehler bei entfernten Aufrufen an (At-Most-Once-Semantik) B.77 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.78 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 8 Java RMI (2) 8 Java RMI (3) ■ Entfernt ansprechbare Methoden ■ RMI Compiler ◆ entfernt sind nur die Methoden aus Interfaces ansprechbar, die von Remote erben ◆ andere Methoden oder Instanzvariablen sind nur lokal ansprechbar ◆ erzeugt Stubklasse ◆ z.B. für avid.MyPrinter wird Stubklasse avid.MyPrinter_Stub erzeugt ◆ Stubklasse implementiert alle Remote-Interfaces der ursprünglichen Objektklasse ■ Referenzen ◆ Referenzen sollten nur mit dem Namen eines Remote-Interfaces typisiert werden nicht mit dem Klassennamen der Implementierung ■ Erzeugen eines RMI-Objekts ◆ Implementierungsklasse implementiert mind. ein Remote-Interface ◆ Implementierungsklasse erbt von java.rmi.server.UnicastRemoteObject • vorbereitet für entfernte Aufrufe (exportiert) B.79 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.80 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 8 Java RMI (4) 8 Java RMI (5) ■ Lokale Aufrufe ■ Beispiel ◆ lokale Referenzweitergabe package avid; ■ Entfernte Aufrufe public interface Printer implements java.rmi.Remote { public void print( String s ) throws java.rmi.RemoteException; } ◆ Parameter werden serialisiert (Java Serialization) • Erzeugung eines Bytestroms aus Java-Objekten und Datentypen • Übertragung über Netzwerk • Rückgewinnung von Java-Objekte und Datentypen aus Bytestrom ◆ Nicht-Objekt-Datentypen werden kopiert (Call-By-Value) ◆ exportierte RMI-Objekte: Stubobjekt für das RMI-Objekt wird serialisiert (Call-ByObject-Reference) ◆ nicht-exportierte RMI-Objekte und andere Objekte werden serialisiert, d.h. kopiert mit all ihren weiterführenden Referenzen (Call-By-Copy) public class MyPrinter extends java.rmi.server.UnicastRemoteObject implements avid.Printer { ... public void print( String s ) throws java.rmi.RemoteExeception { ... } ... } ◆ Generierung der Stubs durch den RMI-Compiler (rmic) B.81 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.82 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 8 Java RMI (6) 8.1 Protokolle ■ Beispiel (fortges.) ■ Java-RMI mit TCP-basiertem Protokoll ◆ auf Serverseite: ◆ At-most-once-Semantik ◆ Übertragung von Daten durch Java-Serialisierung ... avid.Printer p = new avid.MyPrinter();// Erzeug. des Objekts // Im Namensdienst registrieren java.rmi.Naming.bind( "MyPrinter", p ); ... ■ Java-RMI mit IIOP (Internet Inter-ORB Protocol) ◆ Protokoll aus der CORBA-Middleware-Architektur • System für heterogene verteilte Objekte ◆ auf Clientseite: ◆ Kompatibilität mit CORBA-Systemen // Referenz besorgen avid. Printer prt= (Printer) ◆ At-most-once-Semantik java.rmi.Naming.lookup( "MyPrinter" ); ... try { prt.print( "MyPrinter" ); // entferntes Objekt aufrufen catch( java.rmi.RemoteException e ) { ... } ◆ Übertragung durch einheitliche Netzwerkdarstellung (CDR) B.83 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.84 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 8.2 Literatur 9 Transaktionen ■ RMI Tutorial ✱ Motivation ◆ Java SE 6: <http://java.sun.com/javase/6/docs/technotes/guides/rmi/> ◆ Konsistenz von Geschäfts- und Anwendungsdaten • bei Fehlern • bei nebenläufigem und parallelem Zugriff – dient zur Koordinierung ■ Java Remote Method Invocation – Specification ◆ Java SE 6: <http://java.sun.com/javase/6/docs/platform/rmi/spec/ rmiTOC.html> ■ Transaktionen ◆ fassen mehrere Teilaktionen zu einer atomaren Operation zusammen • entweder alles ausgeführt oder nichts (Atomicity) ◆ Fehler führen zu einem Rücksetzen der bisherigen Effekte (Roll-Back) B.85 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.86 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 9 Transaktionen (2) 9 Transaktionen (3) ■ Eigenschaften typischer Transaktionsverfahren (ACID) ■ Start der Transaktion ◆ Atomicity: alle Transaktionen (mit allen Teilaktionen) erscheinen atomar ◆ typischerweise begin()-Aufruf an einem Transaktionsmanager • Möglichkeit zum Roll-Back im Fehlerfall ◆ Consistency: jede Transaktion hinterlässt das System in konsistentem Zustand (inkonsistente Zustände führen zu Roll-Back) ◆ Isolation: eine Transaktion „sieht“ keine unvollständig ausgeführte andere Transaktion im System ■ Beenden der Transaktion ◆ typischerweise commit()-Aufruf an einem Transaktionsmanager ■ Abbruch der Transaktion ◆ typischerweise abort()-Aufruf an einem Transaktionsmanager • Ausführung nebenläufiger Transaktionen ist identisch mit einer seriellen Ausführung ◆ Durability: Persistenz der Aktionen einer Transaktion über die Lebenszeit von Teilsystemen hinaus (z.B. Crash des Datenbankservers) B.87 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.88 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 9.1 Transaktionen in Java 9.2 Funktionsweise ■ CORBA OTS (Object Transaction Service) ■ Start der Transaktion heftet einen Kontext an den laufenden Thread ◆ Menge von Schnittstellen für einen Transaktionsmanager ◆ Thread-lokale Variablen in Java ◆ Weitergabe des Transaktionskontexts im Verteilten System ■ JTS (Java Transaction Service) • z.B. über RMI mit dem IIOP-Protokoll ◆ Abbildung von OTS auf Java ■ Nutzung von transaktionalen Ressourcen ■ Rückgriff auf JTA (Java Transactions API) ◆ z.B. Datenbanken, aber auch spezielle Java Objekte ◆ lediglich Schnittstelle zum Starten und Beenden von Transaktionen ◆ Zugriff auf Ressource führt zum (automatischen) Eintrag eines ResourceManagers im Transaktionskontext ◆ interne Schnittstellen bleiben verdeckt (z.B. zwischen Datenbank und Transaktionsmanger etc.) ◆ commit() und rollback() führen zu entsprechenden Benachrichtigungen des Resource-Managers und löschen Transaktionskontext ◆ javax.transaction.UserTransaction-Objekt als API für Anwendung • Aufruf von begin(), commit() oder rollback() • dieser realisiert Transaktionssemantik für Ressource • UserTransaction-Objekt wird typischerweise von einer Umgebung bereitgestellt, z.B. einem Application Server ▲ Bei JTA und JTS in aller Regel nur flache Transaktionen B.89 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ 9.3 Literatur ■ JTS ◆ Sun Microsystems: Java Transaction Service (JTS). Ver. 1.0, 1999. <http://java.sun.com/jts> ■ JTA ◆ Sun Microsystems: Java Transaction API (JTA). Ver. 1.1, 2002. <http://java.sun.com/jta> ■ OMG OTS ◆ Object Management Group: Transaction Service Specification. Ver. 1.2.1, Document formal/01-11-03, 2001. <http://www.omg.org/cgi-bin/doc?formal/2001-11-03> B.91 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/ B.90 © 2002-2008, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [AvID-B-Base.fm, 2008-04-16 20.48] http://www-vs.informatik.uni-ulm.de/teach/ss08/avid/