Roland Wism ¨uller
Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.dde Tel.: 0271/740-4050, B ¨uro: H-B 8404
Client/Server-Programmierung
WS 2019/2020
Client/Server-Programmierung
WS 2019/2020
0 Organisation
Zu meiner Person
➥ Studium der Informatik an der Techn. Univ. M ¨unchen
➥ dort 1994 promoviert, 2001 habilitiert
➥ Seit Apr. 2004 Prof. f ¨ur Betriebssysteme und verteilte Systeme an der Univ. Siegen
➥ Forschung: Beobachtung, Analyse und Steuerung paralleler und verteilter Systeme; Sichere Komponentensysteme
➥ Mentor f ¨ur die Bachelor–Studieng ¨ange Informatik mit Nebenfach/Vertiefung Mathematik
➥ e-mail: rolanda.dwismuellera@duni-siegena.dde
➥ Tel.: 0271/740-4050
➥ B ¨uro: H-B 8404
Zur Fachgruppe
” Betriebssysteme / verteilte Systeme“
Andreas Hoffmann
andreas.hoffmann@uni-...
0271/740-4047 H-B 8405
➥ El. Pr ¨ufungs- und ¨Ubungssysteme
➥ IT-Sicherheit
➥ Web-Technologien
➥ Mobile Anwendungen
Damian Ludwig
damian.ludwig@uni-...
0271/740-2533 H-B 8402
➥ Capability-Systeme
➥ Compiler
➥ Programmiersprachen
Hawzhin Hozhabr Pour
hawzhin.hozhabrpour@uni-...
0271/740-4038
➥ Machine Learning
➥ Mustererkennung in Fahrzeug- Sensordaten
➥ Anomaliedetektion
Lehrangebot
Vorlesungen/Praktika
➥ Rechnernetze I, 5 LP (jedes SoSe)
➥ Rechnernetze Praktikum, 5 LP (jedes WiSe)
➥ Rechnernetze II, 5 LP (jedes SoSe)
➥ Betriebssysteme I, 5 LP (jedes WiSe)
➥ Parallelverarbeitung, 5 LP (jedes WiSe)
➥ Verteilte Systeme, 5 LP (jedes SoSe)
➥ Client/Server-Programmierung, 5 LP (nur noch dieses WiSe)
Lehrangebot ...
Projektgruppen
➥ z.B. Aufnahme und Analyse von Fahrzeug-Sensordaten
➥ z.B. Erkennung ungew ¨ohnlicher Ereignisse in Kfz-Sensordaten
Abschlussarbeiten (Bachelor, Master)
➥ Themengebiete: sichere virtuelle Maschine, Parallelverarbeitung, Mustererkennung in Sensordaten, eAssessment, ...
Seminare
➥ Themengebiete: IT-Sicherheit, Programmiersprachen, Musterer- kennung in Sensordaten, ...
Zur Vorlesung
➥ Vorlesung mit praktischer ¨Ubung
➥ 2+2 SWS, 5 LP
➥ Termine:
➥ Fr., 12:20 - 13:50, H-F 116 (Vorl.) bzw. H-A 4111 ( ¨Ubung)
➥ Mo., 16:00-17:30, H-B 8409/10 (Vorl.) bzw. H-A 4111 ( ¨Ubung)
➥ Information, Folien und Ank ¨undigungen:
➥ http://www.bs.informatik.uni-siegen.de/lehre/
ws1920/csp
➥ Folienskript vollst ¨andig verf ¨ugbar
➥ Folien werden ggf. leicht aktualisiert und i.d.R. sp ¨atestens am Tag vor der Vorlesung bereitgestellt (als PDF)
Lernziele
➥ Wissen um die Grundlagen, Techniken, Methoden und Werkzeuge der verteilten Programmierung
➥ insbesondere objektorientierte und serviceorientierte Middleware, sowie Komponenten
➥ Praktische Erfahrungen in der Programmierung von Client/Server-Anwendungen
➥ Praktische Erfahrungen im Umgang mit unterschiedlicher Middleware
Methodik
➥ Vorlesung: Grundlagen
➥ theoretisches Wissen zur verteilten Systemen, Middleware und Komponenten
➥ Code-Beispiele und
”Tutorials“
➥ Ubung: praktische Anwendung¨
➥ Nachvollziehen der Tutorials
➥ eigenst ¨andige Programmierarbeit
➥ praktische Erfahrung, auch: Aufwerfen von Fragen
➥ Realisierung einer kleinen B ¨orsenanwendung
➥ mit RMI, CORBA, EJB und Web Services
➥ zus ¨atzlich kleinere einf ¨uhrende und weiterf ¨uhrende Aufgaben
Pr ¨ufung
➥ M ¨undliche Pr ¨ufung
➥ Dauer ca. 40 min.
➥ Stoff: Vorlesung und praktische ¨Ubungen!
➥ Pr ¨ufung erstreckt sich auch auf die praktischen Arbeiten
➥ Anmeldeverfahren:
➥ zuerst Anmeldung ¨uber unisono
➥ mindestens eine (besser: einige) Woche(n) im Voraus
➥ Frist f ¨ur Mentorengenehmigungen: 28.11.2019
➥ dann Terminabsprache im Sekretariat bei Fr. Syska
➥ per Email (reginaa.dsyskaa@duni-siegena.dde)
Anmeldung zur Studienleistung
➥ Voraussetzung f ¨ur die Zulassung zur Pr ¨ufung:
➥ aktive Mitarbeit im Praktikum
➥ d.h., tauglicher Versuch f ¨ur alle (d.h., 4) Hauptaufgaben
➥ Sie m ¨ussen sich in unisono bis 24.01. zur Studienleistung
”Client/Server-Programmierung“ (822030-SL) anmelden!
➥ unabh ¨angig von der Anmeldung zu Vorlesung bzw. ¨Ubung!
➥ machen Sie es gleich jetzt!
Organisatorisches zum Praktikum
➥ Benutzerordnung und Chipschl ¨usselantrag:
➥ http://www.bs.informatik.uni-siegen.de/lehre/
ws1920/csp
➥ Chipschl ¨usselantrag bitte unterscheiben lassen und direkt bei Hr. Kiel (AR-P 209) abgeben
➥ Praktikumsbeginn: 21.10.
➥ Einf ¨uhrung in die Rechner-Umgebung (Linux)
➥ Ausgabe der Kennungen
➥ Benutzerordnung im WWW beachten!
Rechnerumgebung im Labor H-A 4111
➥ Linux-PCs, privates IP-Netz, beschr ¨ankter Internet-Zugang
13 Arbeitsplätze 6 Arbeitsplätze (Intel, 4 Cores, (Intel, 4 Cores mit HT,
http https ftp
Fachgruppennetz (bs.informatik.uni−siegen.de) / Internet
bsgate1.bs.informatik.uni−siegen.de sftp (nur pubkey−Authentifizierung)
(lab.bvs)
Labornetz 1 Gbit/s
File Server Proxy
... ...
bslab01−06,12−18 bslab07−11,19
0000 1111
0000 1111
00 11 0000
1111
Inhalt der Vorlesung
➥ Grundlagen: Wiederholung
➥ Architekturmodelle
➥ Zeit und Zustand in verteilten Systemen
➥ Middleware
➥ Java RMI
➥ Java Datenbank-Schnittstelle JDBC
➥ CORBA
➥ Architektur, Dienste, IDL, ...
➥ Java Komponenten-Modelle
➥ Einf ¨uhrung
Inhalt der Vorlesung ...
➥ Servlets und JSP
➥ Web Services
➥ XML, SOAP, WSDL, ...
➥ Axis2
➥ Weitere Client/Server-Technologien
➥ u.a. .NET, DCOM
Zeitplan der Vorlesung (vorl ¨aufig!)
Datum Montags-Termin Datum Freitags-Termin
07.10. — 11.10. V: Grundlagen, Wdh.
14.10. V: Grundlagen, Wdh. 18.10. V: JDBC, CORBA
21.10. P: RMI 25.10. V: CORBA
28.10. V: CORBA 01.11. —
04.11. P: RMI 08.11. V: CORBA
11.11. P: RMI 15.11. V: Java Beans, EJB
18.11. P: CORBA 22.11. V: EJB
25.11. P: CORBA 29.11. V: EJB
Schwarz: Vorlesung (Mo.: H-B 8409/10, Fr.: H-F 116)
Zeitplan der Vorlesung (vorl ¨aufig!) ...
Datum Montags-Termin Datum Freitags-Termin 02.12. P: CORBA 06.12. V: Servlets, JSP
09.12. P: CORBA 13.12. V: Web Services
16.12. P: EJB 20.12. P: EJB
06.01. P: EJB 10.01. V: Web Services
13.01. P: EJB 17.01. V: Web Services
20.01. P: Web Services 24.01. V: Weitere Technologien 27.01. P: Web Services 31.01. P: Web Services
Schwarz: Vorlesung (Mo.: H-B 8409/10, Fr.: H-F 116)
Literatur
Allgemeinere Literatur
➥ Ulrike Hammerschall, Verteilte Systeme und Anwendungen.
Pearson Studium, 2005.
➥ Robert Orfali, Dan Harkey, Client/Server-Programming with Java and Corba. John Wiley & Sons, 1998.
Verteilte Systeme
➥ George Coulouris, Jean Dollimore, Tim Kindberg. Verteilte
Systeme – Konzepte und Design, 3. Auflage. Pearson Studium, 2002.
Literatur ...
Verteilte Programmierung mit Java
➥ Cay S. Horstmann, Gary Cornell. Core Java 2, Band 2 –
Expertenwissen. Sun Microsystems Press / Addison Wesley, 2008.
➥ Torsten Langner. Verteilte Anwendungen mit Java.
Markt+Technik, 2002.
➥ Jim Farley, William Crawford, David Flanagan. Java Enterprise in a Nutshell, 3rd Edition. O’Reilly, 2005.
CORBA und COM
➥ Johann Hofmann, Fritz Jobst, Roland Schabenberger.
Programmieren mit COM und CORBA, Hanser, 2001.
Literatur ...
Enterprise JavaBeans
➥ Rima P. Sriganesh, Gerald Brose, Micah Silverman. Mastering Enterprise JavaBeans 3.0. Wiley, 2006.
➥ Bill Burke, Richard Monson-Haefel. Enterprise JavaBeans 3.0, 5th Edition. O’Reilly, 2006.
Servlets
➥ Jason Hunter, William Crawford. Java Servlet Programmierung.
O’Reilly, 2002.
Web Services
➥ Manfred Hein, Henner Zeller. Java Web Services,
Client/Server-Programmierung
WS 2019/2020
1 Grundlagen: Wiederholung
1 Grundlagen: Wiederholung ...
Inhalt
➥ Architekturmodelle
➥ Zeit und Zustand in verteilten Systemen
➥ Middleware
➥ Java RMI
1.1 Architekturmodelle
Client/Server-Modell
➥ Asymmetrisches Modell: Server stellen Dienste bereit, die von (mehreren) Clients genutzt werden k ¨onnen
➥ Server verwalten i.a. Ressourcen (zentralisiert)
Aufruf Ergebnis Client
Client
Server
Rechner Prozeß
Aufruf
Server Ergebnis
Server kann selbst
wieder als Client agieren
1.1 Architekturmodelle ...
Client/Server-Modell ...
➥ I.A. nebenl ¨aufige Anfragen mehrerer Client-Prozesse an den Server-Prozeß
Client (reply) Zeit (request)
Antwort Anfrage
Start Ende
Server Client
1.1 Architekturmodelle ...
n-Tier-Architekturen
➥ Verfeinerungen der Client/Server-Architektur
➥ Modelle zur Verteilung einer Anwendung auf die Knoten einer verteilten Systems
➥ Vor allem bei Informationssystemen verwendet
➥ Tier (engl. Schicht / Stufe) kennzeichnet einen unabh ¨angigen Prozeßraum innerhalb einer verteilten Anwendung
➥ Prozeßraum kann, muß aber nicht physischem Rechner entsprechen
➥ mehrere Prozeßr ¨aume auf einem Rechner m ¨oglich
1.1 Architekturmodelle ...
2-Tier-Architektur
➥ Client- und Server-Tier
➥ Keine eigene Tier f ¨ur die Anwendungslogik
(Verteilung auf Client−
und Server−Tier variiert) Präsentation
Datenhaltung
Anwendungslogik Client−Tier
Server−Tier
➥ Vorteil: einfach, performant
1.1 Architekturmodelle ...
3-Tier-Architektur
Präsentation
Anwendungslogik Datenhaltung
Client−Tier
Middle−Tier
Server−Tier
➥ Standard-Verteilungsmodell f ¨ur einfache Web-Anwendungen:
➥ Client-Tier: Web-Browser zur Anzeige
➥ Middle-Tier: Web-Server mit Servlets / JSP / ASP
➥ Server-Tier: Datenbank-Server
1.1 Architekturmodelle ...
Beispiel: typische Internet-Anwendung
Intranet
Internet Web−
Client
Web−
Client
0 1
0000 1111 0000 1111 000000 000000 111111 111111
000000 111111 0000 1111 000000 000000 111111 111111
0000 1111 0000 1111 000000 000000 111111 111111
Anwen−
dungs−
Server Server
Web− Daten−
bank−
Server
Tier 1 Tier 2 Tier 3 Tier 4
1.1 Architekturmodelle ...
Beispiel: typische Internet-Anwendung
Intranet
Internet Web−
Client
Web−
Client
00 11
0000 1111 0000 00 1111 11
000000 000000 111111 111111
000000 111111 0000 00 1111 11
000000 000000 111111 111111
0000 1111 0000 00 1111 11
000000 000000 111111 111111
Anwen−
dungs−
Server Server
Web− Daten−
bank−
Server
Tier 1 Tier 2 Tier 3 Tier 4
DMZ
00 00 00 00 11 11 11 11
0 0 0 0 1 1 1 1
Firewall Firewall00001111
0000 00 1111 11
000000 000000 111111 111111
Server Web−
1.2 Zeit und Zustand in verteilten Systemen
Was ist der Unterschied zwischen einem verteilten System und einem Ein-/Mehrprozessorsystem?
➥ Ein- bzw. Mehrprozessorsystem:
➥ nebenl ¨aufige Prozesse: pseudo-parallel durch time sharing bzw. echt parallel
➥ globale Zeit: alle Ereignisse in den Prozessen lassen sich zeitlich eindeutig ordnen
➥ globaler Zustand: zur jeder Zeit kann ein eindeutiger Zustand des Systems angegeben werden
➥ Verteiltes System
➥ echte Parallelit ¨at
1.2 Zeit und Zustand in verteilten Systemen ...
Globale Zeit
➥ Auf Ein-/Mehrprozessorsystem
➥ jedem Ereignis kann (zumindest theoretisch) ein eindeutiger Zeitstempel derselben lokalen Uhr zugeordnet werden
➥ bei Mehrprozessorsystemen: Synchronisation am gemeinsamen Speicher
➥ In verteilten Systemen:
➥ viele lokale Uhren (eine pro Knoten)
➥ exakte Synchronisation der Uhren (prinzipiell!) nicht m ¨oglich
➥ ⇒ Reihenfolge von Ereignissen auf verschiedenen Knoten nicht (immer) eindeutig zu ermitteln
(vgl. spezielle Relativit ¨atstheorie)
1.2 Zeit und Zustand in verteilten Systemen ...
Eine Auswirkung der Verteiltheit
➥ Szenario: zwei Prozesse beobachten zwei andere Prozesse
Beobachter A
Beobachter B Prozess 1 Prozess 2
z y x
z x y
x y z
➥ Die Beobachter sehen die Ereignisse ggf. in unterschiedlicher Reihenfolge!
➥ Problem z.B., falls die Beobachter replizierte Datenbanken und
1.2 Zeit und Zustand in verteilten Systemen ...
Globaler Zustand: Ein Beispiel zur Motivation
➥ Szenario: Peer-to-Peer-Anwendung, Prozesse senden sich gegenseitig Auftr ¨age
➥ Frage: wann kann die Anwendung terminieren?
➥ Falsche Antwort: wenn kein Prozeß mehr einen Auftrag bearbeitet
➥ Grund: Auftr ¨age k ¨onnen noch in Nachrichten unterwegs sein!
Auftrag
Prozeß 1 Prozeß 2
idle idle
1.2 Zeit und Zustand in verteilten Systemen ...
➥ Wie bestimmt sich der Gesamtzustand eines verteilten Prozeß- systems?
➥ naiv: Summe der Zust ¨ande aller Prozesse (falsch!)
➥ Zwei Aspekte m ¨ussen beachtet werden:
➥ Nachrichten, die noch in ¨Ubertragung sind
➥ m ¨ussen mit in den Zustand aufgenommen werden
➥ Fehlen einer globalen Zeit
➥ ein Globalzustand zur Zeit t kann nicht definiert werden!
➥ Zust ¨ande der Prozesse beziehen sich immer auf lokale (und damit unterschiedliche) Zeiten
➥ Frage: Bedingung an die lokalen Zeiten? ⇒ konsistente
1.3 Middleware
Verteilte Anwendung (VA)
Verteiltes System (VS) Netz
VA−
VS−Knoten Middleware Komponente VA−
VS−Knoten Middleware Komponente KomponenteVA−
VS−Knoten
KomponenteVA−
VS−Knoten Verteilte Anwendung (VA)
Verteiltes System (VS) Netz
➥ VA nutzt VS f ¨ur Kommunikation zwischen ihren Komponenten
➥ VSe bieten i.a. nur einfache Kommunikationsdienste an
➥ direkte Nutzung: Netzwerkprogrammierung
➥ Middleware bietet intelligentere Schnittstellen
➥ verbirgt Details der Netzwerkprogrammierung
1.3 Middleware ...
➥ Middleware ist Schnittstelle zwischen verteilter Anwendung und verteiltem System
➥ Ziel: Verbergen der Verteilungsaspekte vor der Anwendung
➥ u.a. Zugriffs- und Orts-Transparenz
➥ Middleware kann auch Zusatzdienste f ¨ur Anwendungen bieten
➥ starke Unterschiede bei existierender Middleware
➥ Unterscheidung:
➥ kommunikationsorientierte Middleware
➥ (nur) Abstraktion von der Netzwerkprogrammierung
➥ anwendungsorientierte Middleware
1.3.1 Kommunikationsorientierte Middleware
➥ Fokus: Bereitstellung einer Kommunikationsinfrastruktur f ¨ur verteilte Anwendungen
➥ Aufgaben:
➥ Kommunikation
➥ Behandlung der Heterogenit ¨at
➥ Fehlerbehandlung
Anwendung
Kommunikationsorientierte Middleware
Betriebssystem / verteiltes System
1.3.1 Kommunikationsorientierte Middleware ...
Entfernter Prozeduraufruf (RPC, Remote Procedure Call)
➥ Erm ¨oglicht einem Client den Aufruf einer Prozedur in einem entfernten Server-Prozeß
P(a) {...
return b;
} y = P(x); Eingabeparameter
Prozeß Client−
Prozeß Server−
Resultate
➥ Kommunikation nach Anfrage / Antwort-Prinzip
Entfernter Methodenaufruf (RMI, Remote Method Invocation)
➥ Erm ¨oglicht einem Objekt, Methoden eines entfernten Objekts
1.3.1 Kommunikationsorientierte Middleware ...
Gemeinsame Grundkonzepte entfernter Aufrufe
➥ Client und Server werden durch Schnittstellendefinition entkoppelt
➥ legt Namen der Aufrufe, Parameter und R ¨uckgabewerte fest
➥ Einf ¨uhrung von Client-Stubs und Server-Skeletons als Zugriffsschnittstelle
➥ werden automatisch aus Schnittstellendefinition generiert
➥ IDL-Compiler, Interface Definition Language
➥ sind verantwortlich f ¨ur Marshalling / Unmarshalling sowie f ¨ur die eigentliche Kommunikation
➥ realisieren Zugriffs- und Ortstransparenz
1.3.1 Kommunikationsorientierte Middleware ...
Funktionsweise der Client- und Server-Stubs (RPC)
Client−Stub Server−Skeleton P(a) {
y=P(x)
P(a) {...
return b;
}
; ;
Client−Prozeß
return b;
}
receive(m1);
client=sender(m1);
Argumente x aus Nach−
richt m1 auspacken y = P(x)
} Argumente a in
Nachricht m1 packen send(Server, m1);
receive(Server, m2) Ergebnis b aus Nach−
richt m2 auspacken
while (true) {
send(client, m2);
richt m2 packen Ergebnis y in Nach−
Server−Prozeß
1.3.1 Kommunikationsorientierte Middleware ...
Basis von RMI: Das Proxy-Pattern
➥ Client arbeitet mit Stellvertreterobjekt (Proxy) des eigentlichen Serverobjekts
➥ Proxy und Serverobjekt implementieren dieselbe Schnittstelle
➥ Client kennt / nutzt lediglich diese Schnittstelle
Client Proxy Objekt
Schnittstelle
<<interface>>
1.3.1 Kommunikationsorientierte Middleware ...
Ablauf eines entfernten Methodenaufrufs
Proxy
Skeleton ruft dieselbe
Methode für das Objekt auf Objekt
stelle wie beim Selbe Schnitt−
Objekt Status Methode Schnitt−
stelle Client−BS
Client
Server−BS Server
Skeleton
Server−Rechner Client−Rechner
Client ruft eine
Methode auf
1.3.1 Kommunikationsorientierte Middleware ...
Erstellung eines Client/Server-Programms
Server
Client Schnittstellen−
beschreibung
Client−
Programm
Compiler
Compiler Client−Stubs
CompilerIDL−
Server−Skel.
Laufzeit−
Bibliothek RPC/RMI Server−
Prozeduren
➥ Gilt prinzipiell f ¨ur alle Realisierungen entfernten Aufrufe
1.3.2 Anwendungsorientierte Middleware
➥ Setzt auf kommunikationsorientierter Middleware auf
➥ Erweitert diese um:
➥ Laufzeitumgebung
➥ Dienste
➥ Komponentenmodell
Dienste Dienste Laufzeitumgebung
Anwendungs−
komponente Anwendungs−
komponente Anwendungs−
komponente
Komponentenmodell
Kommunikationsinfrastruktur
1.3.2 Anwendungsorientierte Middleware ...
Laufzeitumgebung
➥ Ressourcenverwaltung
➥ Pooling von Prozessen, Threads, Verbindungen
➥ Steuerung der Nebenl ¨aufigkeit
➥ Verbindungsverwaltung
➥ Verbesserung der Verf ¨ugbarkeit
➥ Replikation, Clustering
➥ Sicherheitsmechanismen
➥ Authentifizierung und Autorisierung
➥ Vertraulichkeit und Integrit ¨at
1.3.2 Anwendungsorientierte Middleware ...
Dienste
➥ Namensdienst (Verzeichnisdienst)
➥ Zuordnung von Namen zu Referenzen (Adressen)
➥ Sitzungsverwaltung
➥ Transaktionsverwaltung
➥ Persistenzdienst
➥ z.B. objektrelationaler Mapper (OR-Mapper)
Komponentenmodell
➥ Komponentenbegriff, Schnittstellenvertr ¨age, Laufzeitumgebung
Roland Wism ¨uller
Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.dde Tel.: 0271/740-4050, B ¨uro: H-B 8404
Client/Server-Programmierung
WS 2019/2020
14.10.2019
1.4 Java RMI
➥ Java RMI ist fester Bestandteil von Java
➥ erlaubt Nutzung entfernter Objekte
➥ Wichtige Elemente von Java RMI (im Paket java.rmi):
➥ entfernte Objektimplementierungen
➥ Client-Schnittstellen (Stubs) zu entfernten Objekten
➥ Namensdienst, um Objekte im Netz ausfindig zu machen
➥ Stub- und Skeleton-Klassen werden automatisch aus Schnittstel- lendefinition (Java Interface) generiert
➥ ab JDK 1.5 dynamisch zur Laufzeit
➥ Namensdienst: RMI Registry
1.4 Java RMI ...
1.4.1 Hello World mit Java RMI
Client−JVM Server−JVM
class HelloClient {
s = h.sayHello();
Client−Klasse ...
Hello h;
...
...
Server−Klasse
class HelloServer
String sayHello() {
return "Hello World";
} ...
Interface
interface Hello {
String sayHello();
}
implements Hello {
1.4.1 Hello World mit Java RMI ...
Ablauf der Entwicklung:
1. Entwurf der Schnittstelle f ¨ur das Server-Objekt 2. Implementierung der Server-Klasse
3. Entwicklung der Server-Anwendung zur Aufnahme des Server-Objekts
4. Entwicklung der Client-Anwendung mit Aufrufen des Server-Objekts
5. Ubersetzen und Starten des Systems¨
1.4.1 Hello World mit Java RMI ...
Entwurf der Schnittstelle f ¨ur das Server-Objekt
➥ Wird als normale Java-Schnittstelle spezifiziert
➥ Muß von java.rmi.Remote abgeleitet werden
➥ kein Erben von Operationen, nur Markierung als Remote-Interface
➥ Jede Methode muß die Ausnahme java.rmi.RemoteException (oder eine Basisklasse davon) ausl ¨osen k ¨onnen
➥ Basisklasse f ¨ur alle m ¨oglicherweise auftretenden Fehler
➥ im Client, bei der ¨Ubertragung, im Server
➥ Keine Einschr ¨ankungen gegen ¨uber lokalen Schnittstellen
➥ aber: semantische Unterschiede (Parameter ¨ubergabe!)
1.4.1 Hello World mit Java RMI ...
Hello-World Interface
RemoteException zeigt Fehler im entfernten
Objekt bzw. bei Kommu−
nikation an Marker−Schnittstelle ,
enthält keine Methoden, markiert Interface als RMI−Schnittstelle
public interface Hello extends Remote {
String sayHello() throws RemoteException;
import java.rmi.RemoteException;
import java.rmi.Remote;
}
1.4.1 Hello World mit Java RMI ...
Implementierung der Server-Klasse
➥ Eine Klasse, die remote nutzbar sein soll, muß:
➥ ein festgelegtes Remote-Interface implementieren
➥ i.d.R. von java.rmi.server.UnicastRemoteObject abgeleitet werden
➥ definiert Aufrufsemantik: Punkt-zu-Punkt
➥ einen Konstruktor besitzen, der RemoteException werfen kann
➥ Erzeugung des Objekts muß in try-catch-Block stehen
➥ Methoden brauchen throws RemoteException nicht nochmals anzugeben
➥ ausser sie werfen diese Exception explizit selbst
1.4.1 Hello World mit Java RMI ...
Hello-World Server (1)
Remote Methode import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class HelloServer extends UnicastRemoteObject implements Hello {
super();
}
return "Hello World!";
public HelloServer() throws RemoteException {
public String sayHello() {
1.4.1 Hello World mit Java RMI ...
Entwicklung der Server-Anwendung zur Aufnahme des Server-Objekts
➥ Aufgaben:
➥ Erzeugen eines Server-Objekts
➥ Registrieren des Objekts beim Namensdienst
➥ unter einem festgelegten, ¨offentlichen Namen
➥ Typischerweise keine neue Klasse, sondern main-Methode der Server-Klasse
1.4.1 Hello World mit Java RMI ...
Hello-World Server (2)
Server−Objekts
Erzeugen des Registrieren des Server−Objekts unter dem Namen "Hello−Server"
public static void main(String args[]) { try {
HelloServer obj = new HelloServer();
catch (Exception e) {
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
} }
Naming.rebind("rmi://localhost/Hello−Server", obj);
}
1.4.1 Hello World mit Java RMI ...
Entwicklung der Client-Anwendung mit Aufrufen des Server-Objekts
➥ Client muß sich zun ¨achst beim Namensdienst ¨uber den Namen eine Referenz auf das Server-Objekt holen
➥ Type cast auf den korrekten Typ erforderlich
➥ Dann: beliebige Methodenaufrufe m ¨oglich
➥ syntaktisch kein Unterschied zu lokalen Aufrufen
➥ Anmerkung: Client kann Remote-Referenzen auch auf anderen Wegen erhalten
➥ z.B. als R ¨uckgabewert einer Remote-Methode
1.4.1 Hello World mit Java RMI ...
Hello-World Client
Objektreferenz vom Name−Server holen
Aufruf der Methode
des entfernten Objekts public static void main(String args[]) {
public class HelloClient { try {
import java.rmi.*;
(Hello)Naming.lookup("rmi://bspc02/Hello−Server");
String message = obj.sayHello();
System.out.println(message);
}
catch (Exception e) { ...
} }
Hello obj =
1.4.1 Hello World mit Java RMI ...
Ubersetzen und Starten des Systems¨
➥ Ubersetzen der Java-Quellen¨
➥ Quelldateien: Hello.java, HelloServer.java, HelloClient.java
➥ Aufruf: javac *.java
➥ erzeugt: Hello.class, HelloServer.class, HelloClient.class
➥ Erzeugen des Client-Stubs (Proxy-Objekt)
➥ f ¨ur Clients bis JDK 1.4:
➥ Aufruf: rmic -v1.2 HelloServer
➥ erzeugt HelloServer Stub.class
➥ ab JDK 1.5: Client erzeugt Proxy-Klasse zur Laufzeit
1.4.1 Hello World mit Java RMI ...
Ubersetzen und Starten des Systems ...¨
Client−Seite Server−Seite
HelloServer.java
HelloClient.class Hello.class Hello.class HelloServer.class
javac javac
HelloClient.java Hello.java
rmic
1.4.1 Hello World mit Java RMI ...
Ubersetzen und Starten des Systems ...¨
➥ Starten des Namensdienstes
➥ Aufruf: rmiregistry [port]
➥ erlaubt aus Sicherheitsgr ¨unden nur die Registrierung von Objekten auf dem lokalen Host
➥ d.h. RMI-Registry muß auf Server-Rechner laufen
➥ Standard-Port: 1099
➥ Starten des Servers
➥ Aufruf: java HelloServer
➥ Starten des Clients
➥ Aufruf: java HelloClient
1.4 Java RMI ...
1.4.2 Parameter ¨ubergabe
➥ Ubergabe von Parametern an¨ Remote-Methoden erfolgt
➥ entweder ¨uber call-by-value
➥ f ¨ur Werttypen und serialisierbare Objekte
➥ oder ¨uber call-by-reference
➥ f ¨ur Objekte, die Remote implementieren
➥ Entscheidung wird z.T. erst zur Laufzeit getroffen!
➥ R ¨uckgabe des Ergebnisses folgt selben Regeln wie Parameter-
¨ubergabe
1.4.2 Parameter ¨ubergabe ...
Ubergabe eines serialisierbaren Objekts¨
param Original
Client−
Objekt param Stub−
Objekt Server−
Objekt
verbindungNetz−
unabhängige Kopie
<<create>>
op(param) Skele−
ton
op(param) param
serialisieren
param
deserialisieren
m()
1.4.2 Parameter ¨ubergabe ...
Ubergabe eines¨ Remote-Objekts
param Stub Stub−
Objekt param
Client−
Objekt
param Stub
Netz−
verbindung
Server−
Objekt
<<create>>
op(paramStub) Skele−
ton op(param)
toStub(param) paramStub
paramStub serialisieren
paramStub deserialisieren
m()
Roland Wism ¨uller
Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.dde Tel.: 0271/740-4050, B ¨uro: H-B 8404
Client/Server-Programmierung
WS 2019/2020
18.10.2019
Client/Server-Programmierung
WS 2019/2020
2 Java Database Connectivity (JDBC)
2 Java Database Connectivity (JDBC) ...
2.1 ¨Uberblick
➥ Java-API zum portablen Zugriff auf relationale Datenbank- Systeme
➥ Unabh ¨angig von konkreter Datenbank-Implementierung
➥ Funktionen:
➥ Verbindung zur Datenbank herstellen
➥ Ausf ¨uhrung von SQL-Anweisungen
➥ Zugriff auf Abfrage-Ergebnisse
➥ Vergleichbar mit ODBC, aber einfachere Schnittstelle
➥ Anschluß zur Datenbank ¨uber herstellerspezifische Treiber
2 Java Database Connectivity (JDBC) ...
2.2 Relationale Datenbanken und SQL
➥ Relationale Datenbank = Menge von Tabellen
➥ jede Spalte hat Namen und Datentyp
➥ jede Zeile enth ¨alt i.a. ein Feld, dessen Wert die Zeile eindeutig identifiziert (Prim ¨arschl ¨ussel)
➥ Aufbau festgelegt in Datenbank-Schema
➥ Beispiel:
Primär−
schlüssel AG_ID AG_NAME
2
1 BMW
Siemens ag_name
ID AG_ID DAY VALUE
9 1
3 7
9
9 102.30
99.10 ag_data
2.2 Relationale Datenbanken und SQL ...
SQL
➥ Standardisierte Abfragesprache f ¨ur relationale Datenbanken
➥ Erlaubt u.a.:
➥ Abfrage von Daten (SELECT)
➥ Erzeugung neuer Tabellen (CREATE TABLE)
➥ Einf ¨ugen von Datens ¨atzen (Zeilen) (INSERT)
➥ L ¨oschen von Datens ¨atzen (DELETE)
➥ Andern von Datens ¨atzen (UPDATE)¨
➥ Auswahl der Datens ¨atze i.d.R. ¨uber deren Inhalt
➥ h ¨aufig ¨uber Prim ¨arschl ¨ussel
2.2 Relationale Datenbanken und SQL ...
Beispiele f ¨ur SQL-Anfragen
➥ SELECT AG_ID, AG_NAME FROM ag_name
WHERE AG_NAME = ’Siemens’
➥ liefert die Zeile f ¨ur Siemens aus der ag name-Tabelle
➥ SELECT ag_name.AG_NAME, ag_data.VALUE FROM ag_name, ag_data
WHERE VALUE > 90 AND ag_name.AG_ID = ag_data.AG_ID
➥ liefert Name und Kurs aller Aktien mit Kurs ¨uber 90
➥ gibt Information aus zwei Tabellen zur ¨uck
➥ Verbindung der Eintr ¨age ¨uber den Prim ¨arschl ¨ussel (Natural Join)
2 Java Database Connectivity (JDBC) ...
2.3 Architektur von JDBC
SQL−ServerMS mySQL Oracle
Java Anwendung
JDCB Treiber Manager JDBC/ODBC
Brücke
Treiber für
mySQL Oracle
Treiber für ODBC
Treiber
2.3 Architektur von JDBC ...
Klassen des JDBC-Kerns
Statement
PreparedStatement
CallableStatement
<<interface>>
<<interface>>
<<interface>>
ResultSet
ResultSetMetaData
<<interface>>
<<interface>>
Connection
<<interface>>
Driver
<<interface>>
DriverManager
DriverPropertyInfo java.sql
2.3 Architektur von JDBC ...
Klassen des JDBC-Kerns ...
➥ Interface Driver
➥ Schnittstelle, die alle JDBC-Treiber implementieren m ¨ussen
➥ neu geladener Treiber registriert sich bei DriverManager
➥ Klasse DriverManager
➥ verwaltet Driver-Objekte
➥ erzeugt Datenbank-Verbindungen (Connection)
➥ Klasse DriverPropertyInfo
➥ erlaubt Definition spezieller Parameter beim Aufbau der Datenbank-Verbindung
2.3 Architektur von JDBC ...
Klassen des JDBC-Kerns ...
➥ Interface Connection
➥ repr ¨asentiert Sitzung mit ausgew ¨ahlter Datenbank
➥ erlaubt Erzeugung von Statement-Objekten
➥ verwaltet Informationen zum Zustand der Datenbank
➥ erlaubt Abfrage von Metadaten der Datenbank
(Methode getMetaData(), Resultat: DatabaseMetaData)
➥ z.B. unterst ¨utzte SQL-Versionen, Limitierungen des Datenbank-Systems, ...
➥ Interface Statement
➥ zur Ausf ¨uhrung einer SQL-Anfrage
2.3 Architektur von JDBC ...
Klassen des JDBC-Kerns ...
➥ Interface PreparedStatement
➥ zur Ausf ¨uhrung einer vorkompilierten SQL-Anfrage
➥ effizienter bei wiederholter Ausf ¨uhrung
➥ Interface CallableStatement
➥ erlaubt Aufruf von Stored Procedures
➥ SQL-Prozeduren, die in Datenbank selbst abgelegt sind
➥ Interface ResultSet
➥ Ergebnis-Relation einer Datenbank-Anfrage
➥ Interface ResultSetMetaData
➥ Metadaten zu den Spalten der Ergebnis-Relation
2 Java Database Connectivity (JDBC) ...
2.4 Ein Beispiel
import java.sql.*;
import java.lang.*;
public class Beispiel {
public static void main(String[] args) { try {
// Laden des JDBC−Treibers
Class.forName("com.mysql.jdbc.Driver");
}
catch (ClassNotFoundException e) {
System.out.println("Treiber nicht ladbar:" + e);
return;
2.4 Ein Beispiel ...
try {
// Verbindung zur Datenbank
Connection con = DriverManager.getConnection(
"jdbc:mysql://bslabserv01.lab.bvs/cspdb","","");
// Erzeuge SQL−Anweisung und f ¨uhre sie aus
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(
"SELECT AG_ID, AG_NAME FROM ag_name");
// Ausgabe des Ergebnisses
while (rs.next()) {
System.out.println("" + rs.getInt("AG_ID") + ", "
+ rs.getString("AG_NAME"));
2.4 Ein Beispiel ...
// Alles schließen
rs.close();
stmt.close();
con.close();
}
catch (SQLException e) {
System.out.println("SQL Exception: "
+ e.getMessage());
e.printStackTrace(System.out);
} } }
2 Java Database Connectivity (JDBC) ...
2.5 Details zu JDBC Laden der Treiber
➥ Vor Verwendung von JDBC m ¨ussen die Treiber geladen werden:
➥ try {
Class.forName("com.mysql.jdbc.Driver");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch (ClassNotFoundException e) { ... }
➥ Alternativ: Setzen der jdbc.drivers Property
➥ java -Djdbc.drivers=com.mysql.jdbc.Driver:sun.jdbc.
odbc.JdbcOdbcDriver ...
2.5 Details zu JDBC ...
Verbindung zur Datenbank herstellen
➥ Verbindung wird durch Connection-Objekt repr ¨asentiert
➥ Mehrere Datenbank-Verbindungen pro Anwendung m ¨oglich
➥ Erzeugung ¨uber
➥ Connection con = DriverManager.getConnection(
"url ", "user ", "password ");
➥ Variante von getConnection() erlaubt Definition von Properties f ¨ur die Datenbank-Verbindung
➥ Wenn Verbindung nicht mehr ben ¨otigt wird:
➥ explizites Schließen mit Methode con.close()
2.5 Details zu JDBC ...
Ausf ¨uhrung einer SQL-Anweisung
➥ Erzeugung eines Statement-Objekts
➥ Statement stmt = con.createStatement();
➥ Ausf ¨uhrung der SQL-Anweisung
➥ ResultSet rs = stmt.executeQuery("SELECT ...");
➥ Methoden executeUpdate() f ¨ur Anfragen ohne Ergebnis, bzw. execute(), falls unbekannt, ob Ergebnis geliefert wird
➥ execute() liefert true, falls Ergebnis vorhanden
➥ Statement-Objekt repr ¨asentiert eine einzige SQL-Anfrage
➥ ResultSet wird bei erneuter Anfrage ¨uber selbes Statement-Objekt ung ¨ultig
2.5 Details zu JDBC ...
Zugriff auf die Resultate
➥ Ergebnis einer SQL-Anfrage (SELECT) ist eine Tabelle
➥ Struktur gekapselt in ResultSet-Objekt
➥ Methoden u.a.:
➥ next(): setzt
”Lesezeiger“ auf n ¨achste Zeile
➥ zu Begin steht Zeiger vor der ersten Zeile
➥ Ergebnis false, falls keine Zeile mehr vorhanden
➥ get...(String name) / get...(int nr): liefert Inhalt des Feldes mit Spaltenname name bzw. Spaltennummer nr
➥ mehrere Methoden f ¨ur die verschiedenen Datentypen
➥ getString() liefert immer String-Repr ¨asentation
2.5 Details zu JDBC ...
SQL-Datentypen und Zugriffsmethoden (Auswahl)
SQL Typ(en) Java Typ Methode
CHAR, VARCHAR String getString()
NUMERIC, DECIMAL java.math.BigDecimal getBigDecimal()
BIT boolean getBoolean()
TINYINT byte getByte()
SMALLINT short getShort()
INTEGER int getInt()
BIGINT long getLong()
REAL float getFloat()
FLOAT, DOUBLE double getDouble()
BINARY, VARBINARY byte[] getBytes()
2.5 Details zu JDBC ...
Ausf ¨uhrung vorkompilierter SQL-Anfragen
➥ F ¨ur wiederkehrende, ¨ahnliche Aufgaben sind vorkompilierte SQL-Anfragen (PreparedStatement) effizienter
➥ die Anfragen sind auch parametrisierbar
➥ Auch Sicherheitsvorteil gegen SQL Injection
➥ Erzeugung eines PreparedStatement-Objekts
➥ PreparedStatement stmt = con.prepareStatement(
"INSERT INTO Employees (Name, Phone) (?, ?)");
➥ ? als Platzhalter f ¨ur Parameter
➥ Ausf ¨uhrung der Anfrage mit konkreten Parametern
➥ stmt.clearParameters();
stmt.setString(1, "Jimmy Dean"); // erster Param.
2.5 Details zu JDBC ...
Ausf ¨uhrung von Stored Procedures
CREATE OR REPLACE
PROCEDURE sp_interest (id IN INTEGER
bal IN OUT FLOAT) is BEGIN
SELECT balance INTO bal
FROM accounts
WHERE account_id = id;
bal = bal + bal * 0.03;
UPDATE accounts SET balance = bal
WHERE account_id = id;
Datenbanksystem gespeichert) Oracle PL/SQL−Prozedur (Im
CallableStatement stmt
= con.prepareCall(
stmt.registerOutParameter(2,
stmt.setFloat(2, 2343.23);
out.println("New Balance: "
stmt.execute();
stmt.setInt(1, accountID);
Aufruf der Prozedur über JDBC
+ stmt.getFloat(2));
Types.FLOAT);
"{call sp_interest(?,?)}");
2.5 Details zu JDBC ...
Transaktionen
➥ Verantwortlich f ¨ur Transaktionen: Connection-Objekt
➥ Methoden zur Steuerung von Transaktionen:
➥ setAutoCommit() - automatisches Festschreiben?
➥ Voreinstellung: jede SQL-Anweisung wird als individuelle Transaktion ausgef ¨uhrt
➥ commit() - Festschreiben der Transaktion
➥ rollback() - Abbruch der Transaktion
➥ setTransactionIsolation() - Isolationsebene festlegen
➥ TRANSACTION NONE, sowie die vier Isolations-Ebenen nach ANSI/ISO-SQL99 (☞ VS, 7.4):
➥ read uncommitted, read commited, repeatable read,
2.5 Details zu JDBC ...
Transaktionen ...
try {
// H ¨ochste Isolationsebene
con.setTransactionIsolation(TRANSACTION_SERIALIZABLE);
// Transaktionen mit mehreren SQL−Anweisungen zulassen
con.setAutoCommit(false);
// SQL−Anweisungen
stmt.executeUpdate("UPDATE inv SET onhand = 10 WHERE id = 5");
stmt.executeUpdate("INSERT INTO shipping (qty) VALUES (5)");
// Commit aller Aktionen seit letztem Commit/Rollback
con.commit();
}
catch (SQLException e) {
// R ¨uckg ¨angigmachen aller ¨Anderungen
con.rollback();
2 Java Database Connectivity (JDBC) ...
2.6 Zusammenfassung
➥ JDBC erlaubt portablen Zugriff auf relationale Datenbanken
➥ Abfragen ¨uber SQL
➥ Grunds ¨atzlicher Ablauf:
➥ Laden des Treibers (Class.forName())
➥ Verbindung zur Datenbank herstellen (Connection)
➥ SQL-Anweisung erzeugen (Statement)
➥ SQL-Anweisung ausf ¨uhren, Ergebnis auslesen (ResultSet)
➥ Daneben: Unterst ¨utzung f ¨ur
➥ vorkompilierte SQL-Anweisungen und Stored Procedures
Client/Server-Programmierung
WS 2019/2020
3 CORBA
3 CORBA ...
Inhalt
➥ CORBA-Architektur
➥ CORBA-Dienste
➥ Beispielprogramm
➥ CORBA im Detail
➥ IDL und IDL-Java-Mapping
➥ Namensdienst
➥ POA
➥ GIOP, IIOP und IOR
➥ Implementation- und Interface-Repository
3 CORBA ...
Literatur
➥ CORBA-Spezifikationen der OMG
➥ http://www.omg.org/technology/documents/
corba spec catalog.htm
➥ Farley / Crawford / Flanagan, Kap. 14
➥ Orfali / Harkey, Kap. 1, 4, 7-9, 17-22
➥ Hofmann / Jobst / Schabenberger, Kap. 2.2, 5, 6
➥ Michi Henning, Steve Vinoski: Advanced CORBA Programming with C++. Addison-Wesley, 1999.
3.1 Einf ¨uhrung
➥ CORBA: Common Object Request Broker Architecture
➥ Ziel: Entwicklung und Integration verteilter objektorientierter Anwendungen in heterogenen Umgebungen
➥ CORBA ist plattform- und sprachunabh ¨angig
➥ Informeller Standard, definiert durch die OMG (Object Management Group)
➥ 1989 gegr ¨undet, Ziel: F ¨orderung objektorientierter Techniken
➥ heute ¨uber 800 Mitglieder (gr ¨oßtes IT-Industriekonsortium)
➥ CORBA ist nur eine Spezifikation
➥ verschiedenste Implementierungen, z.B. Orbix, ORBACUS, Java IDL (Teil des JDK), JacORB, ORBit (GNOME!) ...
3.2 CORBA Architektur
3.2.1 Object Management Architecture (OMA)
➥ Definiert Objekt- und Referenzmodell
➥ Objektmodell
➥ unterst ¨utzt Kapselung, (Mehrfach-)Vererbung, Polymorphie
➥ Objekte bieten Dienste mit definierter Schnittstelle an
➥ Client nutzt Dienste (lokal oder entfernt) ¨uber Schnittstelle, ist vollst ¨andig von Server-Implementierung unabh ¨angig
➥ Objektimplementierung mit beliebiger Programmiersprache
➥ Referenzmodell
➥ Interaktion zw. Objekten und dazu notwendige Komponenten
➥ Herzst ¨uck: Object Request Broker (ORB)
3.2.1 Object Management Architecture (OMA) ...
Das OMA Referenzmodell
Object Request Broker
. . .
Client Server
LifeCycle Transactions Event
Naming
Application Vertical CORBA Horizontal CORBA Facilities
Objects Facilities
3.2.1 Object Management Architecture (OMA) ...
Bestandteile des OMA Referenzmodells
➥ Object Request Broker (ORB)
➥ stellt Dienstanfragen an verteilte Objekte zu
➥ realisiert Ortstransparenz f ¨ur die Client-Objekte
➥ CORBA Services (Object Services)
➥ dom ¨anenunabh ¨angige (horizontale) Schnittstellen zu wichtigen Basisdiensten, z.B. Namensdienst
➥ betriebssystem- ¨ahnliche Funktion
➥ Horizontal CORBA Facilities (Common Facilities)
➥ Schnittstellen zu anwendungsorientierten, dom ¨anen ¨uber- greifenden Diensten
3.2.1 Object Management Architecture (OMA) ...
Bestandteile des OMA Referenzmodells ...
➥ Vertical CORBA Facilities (Domain Interfaces)
➥ Schnittstellen zu anwendungsorientierten Diensten f ¨ur bestimmte Anwendungsdom ¨anen
➥ z.B. Finanzwesen, Medizin, Telekommunikation, ...
➥ Application Objects
➥ anwendungsspezifische Schnittstellen
➥ im Ggs. zu Services und Facilities nicht von der OMG standardisiert
➥ OMG spezifiziert nur die Schnittstellen, nicht die Implemen-
3.2 CORBA Architektur ...
3.2.2 Common Object Request Broker Architecture (CORBA)
➥ Zentrale Idee: transparente Kommunikation zwischen Client und Server-Objekten ¨uber ORB
➥ ORB bietet Client eine lokale (Proxy-)Schnittstelle
➥ Vorteile beim Einsatz eines ORB:
➥ Zugriffs- und Ortstransparenz
➥ Transparenz der Implementierungssprache
➥ Transparenz der Objektaktivierung
➥ ORB ¨ubernimmt ggf. Aktivierung des Objekts
➥ Transparenz der Kommunikationstechnik
3.2.2 Common Object Request Broker Arch. ...
Objektreferenzen
➥ Zugriff auf Objekte erfolgt ¨uber Objektreferenzen
➥ Objektreferenzen
➥ identifizieren genau ein Objekt
➥ aber: verschiedene Referenzen f ¨ur ein Objekt m ¨oglich
➥ k ¨onnen null sein, d.h. auf kein Objekt zeigen
➥ k ¨onnen
”h ¨angen“, wenn Objekt nicht mehr existiert
➥ k ¨onnen persistent sein
➥ sind typsicher
➥ unterst ¨utzen sp ¨ates Binden (Polymorphismus)
3.2.2 Common Object Request Broker Arch. ...
OMG Interface Definition Language (OMG IDL)
➥ OMG IDL erlaubt formale Beschreibung der Objekt-Schnitt- stellen
➥ unabh ¨angig von Implementierung der Objekte (z.B.
Programmiersprache)
➥ Objekte k ¨onnen z.B. durch C++- oder Java-Objekte, aber auch durch eigene Programme oder OO-Datenbanken
implementiert werden
➥ OMG definiert, wie IDL in verschiedene Sprachen abgebildet wird (Language Mapping)
➥ derzeit f ¨ur C, C++, Java, Smalltalk, Ada, Lisp, Phyton, Cobol, PL/1, Ruby
3.2.2 Common Object Request Broker Arch. ...
Modell des Object Request Brokers
00 11
000000 000000 111111 111111
000000000 000000000 111111111 111111111
00000000 11111111
00000 00000 11111 11111
00000 00000 11111 11111
00000000 11111111
Dynamic Skeleton Interface Skeleton
ORB Interface Dynamic
Invocation Interface Stub
Implementation Repository Interface Repository
Identische Schnittstelle für alle ORB−Implementierungen
Client Object Implementation
ORB−Core
Adapter Object
Roland Wism ¨uller
Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.dde Tel.: 0271/740-4050, B ¨uro: H-B 8404
Client/Server-Programmierung
WS 2019/2020
25.10.2019
3.2.2 Common Object Request Broker Arch. ...
Komponenten des ORB
➥ ORB Core
➥ stellt Basisfunktionalit ¨at zur Verf ¨ugung
➥ Objekt-Repr ¨asentation, Kommunikationsmechanismen
➥ ist i.d.R. verteilt implementiert
➥ Stub und Skeleton
➥ f ¨ur entfernten Methodenaufruf
➥ vom IDL-Compiler aus Schnittstellendefinition erzeugt
➥ Dynamic Invocation Interface und Dynamic Skeleton Interface
➥ erlauben dynamische Methodenaufrufe/-implementierungen
3.2.2 Common Object Request Broker Arch. ...
Komponenten des ORB ...
➥ Object Adapter
➥ stellt Objektimplementierung Dienste des ORB zur Verf ¨ugung
➥ Funktionen u.a.:
➥ Methodenaufrufe ( ¨uber Skeletons)
➥ Abbildung von Referenzen auf Impementierungen
➥ Registrierung von Implementierungen
➥ Generierung und Interpretation von Objektreferenzen
➥ Objektaktivierung und -deaktivierung
➥ unterschiedliche Objektadapter m ¨oglich
➥ ab CORBA 2.2: Portable Object Adapter (POA) als Standard-Schnittstelle zum Objektadapter
3.2.2 Common Object Request Broker Arch. ...
Komponenten des ORB ...
➥ ORB Interface
➥ Schnittstelle f ¨ur Dienste, die der ORB dem Client und allen Objektimplementierungen zur Verf ¨ugung stellt
➥ Interface Repository
➥ Dienst, der zur Laufzeit persistente Information zu den registrierten Objektschnittstellen zur Verf ¨ugung stellt
➥ Nutzung ggf. durch ORB und / oder Clients
➥ allgemein: jegliche Information zu Objekt-Schnittstellen
➥ Implementation Repository
➥ enth ¨alt Information, die es dem ORB erlaubt, Objekte zu