Client/Server-Programmierung

Größe: px
Ab Seite anzeigen:

Download "Client/Server-Programmierung"

Transkript

1 Client/Server-Programmierung WS 2014/2015 Betriebssysteme / verteilte Systeme Tel.: 0271/ , Büro: H-B 8404 Stand: 23. Januar 2015 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) i Inhaltsverzeichnis 0 Organisation 2 1 Grundlagen: Wiederholung Architekturmodelle Zeit und Zustand in verteilten Systemen Middleware Kommunikationsorientierte Middleware Anwendungsorientierte Middleware Java RMI Hello World mit Java RMI

2 1.4.2 Parameterübergabe Java Database Connectivity (JDBC) Überblick Relationale Datenbanken und SQL Architektur von JDBC Ein Beispiel Details zu JDBC Zusammenfassung CORBA Einführung CORBA Architektur Object Management Architecture (OMA) Common Object Request Broker Architecture (COR- BA) CORBA-Dienste Hello World mit CORBA CORBA im Detail OMG IDL und Java-Mapping Name Service Factories Delegation und Tie-Klassen Statische und dynamische Aufrufe Portable Object Adapter (POA)

3 3.4.7 GIOP, IIOP und IOR Implementation Repository (IMR) Interface Repository (IR) Sicherheit Zusammenfassung RMI / IIOP Java Komponenten-Modelle Komponenten-Modelle Komponentenmodelle in Java EE JavaBeans Ereignisse Properties Persistenz Introspektion Zusammenfassung Enterprise Java Beans (EJB 3.0) Arten von EJBs Anatomie einer EJB-Anwendung Einschub: Java Annotationen Beispiel Hello World Einschub: OpenEJB Dienste des EJB-Containers Der Deployment-Deskriptor ejb-jar.xml

4 5.4.8 Session Beans: Details Entities: Details Transaktionen Zusammenfassung Servlets und JSP Servlets Grundlagen Einschub: Web-Server im Labor Beispiel: Hello-World Servlet Lebenszyklus eines Servlets Wichtige Klassen und Methoden Sitzungs-Management Java Server Pages (JSP) Spezielle Tags für JSP Vordefinierte Variablen Beispiele JSP Direktiven JSP und Java Beans Zusammenfassung Web Services Einführung Web-Service-Standards

5 7.2.1 XML (Extensible Markup Language) SOAP WSDL Nutzung von SOAP und WSDL Web-Services und EJB Web Services mit Axis Technisches zu Axis Beispiel: Hello-World mit Axis Details zu den Axis2-Werkzeugen Sitzungs-Management mit Axis Axis2 Module Web Services und Sicherheit Nutzung von Tomcat6 mit TLS/SSL Passwort-Authentifizierung mit Tomcat6 und Axis Nutzung der WS Security Paradigmen Zusammenfassung Weitere Client/Server-Technologien Technologien zur Netzwerkprogrammierung Technologien für dynamische WWW-Seiten Microsoft.Net und DCOM

6 Client/Server-Programmierung WS 2014/ Organisation Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 2 Zu meiner Person Studium der Informatik an der Techn. Univ. München dort 1994 promoviert, 2001 habilitiert Seit Apr Prof. für Betriebssysteme und verteilte Systeme an der Univ. Siegen Forschung: Beobachtung, Analyse und Steuerung paralleler und verteilter Systeme Mentor für die Bachelor-/Master-Studiengänge Informatik mit Nebenfach/Vertiefung Mathematik Tel.: 0271/ Büro: H-B 8404 Sprechstunde: Mo., 14:15-15:15 Uhr Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 3

7 Zur Fachgruppe Betriebssysteme / verteilte Systeme Andreas Hoffmann siegen.de 0271/ H B 8405 Elektronische Prüfungs und Übungssysteme an Hochschulen IT Sicherheit Webtechnologien Mobile Anwendungen Julia Dauwe siegen.de 0271/ H B 8405 Context Aware Systems Bring Your Own Device (BYOD) Mobile Anwendungen und Datenschutz Adrian Kacso siegen.de 0271/ H B 8406 Kommunikationsprotokolle für drahtlose Sensornetze Kommunikation und Koordination in verteilten Systemen Betriebssysteme (RT, Embedded) Alexander Kordes siegen.de 0271/ H B 8407 Automotive Electronics Fahrzeugnetzwerke Robustheit, Fehleranalyse, Fehlerdetektion Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 4 Lehrangebot Vorlesungen/Praktika Rechnernetze I, 5 LP (jedes SS) Rechnernetze Praktikum, 5 LP (jedes WS) Rechnernetze II, 5 LP (jedes SS) Betriebssysteme I, 5 LP (jedes WS) Parallelverarbeitung, 5 LP (jedes WS) Verteilte Systeme, 5 LP (jedes SS) (wird auch als Betriebssysteme II anerkannt) Client/Server-Programmierung, 5 LP (jedes WS) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 5

8 Lehrangebot... Projektgruppen z.b. Werkzeug zur Algorithmen-Visualisierung z.b. Infrastruktur zum Analysieren des Android Market Abschlussarbeiten (Bachelor, Master, Diplom) Themengebiete: Mobile Plattformen (ios, Android), Sensornetze, Parallelverarbeitung, Monitoring,... z.b. Statische Analyse des Informationsflusses in Android Apps Seminare Themengebiete: Webtechnologien, Sensornetze, Android,... Ablauf: Blockseminare 30 Min. Vortrag, 5000 Worte Ausarbeitung Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 6 Zur Vorlesung Vorlesung mit Praktikum: 2+2 SWS, 5 LP (4 bzw. 8 LP möglich) Termine: Fr., 12:30-14:00, H-F 116 (Vorl.) bzw. H-A 4111 (Prakt.) Mo., 16:00-17:30, H-B 8409/10 (Vorl.) bzw. H-A 4111 (Prakt.) Information, Folien und Ankündigungen: ws1415/csp Folienskript vollständig verfügbar Folien werden ggf. leicht aktualisiert und i.d.r. spätestens am Tag vor der Vorlesung bereitgestellt (als PDF) Codebeispiele finden Sie lokal auf den Laborrechnern unter /home/wismueller/csp Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 7

9 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 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 8 Methodik Vorlesung: Grundlagen theoretisches Wissen zur verteilten Systemen, Middleware und Komponenten Code-Beispiele und Tutorials Praktikum: praktische Anwendung Nachvollziehen der Tutorials eigenständige Programmierarbeit praktische Erfahrung, auch: Aufwerfen von Fragen Realisierung einer kleinen Börsenanwendung mit RMI, CORBA, EJB und Web Services zusätzlich kleinere einführende und weiterführende Aufgaben Programmierung ausschließlich in Java Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 9

10 Prüfung Mündliche Prüfung Dauer ca. 40 min. Stoff: Vorlesung und Praktikum! Prüfung erstreckt sich auch auf die praktischen Arbeiten aktive Teilnahme am Praktikum ist Zulassungs-Voraussetzung! Anmeldung: Terminabsprache im Sekretariat bei Fr. Baule per oder persönlich (H-B 8403, nachmittags) Anmeldung beim Prüfungsamt Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 10 Organisatorisches zum Praktikum Benutzerordnung und Kartenschlüsselantrag: ws1415/csp Abgabe bis bis bei Fr. Baule, H-B 8403 (nachmittags) oder in der Vorlesung Praktikumsbeginn: nächste Woche Einführung in die Rechner-Umgebung (Linux) Ausgabe der Kennungen Benutzungsvereinbarung im WWW beachten! Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 11

11 Rechnerumgebung im Labor H-A 4111 Linux-PCs, privates IP-Netz, beschränkter Internet-Zugang Fachgruppennetz (bs.informatik.uni siegen.de) / Internet Server Cluster bvsclk01 bvsclk02 bvsclk03 bvsclk04 (je 2 x XEON, je 2 Cores, 2,66 GHz, 4 GB) http bsclk01 bsclk02 bsclk03 bsclk04 ftp https (lab.bvs) Proxy ssh (nur pubkey) Labornetz 1 Gbit/s 13 Arbeitsplätze (Intel, 2 Cores mit HT, 6 Arbeitsplätze (Intel, 4 Cores, 3,3 GHz, 4 GB) 3,2 GHz, 4 GB) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) bslab01 06,11 12, File Server bslab07 10,13,19 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ührung Java Beans Enterprise Java Beans Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 13

12 Inhalt der Vorlesung... Servlets und JSP Web Services XML, SOAP, WSDL,... Axis2 Weitere Client/Server-Technologien u.a..net, DCOM Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 14 Zeitplan der Vorlesung (vorläufig!) Datum Montags-Termin Datum Freitags-Termin V: Grundlagen, Wdh V: Grundlagen, Wdh V: JDBC P: RMI V: CORBA V:CORBA V: CORBA P: RMI V: Java Beans P: RMI V: EJB P: CORBA V: EJB P: CORBA V: EJB P: CORBA V: Servlets, JSP P: CORBA V: Web Services P: EJB V: (ggf. P: EJB) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 15

13 Zeitplan der Vorlesung (vorläufig!)... Datum Montags-Termin Datum Freitags-Termin P: EJB V: Web Services P: EJB V: Web Services P: Web Services V: Weitere Technologien P: Web Services P: Web Services P: Web Services Ersatztermin Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 16 Literatur Allgemeinere Literatur Ulrike Hammerschall, Verteilte Systeme und Anwendungen. Pearson Studium, Robert Orfali, Dan Harkey, Client/Server-Programming with Java and Corba. John Wiley & Sons, Verteilte Systeme George Coulouris, Jean Dollimore, Tim Kindberg. Verteilte Systeme Konzepte und Design, 3. Auflage. Pearson Studium, Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 17

14 Literatur... Verteilte Programmierung mit Java Cay S. Horstmann, Gary Cornell. Core Java 2, Band 2 Expertenwissen. Sun Microsystems Press / Addison Wesley, Torsten Langner. Verteilte Anwendungen mit Java. Markt+Technik, Jim Farley, William Crawford, David Flanagan. Java Enterprise in a Nutshell, 3rd Edition. O Reilly, CORBA und COM Johann Hofmann, Fritz Jobst, Roland Schabenberger. Programmieren mit COM und CORBA, Hanser, Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 18 Literatur... Enterprise JavaBeans Rima P. Sriganesh, Gerald Brose, Micah Silverman. Mastering Enterprise JavaBeans 3.0. Wiley, Bill Burke, Richard Monson-Haefel. Enterprise JavaBeans 3.0, 5th Edition. O Reilly, Servlets Jason Hunter, William Crawford. Java Servlet Programmierung. O Reilly, Web Services Manfred Hein, Henner Zeller. Java Web Services, Addison-Wesley, Torsten Langner. Web Services mit Java, Markt+Technik, Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 19

15 Client/Server-Programmierung WS 2014/ Grundlagen: Wiederholung Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 20 1 Grundlagen: Wiederholung... Inhalt Architekturmodelle Zeit und Zustand in verteilten Systemen Middleware Java RMI Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 21

16 1.1 Architekturmodelle Client/Server-Modell Asymmetrisches Modell: Server stellen Dienste bereit, die von (mehreren) Clients genutzt werden können Server verwalten i.a. Ressourcen (zentralisiert) Client Aufruf Aufruf Server Ergebnis Server Ergebnis Client Server kann selbst wieder als Client agieren Prozeß Rechner Häufigstes Modell für verteilte Anwendungen (ca. 80 %) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) Architekturmodelle... Client/Server-Modell... I.A. nebenläufige Anfragen mehrerer Client-Prozesse an den Server-Prozeß Start Client Ende Anfrage (request) Antwort (reply) Zeit Server Client Beispiele: Dateiserver, WWW-Server, DB-Server, DNS-Server,... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 23

17 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ängigen Prozeßraum innerhalb einer verteilten Anwendung Prozeßraum kann, muß aber nicht physischem Rechner entsprechen mehrere Prozeßräume auf einem Rechner möglich Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) Architekturmodelle... 2-Tier-Architektur Client- und Server-Tier Keine eigene Tier für die Anwendungslogik Client Tier Server Tier Präsentation Anwendungslogik (Verteilung auf Client und Server Tier variiert) Datenhaltung Vorteil: einfach, performant Nachteil: schwer wartbar, schlecht skalierbar Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 25

18 1.1 Architekturmodelle... 3-Tier-Architektur Client Tier Präsentation Middle Tier Anwendungslogik Server Tier Datenhaltung Standard-Verteilungsmodell für einfache Web-Anwendungen: Client-Tier: Web-Browser zur Anzeige Middle-Tier: Web-Server mit Servlets / JSP / ASP Server-Tier: Datenbank-Server Vorteile: Anwendungslogik zentral administrierbar, skalierbar Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) Architekturmodelle... (Animierte Folie) Beispiel: typische Internet-Anwendung DMZ Intranet Web Client 01 Web Client Internet Firewall Web Server Firewall Web Server Anwen dungs Server Daten bank Server Tier 1 Tier 2 Tier 3 Tier 4 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 27

19 1.2 Zeit und Zustand in verteilten Systemen Was ist der Unterschied zwischen einem verteilten System und einem Ein-/Mehrprozessorsystem? Ein- bzw. Mehrprozessorsystem: nebenläufige 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ät keine globale Zeit kein eindeutiger globaler Zustand Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 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öglich Reihenfolge von Ereignissen auf verschiedenen Knoten nicht (immer) eindeutig zu ermitteln (vgl. spezielle Relativitätstheorie) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 29

20 1.2 Zeit und Zustand in verteilten Systemen... Eine Auswirkung der Verteiltheit Szenario: zwei Prozesse beobachten zwei andere Prozesse x y z Beobachter A x y Prozess 1 Prozess 2 Beobachter B z z x y Die Beobachter sehen die Ereignisse ggf. in unterschiedlicher Reihenfolge! Problem z.b., falls die Beobachter replizierte Datenbanken und die Ereignisse Datenbank-Updates sind Replikate sind nicht mehr konsistent! Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) Zeit und Zustand in verteilten Systemen... Globaler Zustand: Ein Beispiel zur Motivation Szenario: Peer-to-Peer-Anwendung, Prozesse senden sich gegenseitig Aufträge Frage: wann kann die Anwendung terminieren? Falsche Antwort: wenn kein Prozeß mehr einen Auftrag bearbeitet Grund: Aufträge können noch in Nachrichten unterwegs sein! Prozeß 1 Prozeß 2 Auftrag idle idle Weitere Anwendungen: verteilte Garbage-Collection, verteilte Deadlock-Erkennung,... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 31

21 1.2 Zeit und Zustand in verteilten Systemen... Wie bestimmt sich der Gesamtzustand eines verteilten Prozeßsystems? naiv: Summe der Zustände aller Prozesse (falsch!) Zwei Aspekte müssen beachtet werden: Nachrichten, die noch in Übertragung sind müssen mit in den Zustand aufgenommen werden Fehlen einer globalen Zeit ein Globalzustand zur Zeit t kann nicht definiert werden! Zustände der Prozesse beziehen sich immer auf lokale (und damit unterschiedliche) Zeiten Frage: Bedingung an die lokalen Zeiten? konsistente Schnitte Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) Middleware Verteilte Anwendung (VA) VA Komponente VS Knoten Netz VA Komponente VS Knoten Verteiltes System (VS) Verteilte Anwendung (VA) VA Komponente Middleware VS Knoten Netz VA Komponente Middleware VS Knoten Verteiltes System (VS) VA nutzt VS für Kommunikation zwischen ihren Komponenten VSe bieten i.a. nur einfache Kommunikationsdienste an direkte Nutzung: Netzwerkprogrammierung Middleware bietet intelligentere Schnittstellen verbirgt Details der Netzwerkprogrammierung Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 33

22 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ür Anwendungen bieten starke Unterschiede bei existierender Middleware Unterscheidung: kommunikationsorientierte Middleware (nur) Abstraktion von der Netzwerkprogrammierung anwendungsorientierte Middleware neben Kommunikation steht Unterstützung verteilter Anwendungen im Mittelpunkt Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) Kommunikationsorientierte Middleware Fokus: Bereitstellung einer Kommunikationsinfrastruktur für verteilte Anwendungen Aufgaben: Kommunikation Behandlung der Heterogenität Fehlerbehandlung Anwendung Kommunikationsorientierte Middleware Betriebssystem / verteiltes System Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 35

23 1.3.1 Kommunikationsorientierte Middleware... Entfernter Prozeduraufruf (RPC, Remote Procedure Call) Ermöglicht einem Client den Aufruf einer Prozedur in einem entfernten Server-Prozeß Client Prozeß y = P(x); Eingabeparameter Resultate P(a) {... return b; Server Prozeß Kommunikation nach Anfrage / Antwort-Prinzip Entfernter Methodenaufruf (RMI, Remote Method Invocation) Ermöglicht einem Objekt, Methoden eines entfernten Objekts aufzurufen Prinzipiell sehr ähnlich zu RPC Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) Kommunikationsorientierte Middleware... Gemeinsame Grundkonzepte entfernter Aufrufe Client und Server werden durch Schnittstellendefinition entkoppelt legt Namen der Aufrufe, Parameter und Rückgabewerte fest Einführung von Client-Stubs und Server-Stubs (Skeletons) als Zugriffsschnittstelle werden automatisch aus Schnittstellendefinition generiert IDL-Compiler, Interface Definition Language sind verantwortlich für Marshalling / Unmarshalling sowie für die eigentliche Kommunikation realisieren Zugriffs- und Ortstransparenz Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 37

24 1.3.1 Kommunikationsorientierte Middleware... Funktionsweise der Client- und Server-Stubs (RPC) y=p(x) Client Prozeß P(a) { Client Stub return b; Server Skeleton while (true) { Argumente a in receive(m1); Nachricht m1 packen client=sender(m1); send(server, m1); Argumente x aus Nach richt m1 auspacken receive(server, m2) ; y = P(x) ; Ergebnis b aus Nach richt m2 auspacken Server Prozeß Ergebnis y in Nach richt m2 packen send(client, m2); P(a) {... return b; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 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 <<interface>> Schnittstelle Client Proxy Objekt Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 39

25 1.3.1 Kommunikationsorientierte Middleware... Ablauf eines entfernten Methodenaufrufs Client Rechner Server Rechner Client ruft eine Methode auf Client Proxy Client BS Selbe Schnitt stelle wie beim Objekt Skeleton ruft dieselbe Methode für das Objekt auf Server Skeleton Server BS Objekt Status Methode Schnitt stelle Netzwerk Verpackter Aufruf wird über das Netzwerk weitergegeben (Objekt ID, Methodenname, Parameter) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) Kommunikationsorientierte Middleware... Erstellung eines Client/Server-Programms Server Prozeduren Compiler Server Server Skel. Schnittstellen beschreibung IDL Compiler Client Stubs RPC/RMI Laufzeit Bibliothek Client Programm Compiler Client Gilt prinzipiell für alle Realisierungen entfernten Aufrufe Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 41

26 1.3.2 Anwendungsorientierte Middleware Setzt auf kommunikationsorientierter Middleware auf Erweitert diese um: Laufzeitumgebung Dienste Komponentenmodell Anwendungs komponente Dienste Anwendungs komponente Komponentenmodell Laufzeitumgebung Anwendungs komponente Kommunikationsinfrastruktur Betriebssystem / verteiltes System Dienste Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) Anwendungsorientierte Middleware... Laufzeitumgebung Ressourcenverwaltung Pooling von Prozessen, Threads, Verbindungen Steuerung der Nebenläufigkeit Verbindungsverwaltung Verbesserung der Verfügbarkeit Replikation, Clustering Sicherheitsmechanismen Authentifizierung und Autorisierung Vertraulichkeit und Integrität Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 43

27 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äge, Laufzeitumgebung Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 44 Client/Server-Programmierung WS 2014/ Betriebssysteme / verteilte Systeme Tel.: 0271/ , Büro: H-B 8404 Stand: 23. Januar 2015 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) ii

28 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 Schnittstellendefinition (Java Interface) generiert ab JDK 1.5 dynamisch zur Laufzeit Namensdienst: RMI Registry Verteilte Garbage-Collection Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) Java RMI Hello World mit Java RMI Client JVM Interface interface Hello { String sayhello(); Server JVM Client Klasse class HelloClient {... Hello h;... s = h.sayhello();... Server Klasse class HelloServer implements Hello { String sayhello() { return "Hello World";... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) 46

29 1.4.1 Hello World mit Java RMI... Ablauf der Entwicklung: 1. Entwurf der Schnittstelle für 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. Übersetzen und Starten des Systems Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) Hello World mit Java RMI... Entwurf der Schnittstelle für 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ösen können Basisklasse für alle möglicherweise auftretenden Fehler im Client, bei der Übertragung, im Server Keine Einschränkungen gegenüber lokalen Schnittstellen aber: semantische Unterschiede (Parameterübergabe!) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) 48

30 1.4.1 Hello World mit Java RMI... Hello-World Interface import java.rmi.remote; import java.rmi.remoteexception; public interface Hello extends Remote { String sayhello() throws RemoteException; Marker Schnittstelle, enthält keine Methoden, markiert Interface als RMI Schnittstelle RemoteException zeigt Fehler im entfernten Objekt bzw. bei Kommu nikation an Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) 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 ist bereits im Interface definiert Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) 50

31 1.4.1 Hello World mit Java RMI... Hello-World Server (1) import java.rmi.*; import java.rmi.server.unicastremoteobject; public class HelloServer extends UnicastRemoteObject implements Hello { public HelloServer() throws RemoteException { super(); public String sayhello() { return "Hello World!"; Remote Methode Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) 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, öffentlichen Namen Typischerweise keine neue Klasse, sondern main-methode der Server-Klasse Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) 52

32 1.4.1 Hello World mit Java RMI... Hello-World Server (2) public static void main(string args[]) { try { HelloServer obj = new HelloServer(); catch (Exception e) { Naming.rebind("rmi://localhost/Hello Server", obj); System.out.println("Error: " + e.getmessage()); e.printstacktrace(); Erzeugen des Server Objekts Registrieren des Server Objekts unter dem Namen "Hello Server" beim Name Server (RMI Registry, lokaler Rechner, Port 1099) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) Hello World mit Java RMI... Entwicklung der Client-Anwendung mit Aufrufen des Server-Objekts Client muß sich zunächst beim Namensdienst über den Namen eine Referenz auf das Server-Objekt holen Type cast auf den korrekten Typ erforderlich Dann: beliebige Methodenaufrufe möglich syntaktisch kein Unterschied zu lokalen Aufrufen Anmerkung: Client kann Remote-Referenzen auch auf anderen Wegen erhalten z.b. als Rückgabewert einer Remote-Methode Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) 54

33 1.4.1 Hello World mit Java RMI... Hello-World Client import java.rmi.*; public class HelloClient { public static void main(string args[]) { Objektreferenz vom try { Name Server holen Hello obj = (Hello)Naming.lookup("rmi://bspc02/Hello Server"); String message = obj.sayhello(); System.out.println(message); catch (Exception e) {... Aufruf der Methode des entfernten Objekts Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) Hello World mit Java RMI... Übersetzen und Starten des Systems Übersetzen 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ür Clients bis JDK 1.4: Aufruf: rmic -v1.2 HelloServer erzeugt HelloServer Stub.class ab JDK 1.5: Client erzeugt Proxy-Klasse zur Laufzeit durch java.lang.reflect.proxy Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) 56

34 1.4.1 Hello World mit Java RMI... Übersetzen und Starten des Systems... HelloClient.java Hello.java HelloServer.java javac javac HelloClient.class Hello.class Hello.class HelloServer.class Client Seite bis JDK 1.4 rmic Server Seite HelloServer_Stub.class Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) Hello World mit Java RMI... Übersetzen und Starten des Systems... Starten des Namensdienstes Aufruf: rmiregistry [port] erlaubt aus Sicherheitsgründen 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 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) 58

35 Anmerkungen zu Folie 58: Im Beispiel wird angenommen, daß die Klasse Hello.class (und ggf. auch HelloServer Stub.class) im lokalen Classpath liegt: beim Starten von rmiregistry beim Starten von HelloServer beim Übersetzen und Starten von HelloClient Java RMI Parameterübergabe Übergabe von Parametern an Remote-Methoden erfolgt entweder über call-by-value für Werttypen und serialisierbare Objekte oder über call-by-reference für Objekte, die Remote implementieren Entscheidung wird z.t. erst zur Laufzeit getroffen! Rückgabe des Ergebnisses folgt selben Regeln wie Parameterübergabe Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) 59

36 1.4.2 Parameterübergabe... Übergabe eines serialisierbaren Objekts Original Client Objekt param Stub Objekt Skele ton Server Objekt op(param) param serialisieren Netz verbindung unabhängige Kopie param deserialisieren <<create>> op(param) param m() Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) Parameterübergabe... Übergabe eines Remote-Objekts Client Objekt param param Stub Stub Objekt Skele ton Server Objekt op(param) tostub(param) paramstub paramstub serialisieren Netz verbindung paramstub deserialisieren <<create>> op(paramstub) param Stub m() Betriebssysteme / verteilte Systeme Client/Server-Programmierung (2/15) 61

37 Client/Server-Programmierung WS 2014/ Betriebssysteme / verteilte Systeme Tel.: 0271/ , Büro: H-B 8404 Stand: 23. Januar 2015 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) iii Client/Server-Programmierung WS 2014/ Java Database Connectivity (JDBC) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 62

38 2 Java Database Connectivity (JDBC) Überblick Java-API zum portablen Zugriff auf relationale Datenbank- Systeme Unabhängig von konkreter Datenbank-Implementierung Funktionen: Verbindung zur Datenbank herstellen Ausführung von SQL-Anweisungen Zugriff auf Abfrage-Ergebnisse Vergleichbar mit ODBC, aber einfachere Schnittstelle Anschluß zur Datenbank über herstellerspezifische Treiber Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 63 2 Java Database Connectivity (JDBC) Relationale Datenbanken und SQL Relationale Datenbank = Menge von Tabellen jede Spalte hat Namen und Datentyp jede Zeile enthält i.a. ein Feld, dessen Wert die Zeile eindeutig identifiziert (Primärschlüssel) Aufbau festgelegt in Datenbank-Schema Beispiel: ag_name AG_ID AG_NAME BMW Siemens Thyssen ag_data ID AG_ID DAY VALUE Primär schlüssel Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 64

39 2.2 Relationale Datenbanken und SQL... SQL Standardisierte Abfragesprache für relationale Datenbanken Erlaubt u.a.: Abfrage von Daten (SELECT) Erzeugung neuer Tabellen (CREATE TABLE) Einfügen von Datensätzen (Zeilen) (INSERT) Löschen von Datensätzen (DELETE) Ändern von Datensätzen (UPDATE) Auswahl der Datensätze i.d.r. über deren Inhalt häufig über Primärschlüssel Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) Relationale Datenbanken und SQL... Beispiele für SQL-Anfragen SELECT AG_ID, AG_NAME FROM ag_name WHERE AG_NAME = Siemens liefert die Zeile für 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 über 90 gibt Information aus zwei Tabellen zurück Verbindung der Einträge über den Primärschlüssel (Natural Join) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 66

40 2 Java Database Connectivity (JDBC) Architektur von JDBC Java Anwendung JDCB Treiber Manager JDBC/ODBC Brücke ODBC Treiber Treiber für mysql Treiber für Oracle MS mysql Oracle SQL Server Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) Architektur von JDBC... Klassen des JDBC-Kerns java.sql <<interface>> Driver <<interface>> Connection <<interface>> Statement <<interface>> ResultSet DriverManager <<interface>> PreparedStatement <<interface>> ResultSetMetaData DriverPropertyInfo <<interface>> CallableStatement Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 68

41 2.3 Architektur von JDBC... Klassen des JDBC-Kerns... Interface Driver Schnittstelle, die alle JDBC-Treiber implementieren müssen 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 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) Architektur von JDBC... Klassen des JDBC-Kerns... Interface Connection repräsentiert Sitzung mit ausgewählter 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ützte SQL-Versionen, Limitierungen des Datenbank-Systems,... Interface Statement zur Ausführung einer SQL-Anfrage verwaltet auch Ergebnis der Anfrage (ResultSet) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 70

42 2.3 Architektur von JDBC... Klassen des JDBC-Kerns... Interface PreparedStatement zur Ausführung einer vorkompilierten SQL-Anfrage effizienter bei wiederholter Ausführung 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 z.b. Name, Typ, vorzeichenbehaftet,... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 71 2 Java Database Connectivity (JDBC) 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; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 72

43 2.4 Ein Beispiel... try { // Verbindung zur Datenbank Connection con = DriverManager.getConnection( "jdbc:mysql://bslabserv01.lab.bvs/cspdb","",""); // Erzeuge SQL Anweisung und führe 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")); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 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); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 74

44 2 Java Database Connectivity (JDBC) Details zu JDBC Laden der Treiber Vor Verwendung von JDBC müssen 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... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) Details zu JDBC... Verbindung zur Datenbank herstellen Verbindung wird durch Connection-Objekt repräsentiert Mehrere Datenbank-Verbindungen pro Anwendung möglich Erzeugung über Connection con = DriverManager.getConnection( "url", "user", "password"); Variante von getconnection() erlaubt Definition von Properties für die Datenbank-Verbindung Wenn Verbindung nicht mehr benötigt wird: explizites Schließen mit Methode con.close() Freigabe von Netzwerk- und Speicherressourcen Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 76

45 2.5 Details zu JDBC... Ausführung einer SQL-Anweisung Erzeugung eines Statement-Objekts Statement stmt = con.createstatement(); Ausführung der SQL-Anweisung ResultSet rs = stmt.executequery("select..."); Methoden executeupdate() für Anfragen ohne Ergebnis, bzw. execute(), falls unbekannt, ob Ergebnis geliefert wird execute() liefert true, falls Ergebnis vorhanden Statement-Objekt repräsentiert eine einzige SQL-Anfrage ResultSet wird bei erneuter Anfrage über selbes Statement-Objekt ungültig für simultane Anfragen: mehrere Statement-Objekte! Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 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ächste 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ür die verschiedenen Datentypen getstring() liefert immer String-Repräsentation close(): Ressourcenfreigabe Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 78

46 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() DATE java.sql.date getdate() Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) Details zu JDBC... Ausführung vorkompilierter SQL-Anfragen Für wiederkehrende, ähnliche 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ür Parameter Ausführung der Anfrage mit konkreten Parametern stmt.clearparameters(); stmt.setstring(1, "Jimmy Dean"); // erster Param. stmt.setstring(2, " "); // zweiter Param. stmt.executeupdate(); // kein Ergebnis Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 80

47 2.5 Details zu JDBC... Ausführung von Stored Procedures Oracle PL/SQL Prozedur (Im Datenbanksystem gespeichert) 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; END; Aufruf der Prozedur über JDBC CallableStatement stmt = con.preparecall( "{call sp_interest(?,?)"); stmt.registeroutparameter(2, Types.FLOAT); stmt.setint(1, accountid); stmt.setfloat(2, ); stmt.execute(); out.println("new Balance: " + stmt.getfloat(2)); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) Details zu JDBC... Transaktionen Verantwortlich für Transaktionen: Connection-Objekt Methoden zur Steuerung von Transaktionen: setautocommit() - automatisches Festschreiben? Voreinstellung: jede SQL-Anweisung wird als individuelle Transaktion ausgeführt 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, serializable Voreinstellung ist vom Treiber abhängig Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 82

48 2.5 Details zu JDBC... Transaktionen... try { // Höchste 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ückgängigmachen aller Änderungen con.rollback(); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 83 2 Java Database Connectivity (JDBC) Zusammenfassung JDBC erlaubt portablen Zugriff auf relationale Datenbanken Abfragen über SQL Grundsätzlicher Ablauf: Laden des Treibers (Class.forName()) Verbindung zur Datenbank herstellen (Connection) SQL-Anweisung erzeugen (Statement) SQL-Anweisung ausführen, Ergebnis auslesen (ResultSet) Daneben: Unterstützung für vorkompilierte SQL-Anweisungen und Stored Procedures Transaktionen Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 84

49 Client/Server-Programmierung WS 2014/ CORBA Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 85 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 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 86

50 3 CORBA... Literatur CORBA-Spezifikationen der OMG corba spec catalog.htm Farley / Crawford / Flanagan, Kap. 14 Orfali / Harkey, Kap. 1, 4, 7-9, Hofmann / Jobst / Schabenberger, Kap. 2.2, 5, 6 Michi Henning, Steve Vinoski: Advanced CORBA Programming with C++. Addison-Wesley, Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) Einführung CORBA: Common Object Request Broker Architecture Ziel: Entwicklung und Integration verteilter objektorientierter Anwendungen in heterogenen Umgebungen CORBA ist plattform- und sprachunabhängig Informeller Standard, definiert durch die OMG (Object Management Group) 1989 gegründet, Ziel: Förderung objektorientierter Techniken heute über 700 Mitglieder (größtes IT-Industriekonsortium) CORBA ist nur eine Spezifikation verschiedenste Implementierungen, z.b. Orbix, ORBACUS, Java IDL (Teil des JDK), JacORB, ORBit (GNOME!)... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 88

51 3.2 CORBA Architektur Object Management Architecture (OMA) Definiert Objekt- und Referenzmodell Objektmodell unterstützt Kapselung, (Mehrfach-)Vererbung, Polymorphie Objekte bieten Dienste mit definierter Schnittstelle an Client nutzt Dienste (lokal oder entfernt) über Schnittstelle, ist vollständig von Server-Implementierung unabhängig Objektimplementierung mit beliebiger Programmiersprache Referenzmodell Interaktion zw. Objekten und dazu notwendige Komponenten Herzstück: Object Request Broker (ORB) Software-Bus für Kommunikation zw. Client und Server Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) Object Management Architecture (OMA)... Das OMA Referenzmodell Application Vertical CORBA Horizontal CORBA Objects Facilities Facilities Client Server Object Request Broker Naming Event... LifeCycle Transactions CORBA Services Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 90

52 3.2.1 Object Management Architecture (OMA)... Bestandteile des OMA Referenzmodells Object Request Broker (ORB) stellt Dienstanfragen an verteilte Objekte zu realisiert Ortstransparenz für die Client-Objekte CORBA Services (Object Services) domänenunabhängige (horizontale) Schnittstellen zu wichtigen Basisdiensten, z.b. Namensdienst betriebssystem-ähnliche Funktion Horizontal CORBA Facilities (Common Facilities) Schnittstellen zu anwendungsorientierten, domänenübergreifenden Diensten z.b. Drucken, verteilte Dokumente,... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) Object Management Architecture (OMA)... Bestandteile des OMA Referenzmodells... Vertical CORBA Facilities (Domain Interfaces) Schnittstellen zu anwendungsorientierten Diensten für bestimmte Anwendungsdomänen 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 Implementierungen Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 92

53 3.2 CORBA Architektur Common Object Request Broker Architecture (CORBA) Zentrale Idee: transparente Kommunikation zwischen Client und Server-Objekten über ORB ORB bietet Client eine lokale (Proxy-)Schnittstelle Vorteile beim Einsatz eines ORB: Zugriffs- und Ortstransparenz Transparenz der Implementierungssprache Transparenz der Objektaktivierung ORB übernimmt ggf. Aktivierung des Objekts Transparenz der Kommunikationstechnik Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) Common Object Request Broker Arch.... Objektreferenzen Zugriff auf Objekte erfolgt über Objektreferenzen Objektreferenzen identifizieren genau ein Objekt aber: verschiedene Referenzen für ein Objekt möglich können null sein, d.h. auf kein Objekt zeigen können hängen, wenn Objekt nicht mehr existiert können persistent sein sind typsicher unterstützen spätes Binden (Polymorphismus) sind interoperabel, d.h. Aufbau ist standardisiert sind opak, d.h. Client darf Inhalt nicht betrachten Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 94

54 3.2.2 Common Object Request Broker Arch.... OMG Interface Definition Language (OMG IDL) OMG IDL erlaubt formale Beschreibung der Objekt-Schnittstellen unabhängig von Implementierung der Objekte (z.b. Programmiersprache) Objekte können 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ür C, C++, Java, Smalltalk, Ada, Lisp, Phyton, Cobol, PL/1, Ruby Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 95 Client/Server-Programmierung WS 2014/ Betriebssysteme / verteilte Systeme Tel.: 0271/ , Büro: H-B 8404 Stand: 23. Januar 2015 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) iv

55 3.2.2 Common Object Request Broker Arch.... Modell des Object Request Brokers Client Object Implementation Stub Dynamic Invocation Interface ORB Interface ORB Core Skeleton Dynamic Skeleton Interface Object Adapter Interface Repository Implementation Repository Identische Schnittstelle für alle ORB Implementierungen Eine Schnittstelle pro Objekt Typ Mehrere (unterschiedliche) Objekt Adapter möglich ORB spezifische Schnittstelle mögliche Rechnergrenze Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) Common Object Request Broker Arch.... Komponenten des ORB ORB Core stellt Basisfunktionalität zur Verfügung Objekt-Repräsentation, Kommunikationsmechanismen ist i.d.r. verteilt implementiert Stub und Skeleton für entfernten Methodenaufruf vom IDL-Compiler aus Schnittstellendefinition erzeugt Dynamic Invocation Interface und Dynamic Skeleton Interface erlauben dynamische Methodenaufrufe/-implementierungen d.h. Schnittstelle muß zur Übersetzungszeit des Clients bzw. Servers noch nicht festgelegt sein Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 97

56 3.2.2 Common Object Request Broker Arch.... Komponenten des ORB... Object Adapter stellt Objektimplementierung Dienste des ORB zur Verfügung Funktionen u.a.: Methodenaufrufe (über Skeletons) Abbildung von Referenzen auf Impementierungen Registrierung von Implementierungen Generierung und Interpretation von Objektreferenzen Objektaktivierung und -deaktivierung unterschiedliche Objektadapter möglich ab CORBA 2.2: Portable Object Adapter (POA) als Standard-Schnittstelle zum Objektadapter Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) Common Object Request Broker Arch.... Komponenten des ORB... ORB Interface Schnittstelle für Dienste, die der ORB dem Client und allen Objektimplementierungen zur Verfügung stellt Interface Repository Dienst, der zur Laufzeit persistente Information zu den registrierten Objektschnittstellen zur Verfügung stellt Nutzung ggf. durch ORB und / oder Clients allgemein: jegliche Information zu Objekt-Schnittstellen Implementation Repository enthält Information, die es dem ORB erlaubt, Objekte zu lokalisieren und zu aktivieren allgemein: jegliche Information zu Objekt-Implementierungen Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 99

57 3.2 CORBA Architektur CORBA-Dienste Von der OMG spezifiziert, erweitern ORB-Funktionalität realisiert durch CORBA-Objekte mit IDL-Schnittstelle Anbieter von ORB und Diensten können unterschiedlich sein Collection Service Container-Objekte, z.b. Map, Set, Queue Concurrency Control Service realisiert Sperren für wechselseitigen Ausschluß Event Service verteilt Ereignisse an interessierte Objekte Externalization Service (De-)Serialisierung von Objekten Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) CORBA-Dienste... Licensing Service erfaßt Nutzung von Objekten für Abrechnung Life Cycle Service Erzeugen, Löschen, Kopieren und Verschieben von Objekten Naming Service Zuordnung von Namen zu Objektreferenzen Notification Service Event Service-Erweiterung: beliebige Daten als Ereignisse Persistent Object Service persistentes Speichern von Objekten in Datenbanken Property Service Verwaltet Name/Wert-Paare Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 101

58 3.2.3 CORBA-Dienste... Query Service Anfrageoperationen an verteilte Objekte (SQL-Obermenge) Relationship Service Erzeugung / Traversierung von Assoziationen zw. Objekten Security Service Authentifizierung, Zugriffskontroll-Listen, Rechteweitergabe Time Service Zeit-Synchronisation Trading Service erlaubt CORBA-Objekte anhand ihrer Fähigkeiten zu finden Object Transaction Service flache und verschachtelte verteilte Transaktionen Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) Hello World mit CORBA Vorbemerkungen In der Vorlesung und Übung: Verwendung zweier CORBA-Implementierungen Java IDL Seit JDK 1.2 fester Bestandteil der Java Entwicklungsumgebung wenig Dienste (nur Namensdienst) JacORB frei verfügbarer ORB, in Java implementiert mehr Dienste (u.a. Naming, Event, Notification, Transaction, Trading), sowie Interface- und Implementation Repository Wegen POA: Anwendungs-Quellcode ist für alle Implementierungen gleich Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 103

59 3.3 Hello World mit CORBA... Vorgehen zur Erstellung der Anwendung 5 Java Interfaces IDL zu Java Compiler Client Stubs Client Hilfs Klassen Server Java Interfaces IDL zu Java Compiler 6 javac 7 4 Client javac Objekt 3 Code Compiler Compiler Impl.code Client Anwendung Stub Schnittstellen definitionen in IDL Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) Object Request Broker Objekt Skeletons POA Objekt Implementierung Skeleton POA 2 Hilfs Klassen 3.3 Hello World mit CORBA... IDL-Beschreibung der Schnittstelle module HelloWorld Paketname { interface Hello Schnittstelle { string sayhello(in string name); ; ; Eingabeparameter Methode CORBA definiert eigene, C++/Java-ähnliche Sprache IDL-Compiler erzeugt Schnittstellen für jeweilige Implementierungssprache kann für Client und Server verschieden sein Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 105

60 3.3 Hello World mit CORBA... Vom IDL-Compiler generierte Dateien Hello.idl Client _HelloStub.java Client Stub Schnittstelle Hilfsfunktionen für Client/Server idlj idl (Java IDL) (JacOrb) Hello.java HelloOperations.java HelloHelper.java HelloHolder.java HelloPOA.java Server POA (Basisklasse) HelloPOATie.java POA (Tie Klasse) Hilfsklasse für Ausgabeparameter Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) Hello World mit CORBA... Aufruf des IDL-Compilers Java IDL: idlj -fall erzeugt alle Dateien idlj -fclient erzeugt Dateien für Client idlj -fserver erzeugt Dateien für Server ohne Helper-Klassen! idlj -falltie erzeugt alle Dateien incl. Tie-Klassen JacORB: idl erzeugt alle Dateien incl. Tie-Klassen idl -noskel erzeugt Dateien nur für Client idl -nostub erzeugt Dateien nur für Server Weiteres Argument: Name der IDL-Datei Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 107

61 3.3 Hello World mit CORBA... Vom IDL-Compiler erzeugte Java-Schnittstelle HelloWorld/Hello.java: package HelloWorld; public interface Hello extends HelloOperations, org.omg.corba.object, org.omg.corba.portable.idlentity { HelloWorld/HelloOperations.java: package HelloWorld; public interface HelloOperations { String sayhello (String name); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) Hello World mit CORBA... Objektimplementierung // vom IDL Compiler erzeuges Paket mit POA/Skeleton etc. import HelloWorld.*; public class HelloImpl extends HelloPOA { public String sayhello(string name) { return "The world says HELLO to " + name; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 109

62 3.3 Hello World mit CORBA... Server-Programm // vom IDL Compiler erzeuges Paket mit Hilfsklassen import HelloWorld.*; // CORBA Namensdienst import org.omg.cosnaming.*; // Für Exceptions, die Namensdienst werfen kann import org.omg.cosnaming.namingcontextpackage.*; // Alle CORBA Server benötigen diese Klassen import org.omg.corba.*; import org.omg.portableserver.*; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) Hello World mit CORBA... public class HelloServer { public static void main(string args[]) { try { // Erzeuge und Initialisiere den ORB ORB orb = ORB.init(args, null); // Erzeuge das Servant Objekt HelloImpl helloref = new HelloImpl(); // Aktivierung des POA POA rootpoa = POAHelper.narrow( orb.resolve_initial_references("rootpoa")); rootpoa.the_poamanager().activate(); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 111

63 3.3 Hello World mit CORBA... // Registriere Servant und erzeuge (CORBA) Objektreferenz org.omg.corba.object ref = rootpoa.servant_to_reference(helloref); // Konvertierung in Java Objektreferenz Hello href = HelloHelper.narrow(ref); // Registriere Objektreferenz beim Namensdienst org.omg.corba.object objref = orb.resolve_initial_references("nameservice"); NamingContextExt ncref = NamingContextExtHelper.narrow(objRef); NameComponent path[] = ncref.to_name("helloworld"); ncref.rebind(path, href); System.out.println("HelloServer is running..."); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) Hello World mit CORBA... // Starte ORB orb.run(); catch(exception e) { System.err.println("ERROR: " + e); e.printstacktrace(system.out); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 113

64 3.3 Hello World mit CORBA... Client-Programm import HelloWorld.*; // Client Stubs import org.omg.cosnaming.*; // Namensdienst import org.omg.corba.*; // CORBA Klassen public class HelloClient { public static void main(string args[]) { try { // Erzeuge und Initialisiere den ORB ORB orb = ORB.init(args, null); // Aufsuchen des Objekts beim Namensdienst org.omg.corba.object objref = orb.resolve_initial_references("nameservice"); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) Hello World mit CORBA... NamingContextExt ncref = NamingContextExtHelper.narrow(objRef); NameComponent path[] = ncref.to_name("helloworld"); Hello helloref = HelloHelper.narrow(ncRef.resolve(path)); // Aufruf der Methode des CORBA Objekts System.out.println(helloRef.sayHello("Peter")); catch(exception e) { System.out.println("ERROR : " + e); e.printstacktrace(system.out); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 115

65 3.3 Hello World mit CORBA... Anmerkungen zum Code resolve initial references() dient der initialen Auflösung von Namen, insbesondere: RootPOA: der Wurzel-POA des Servers ( 3.4.6) NameService: der Namensdienst Ergebnis ist org.omg.corba.object CORBA Objektreferenz narrow() dient zum Umwandeln einer CORBA-Objektreferenz in eine Java Objektreferenz (des Stubs) to name() wandelt String in strukturierten Namen für Namensdienst um (s. später) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) Hello World mit CORBA... Starten der Anwendung (Java IDL) Starten des ORB-Daemons (Namensdienst) orbd -ORBInitialPort [ -port <port> ] startet Daemon auf Port (-port legt Port für Objektaktivierung fest) Achtung: ~/orb.properties von JacORB darf nicht existieren! Starten des Servers java HelloServer -ORBInitialPort [ -ORBInitialHost <addr> ] Angabe von Host und Port des ORB-Daemons Starten des Clients java HelloClient -ORBInitialPort [ -ORBInitialHost <addr> ] Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 117

66 3.3 Hello World mit CORBA... Zur Nutzung von JacORB im Labor H-A 4111 Umgebungsvariablen setzen (ggf. in $HOME/.profile): export JACORB_HOME=/opt/dist/JacORB export PATH=$JACORB_HOME/bin:$PATH Konfigurationsdatei einrichten: cp $JACORB_HOME/etc/jacorb_properties.template $HOME/orb.properties in $HOME/orb.properties alle cspxxx durch eigenes Login ersetzen JacORB verwendet bei uns eine Datei unter $HOME zum Auflösen der initialen Referenzen setzt Netzwerk-Dateisystem (NFS) voraus auch möglich: Nutzung eines WWW-Servers Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 118 Anmerkungen zu Folie 118: Für die Benutzung von Java IDL muss ggf. der Pfad zum JDK gesetzt werden. Auf den PCs im Labor H-A 4111 ist dieser Pfad: /usr/lib64/jvm/java openjdk/bin/ 118-1

67 3.3 Hello World mit CORBA... Starten der Anwendung (JacORB) Starten des Namensdienstes ns startet auf beliebigem freiem Port schreibt eigene Objektreferenz in Datei $HOME/.jaco_ns Starten des Servers jaco HelloServer jaco ist ein Hilfsskript von JacORB startet JVM mit nötigen Properties und Classpath Starten des Clients jaco HelloClient Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) CORBA im Detail OMG IDL und Java-Mapping Struktur einer IDL-Datei: module Identifikator { Typ-Deklarationen; Konstanten-Deklarationen; Exception-Deklarationen; interface Identifikator [:Vererbung ] { Typ-Deklarationen; Konstanten-Deklarationen; Exception-Deklarationen; Attribut-Deklarationen; Methoden-Deklarationen; ;... ; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 120

68 3.4.1 OMG IDL und Java-Mapping... module und interface module definiert einen neuen Namensraum ähnlich wie C++ Namespaces bzw. Java Packages verschachtelte Namensräume möglich interface definiert neue Schnittstelle ähnlich wie Java-Schnittstellen Schnittstelle kann Methoden und Attribute enthalten Attribute werden über automatisch generierte Deklarationen von Get- und Set-Methoden realisiert Vererbung ist möglich, auch Mehrfachvererbung vererbt werden nur Schnittstellen, keine Implementierungen Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) OMG IDL und Java-Mapping... Methoden-Deklarationen Syntax: [ oneway ] Typ Identifikator ( Parameterliste ) [ raises ( Exceptions ) ] [ Kontext ] Parameterliste: Liste von Parameterdeklarationen: { in out inout Typ Identifikator Klassifikation nach Ein- und Ausgabeparametern Kontext: Liste von Kontextvariablen ähnlich UNIX Umgebungsvariablen, werden an Server übergeben oneway: asynchroner Methodenaufruf ohne Ergebnis / Ausgabeparameter Überladen von Methoden ist nicht erlaubt Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 122

69 3.4.1 OMG IDL und Java-Mapping... Wichtige Basis-Datentypen und ihre Java-Entsprechungen IDL Datentyp Beschreibung Java Datentyp [unsigned] short Ganzzahl, 16 Bit short [unsigned] long Ganzzahl, 32 Bit int [unsigned] long long Ganzzahl, 64 Bit long float Gleitkomma, 32 Bit float double Gleitkomma, 64 Bit double char Zeichen, 8 Bit char string Zeichenkette String boolean (TRUE, FALSE) Boole scher Wert boolean (true, false) octet Byte byte any beliebiger Typ org.omg.corba.any Betriebssysteme / verteilte Systeme Client/Server-Programmierung (4/15) 123 Client/Server-Programmierung WS 2014/ Betriebssysteme / verteilte Systeme Tel.: 0271/ , Büro: H-B 8404 Stand: 23. Januar 2015 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) v

70 3.4.1 OMG IDL und Java-Mapping... Beispiel module Beispiel { interface Test1 { void setname(in string name); double getxy(out double y); long encrypt(in string key, inout string msg); ; interface Test2 { string chartostring(in char c1, in char c2); ; ; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) OMG IDL und Java-Mapping... Vom IDL-Compiler erzeugte Klassen und Interfaces Beispiel <<interface>> Test1Operations setname() getxy() encrypt() <<interface>> Test1 Test1Helper narrow() insert() extract() Test1Holder _Test1Stub <<interface>> Test2Operations chartostring() <<interface>> Test2 Test2Helper narrow() insert() extract() Test2Holder _Test2Stub Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 125

71 3.4.1 OMG IDL und Java-Mapping... Erzeugte Java-Schnittstellen Beispiel/Test1Operations.java: package Beispiel; public interface Test1Operations { void setname (String name); double getxy (org.omg.corba.doubleholder y); int encrypt (String key, org.omg.corba.stringholder msg); Beispiel/Test2Operations.java: package Beispiel; public interface Test2Operations { String chartostring (char c1, char c2); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) OMG IDL und Java-Mapping... Holder-Klassen Java unterstützt keine Ausgabeparameter daher: Übergabe eines Objekts (per Referenz!), das den Parameter enthält (Holder-Klasse) Z.B. Code für DoubleHolder: public final class DoubleHolder... { public double value; public DoubleHolder() { public DoubleHolder(double initialvalue) value = initialvalue;... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 127

72 3.4.1 OMG IDL und Java-Mapping... Helper-Klassen Hilfsmethoden für CORBA-Objekte Ausschließlich static-methoden: narrow(): Typumwandlung (Down cast), wandelt u.a. CORBA Objektreferenz in Java Objektreferenz um insert(): packt Objekt in Datentyp org.omg.corba.any extract(): extrahiert Objekt aus org.omg.corba.any id(): Schnittstellen-ID für Interface-Repository read(): Lesen eines Objekts aus einem Eingabestrom write(): Schreiben eines Objekts in einen Ausgabestrom Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) OMG IDL und Java-Mapping... Abgeleitete Datentypen OMG IDL erlaubt Definition abgeleiteter Datentypen Interfaces (Objekte) Sequenzen und Arrays Strukturen (Struct) Aufzählungen (Enum) Vereinigungen (Union) Daneben: Typdefinitionen (Typedefs) Syntax / Semantik stark an C/C++ angelehnt Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 129

73 3.4.1 OMG IDL und Java-Mapping... Typdefinitionen (Typedefs) IDL erlaubt es, neue Namen für existierende Typen zu definieren auf allen Ebenen (global, Modul, Schnittstelle) Beispiele: typedef short Temperatur; // neuer Typname: Temperatur typedef Test2 MyTest; CORBA legt nicht fest, ob neuer Typname nur Alias für existierenden Typ ist, oder ob neuer Typ erzeugt wird Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) OMG IDL und Java-Mapping... Sequenzen Vektoren (eindimensionale Felder) variabler Länge beliebige IDL-Elementtypen Länge kann begrenzt oder unbegrenzt sein Beispiel: IDL typedef sequence<dog> MySeq; typedef sequence<dog, 60> MyBoundedSeq; void seqtest(in MySeq par1, in MyBoundedSeq par2, out MySeq par3); Umsetzung in Java: void seqtest(beispiel.dog[] par1, Beispiel.Dog[] par2, Beispiel.Test2Package.MySeqHolder par3); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 131

74 3.4.1 OMG IDL und Java-Mapping... Arrays Ein- oder mehrdimensionale Felder fester Länge Beispiel: IDL typedef Dog MyArray[60]; typedef Dog My2DArray[60][10]; void arraytest(in MyArray par1, in My2DArray par2, out MyArray par3); Umsetzung in Java: void arraytest(beispiel.dog[] par1, Beispiel.Dog[][] par2, Beispiel.Test2Package.MyArrayHolder par3); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) OMG IDL und Java-Mapping... Strukturen (Structs) Zusammenfassung von mehrerer Variablen entspricht Klasse mit public-attributen ohne Methoden Beispiel: IDL struct MyStruct { short age; string name; ; Umsetzung in Java: public final class MyStruct { public short age = (short)0; public String name = null; public MyStruct() { public MyStruct(short _age, String _name) { age = _age; name = _name; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 133

75 3.4.1 OMG IDL und Java-Mapping... Aufzählungen (Enums) Neuer Typ mit explizit aufgezählten Werten Beispiel: IDL enum Color { red, green, blue ; Umsetzung in Java: Klasse Color mit static final-attributen für die Werte als int-wert (z.b. red) und als Color-Objekt (z.b. red) Methode value(), liefert int-wert zurück static-methode from int() als Factory Verwendung z.b.: Color mycol = Color.red; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) OMG IDL und Java-Mapping... Vereinigungen (Unions) Beschreibt Daten, die verschiedene Typen haben können Typ wird durch Diskriminator zur Laufzeit festgelegt Beispiel: IDL union Animal switch (short) { case 1: Dog dog; case 2: Cat cat; default: Mouse mouse; ; Umsetzung in Java: Klasse Animal mit Methode discriminator() für Diskriminator Get- und Set-Methoden für die Felder des Union prüfen bzw. setzen auch Diskriminator-Wert Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 135

76 3.4.1 OMG IDL und Java-Mapping... Attribute In einem Interface können auch Attribute definiert werden: attribute string name; readonly attribute long age; deklariert werden damit letztendlich nur Zugriffsmethoden zum Lesen und ggf. auch zum Schreiben Erzeugte Java-Schnittstelle im Beispiel: String name (); void name (String newname); int age (); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) OMG IDL und Java-Mapping... Konstanten Konstanten können auf globaler, auf Modul- oder auf Interface-Ebene definiert werden unterschiedlicher Gültigkeitsbereich Beispiel zur Syntax: interface Test2 { const short maxitems = 40; const string myname = "Roland";... Abbildung nach Java: public interface Test2 extends Test2Operations... { public static final short maxitems = (short)(40); public static final String myname = "Roland"; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 137

77 3.4.1 OMG IDL und Java-Mapping... Exceptions IDL erlaubt Definition eigener Exceptions daneben: jede Methode kann (implizit) eine Reihe von System-Exceptions werfen, z.b. Marshaling-Fehler Beispiel: exception SyntaxError { unsigned short position; ; void parse(in string command) raises (SyntaxError); Umsetzung in Java: void parse (String command) throws Beispiel.Test2Package.SyntaxError; plus Exception-Klasse SyntaxError, analog zu Struct Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) OMG IDL und Java-Mapping... Vererbung Methoden und Attribute von Schnittstellen können vererbt werden auch Mehrfachvererbung möglich kein Überladen / Überschreiben von Methoden erlaubt Beispiel: interface Animal { attribute short age; void eat(in string what); ; interface Dog : Animal { string bark(); ; Umsetzung in Java: AnimalOperations short age() void age(short) void eat(string) Animal DogOperations String bark() Dog Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 139

78 3.4.1 OMG IDL und Java-Mapping... Vererbung... Methoden der Basisklasse org.omg.corba.object (Java Bindings): _is_a(): implementiert Objekt gegebenes Interface? _non_existent(): zugehöriges Server-Objekt zerstört? _is_equivalent(): verweisen zwei Referenzen auf dasselbe Objekt? (soweit ORB das einfach bestimmen kann) _hash(): Hashwert der Objektreferenz _duplicate() / _release(): Kopie bzw. Freigabe einer Objektreferenz (i.a. keine Garbage Collection im ORB) _get_interface_def(): liefert Schnittstellenbeschreibung aus Interface Repository _create_request(): erzeugt Request für DII Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) OMG IDL und Java-Mapping... Parameterübergabe-Semantik Alle Parametertypen außer Interfaces: call-by-value Methoden dürfen in-parameter jedoch nicht verändern Verhalten ist sonst undefiniert IDL unterstützt spezielle Typdeklarationen (valuetype), um Objekte zu definieren, die per Wert übergeben werden analog zu interface, aber mit Angabe echter Attribute (State Variables) Interfaces: call-by-reference übergeben wird die Objektreferenz (kein narrow() nötig) IDL unterstützt auch abstrakte Interfaces können von valuetype und interface geerbt werden damit: Übergabesemantik erst zur Laufzeit festgelegt Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 141

79 3.4 CORBA im Detail Name Service Der CORBA Namensdienst definiert einen hierarchischen Namensraum Resorts Mexico Greece Hawaii Hyatt Ixtapa Cancun Club Med Playa Blanca Naming Context Object Name Aufbau eines Namens: Resorts Context Name Mexico Club Med Context Name Context Name Cancun Simple Name Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) Name Service... Darstellung von Namen (in IDL): struct NameComponent { string id; // Eigentlicher Name string kind; // Typ (analog zu Dateiendungen) ; typedef sequence<namecomponent> Name; Wichtige Methoden des Namensdienstes (NamingContext) bind() / rebind() : Binden von Objektnamen bind_context() / rebind_context() : Binden eines Naming Context unter einem (Kontext-)Namen new_context() : Erzeugen eines Naming Context unbind() : Namen entfernen list() : Ausgabe aller Namen resolve() : Namen in Objekt auflösen Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 143

80 3.4.2 Name Service... Erweiterte Schnittstelle NamingContextExt von NamingContext abgeleitet erlaubt u.a. Verwendung von Pfadnamen in Stringform id z.b.: a /.c /d.e kind NameComponent wichtige Methoden: to_name() : wandelt Namen in Stringform in eine Sequenz von NameComponents um resolve_str() : entspricht resolve(to_name("name")) (Java-)Referenz auf Wurzel-Naming Context: NamingContextExt nc = NamingContextExtHelper.narrow( orb.resolve_initial_references("nameservice")) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) Name Service... Beispiel Registrierung eines Objekts in einem neuen Kontext: NamingContextExt nc = NamingContextExtHelper.narrow( orb.resolve_initial_references("nameservice"); // Erzeugen und Binden des Naming Contexts nc.rebind_context(nc.to_name("hello"), nc.new_context()); // Binden der Objektreferenz an hierarchischen Namen nc.rebind(nc.to_name("hello/helloworld"), objref); Auflösen des Namens (ohne NamingContextExt): NameComponent path[] = { new NameComponent("Hello",""), new NameComponent("HelloWorld", "") ; Hello obj = HelloHelper.narrow(nc.resolve(path)); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 145

81 3.4 CORBA im Detail Factories Eine Factory kann auch eine Referenz auf ein neues CORBA-Objekt zurückliefern, das durch einen eigenen Servant implementiert wird Die Factory-Methode muß dazu: einen neuen Servant erzeugen diesen mit servant to reference() beim POA registrieren die CORBA-Referenz mit narrow() in eine Java-Referenz umwandeln und als Ergebnis zurückliefern Eine Referenz auf den POA kann man u.a. über die von der Klasse org.omg.portableserver.servant geerbten Methoden default POA() oder poa() erhalten Beispiel: siehe WWW Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) Factories... Beispiel: IDL-Datei module HelloWorld { // Schnittstelle der Objekte, werden vom Client über Factory erzeugt interface Hello { string sayhello(); ; // Schnittstelle des Factory Objekts interface HelloFactory { Hello createhello(in string name); ; ; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 147

82 3.4.3 Factories... Beispiel: Client (Ausschnitt) // Resolve the object reference in naming NameComponent path[] = ncref.to_name("helloworld"); HelloFactory fact = HelloFactoryHelper.narrow( ncref.resolve(path)); // Erzeuge Objekte über Factory Hello helloref = fact.createhello("klaus"); Hello helloref2 = fact.createhello("uwe"); // Rufe Methode für jedes Objekt auf System.out.println(helloRef.sayHello()); System.out.println(helloRef2.sayHello()); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) Factories... Beispiel: Factory-Implementierung im Server class HelloFactoryServant extends HelloFactoryPOA { public HelloFactoryServant() { public Hello createhello(string name) { try { HelloServant helloref = new HelloServant(name); org.omg.corba.object ref = _poa().servant_to_reference(helloref); return HelloHelper.narrow(ref); catch(...) {... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (5/15) 149

83 Client/Server-Programmierung WS 2014/ Betriebssysteme / verteilte Systeme Tel.: 0271/ , Büro: H-B 8404 Stand: 23. Januar 2015 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) vi 3.4 CORBA im Detail Delegation und Tie-Klassen In der Regel: Objekt-Implementierung erweitert die vom IDL-Compiler erzeugte POA-Klasse, z.b.: public class HelloImpl extends HelloPOA { public String sayhello(string Name) {... Falls dies nicht möglich ist: IDL-Compiler kann Tie-Klasse erzeugen, die Aufrufe delegiert Objekt-Implementierung muß nur noch die Schnittstelle implementieren, z.b.: public class HelloImpl implements HelloOperations { public String sayhello(string Name) {... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 150

84 3.4.4 Delegation und Tie-Klassen... Aufbau der Tie-Klasse public class HelloPOATie extends HelloPOA { private HelloOperations _delegate; public HelloPOATie(HelloOperations delegate) { _delegate = delegate; // this() registriert den Servant auch beim RootPOA public HelloWorld.Hello _this() { return HelloWorld.HelloHelper.narrow(_this_object());... public java.lang.string sayhello(java.lang.string Name) { return _delegate.sayhello(name); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) Delegation und Tie-Klassen... Server-Programm mit Tie-Klasse ORB orb = ORB.init(args, null); HelloImpl helloimpl = new HelloImpl(); HelloPOATie hellotie = new HelloPOATie(helloImpl); Hello href = hellotie._this(); POA rootpoa = POAHelper.narrow( orb.resolve_initial_references("rootpoa")); rootpoa.the_poamanager().activate(); NamingContextExt ncref = NamingContextExtHelper.narrow( orb.resolve_initial_references("nameservice")); ncref.rebind(ncref.to_name("helloworld"), href); orb.run(); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 152

85 3.4.4 Delegation und Tie-Klassen... Beispiel: Vererbung der Implementierung IDL-Schnittstelle: module HelloWorld { interface Hello { string myname(); string sayhello(in string Name); ; interface HelloToo : Hello { string sayhellotoo(); ; ; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) Delegation und Tie-Klassen... Beispiel: Vererbung der Implementierung... Klassendiagramm der Implementierung: HelloOperations String myname() String sayhello(string) HelloTooOperations String sayhellotoo() HelloPOA Hello HelloToo HelloTooPOA HelloPOATie HelloImpl _delegate HelloTooImpl _delegate HelloTooPOATie Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 154

86 3.4 CORBA im Detail Statische und dynamische Aufrufe Statische Aufrufe: schnittstellenspezifische Stubs und Skeletons werden zur Übersetzungszeit aus IDL generiert Dynamic Invocation Interface (DII): erlaubt dem Client Methoden aufzurufen, ohne daß Schnittstelle zur Übersetzungszeit bekannt sein muß für generische Clients, z.b. Property-Editor, graphische Entwicklungsumgebung Information zur Schnittstelle kann zur Laufzeit z.b. über Interface Repository gewonnen werden Client muß Request explizit erzeugen und absenden auch asynchrone Aufrufe möglich Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) Statische und dynamische Aufrufe... Dynamic Skeleton Interface (DSI): ermöglicht Objekt-Implementierungen, die zur Übersetzungszeit die Schnittstelle nicht kennen, z.b.: Interpreter, Debugger, dynamisch getypte Sprachen wie Lisp generische CORBA-Schnittstelle für Objekte einer objektorientierten Datenbank generische Proxies (in Verbindung mit DII) Objektadapter reicht alle Aufrufe an dieselbe Methode invoke() der Objektimplementierung weiter Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 156

87 3.4.5 Statische und dynamische Aufrufe... Beispiel für dynamischen Methodenaufruf über DII NVList arglist = orb.create_list(1); // Argumentliste aufbauen Any arg = orb.create_any(); arg.insert_string("roland"); NamedValue nv = arglist.add_value("name", arg, ARG_IN.value); Any res = orb.create_any(); // Ergebnisobjekt erzeugen res.insert_string(""); NamedValue resv = orb.create_named_value("result", res, ARG_OUT.value); // Request erzeugen: result = sayhello(name) Request req = helloref._create_request(null, "sayhello", arglist, resv); req.invoke(); // Request ausführen // Alternativ: req.send deferred();...; req.get response(); String s = res.extract_string(); // Ergebnis extrahieren Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) CORBA im Detail Portable Object Adapter (POA) Komponenten des POA-Modells: Servant: laufende Instanz einer Objektimplementierung Lebenszeit von Servant und Objekt entkoppelt, Objekt ggf. nacheinander durch mehrere Servants realisiert Servant kann mehrere Objekte implementieren Objekt-ID: im Bereich eines POA eindeutige ID zur Zuordnung von Anfragen an Servants Objektreferenz: enthält eindeutige ID des POA und Objekt-ID zusätzlich ggf. Ort des Servers / POAs,... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 158

88 3.4.6 Portable Object Adapter (POA)... Komponenten des POA-Modells:... POA: Namensraum für Objekt-IDs bildet Objekt-IDs auf Servants ab bestimmt über POA Policies das Verhalten der von ihm verwalteten Servants Active Object Map: Abbildung von Objekt-IDs auf Servants aktives Objekt: Objekt-ID steht in Active Object Map aktiver Servant: ist in Active Object Map eingetragen Default Servant: bearbeitet Anfragen für inaktive Objekte muß bei Bedarf von der Anwendung registriert werden Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) Portable Object Adapter (POA)... Komponenten des POA-Modells:... Servant Manager: kann bei Bedarf von der Anwendung registriert werden übernimmt bei Anfragen an inaktive Objekte ggf.: Aktivierung eines neuen Servants Zuordnung der Objekt-ID zu vorhandenem Servant POA Manager: kapselt Zustand von POAs kann POA aktivieren oder veranlassen, daß Anfragen (temporär) zwischengespeichert oder verworfen werden Adapter Activator: aktiviert (Kind-)POA, wenn Server Anfrage an nichtexistierenden POA erhält Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 160

89 3.4.6 Portable Object Adapter (POA)... POA-Architektur Root Servant POA Active Object Map Object ID POA Manager Adapter Activator Objektreferenz Servant Zeiger POA A Default Servant Object ID Object ID Object ID POA B Servant Manager Object ID Object ID Adapter Activator POA C Object ID Default Servant Servant Servant Servant Manager Servant Servant Servant Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) Portable Object Adapter (POA)... POA Policies Thread Policy: Multithreading im Server? SINGLE THREAD MODEL: POA ruft Methoden eines Servants sequentiell auf ORB CRTL MODEL: implementierungsspezifisch, mehrere Threads erlaubt Lifespan Policy: Lebensdauer der Objekte TRANSIENT: Objekte leben nur so lange wie POA PERSISTENT: Objekte können länger leben wie POA POA mit gegebenem Namen; bei Server-Neustart: Server muß wieder ursprünglichen Port benutzen Server muß POA gleichen Namens erzeugen (nicht: Objektzustand wird persistent gespeichert) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 162

90 3.4.6 Portable Object Adapter (POA)... POA Policies... Object ID Uniqueness Policy UNIQUE ID: nur eine Objekt-ID pro Servant MULTIPLE ID: mehrere Objekt-IDs pro Servant erlaubt ID Assignment Policy: wer erzeugt Objekt-IDs? USER ID: Anwendung, SYSTEM ID: POA Request Processing Policy USE ACTIVE OBJECT MAP ONLY: Objekt-IDs werden nur über Active Object Map (AOM) auf Servants umgesetzt USE DEFAULT SERVANT: Wenn Objekt-ID nicht in AOM ist: Anfrage an registrierten Default Servant leiten USE SERVANT MANAGER: Wenn Objekt-ID nicht in AOM ist: über registrierten Servant Manager neuen Servant erzeugen Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) Portable Object Adapter (POA)... POA Policies... Servant Retention Policy [NON ]RETAIN: Servants werden [nicht] in AOM aufgenommen Implicit Activation Policy IMPLICIT ACTIVATION: implizite Aktivierung von Servants durch POA, z.b. bei POA.servant to reference(), POA.servant to id() ggf. Typkonvertierung von Servant nach Objektreferenz NO IMPLICIT ACTIVATION: Servant muß explizit aktiviert werden POA.activate object(): POA generiert Objekt-ID POA.activate object with id(): Anwendung generiert Objekt-ID Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 164

91 3.4.6 Portable Object Adapter (POA)... Standard-Policy des Root-POA Thread Policy: ORB CRTL MODEL Lifespan Policy: TRANSIENT Object ID Uniqueness Policy: UNIQUE ID ID Assignment Policy: SYSTEM ID Request Processing Policy: USE ACTIVE OBJECT MAP ONLY Servant Retention Policy: RETAIN Implicit Activation Policy: IMPLICIT ACTIVATION Policy kann nicht geändert werden, ggf. muß neuer POA erzeugt werden Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) Portable Object Adapter (POA)... Beispiel: Leichtgewichtige Objekte... Objekte mit kleinem Zustand Attribute können in Objekt-ID eincodiert werden Alle Objekte werden durch einen einzigen (Default-)Servant realisiert Vorteil: Skalierbarkeit geringer Ressourcenverbrauch beim Server Anmerkung: mit DSI kann ein einziger Servant sogar Objekte unterschiedlicher Klassen implementieren... Vollständiger Code: siehe WWW Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 166

92 3.4 CORBA im Detail GIOP, IIOP und IOR Seit CORBA 2.0: Kommunikationsprotokoll zwischen Objekten bzw. ORBs ist standardisiert GIOP: General Inter-ORB Protocol Spezifikation, wie Protokolle auszusehen haben IIOP: Internet Inter-ORB Protocol konkretes Protokoll auf Basis von TCP/IP Damit: Interoperabilität zwischen verschiedenen ORB-Implementierungen IOR: Interoperable Object Reference Aufbau von Objektreferenzen ist ebenfalls standardisiert Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) GIOP, IIOP und IOR... GIOP Spezifiziert unter anderem: Annahmen über Transportschicht verbindungsorientiert, duplex, zuverlässig, stromorientiert binäres Übertragungsformat für IDL-Datentypen CDR: Common Data Representation unterstützt Little-Endian und Big-Endian über Tag, Empfänger konvertiert bei Bedarf keine Typ-Tags, d.h. Empfänger muß Datentyp kennen (Problem ggf. bei dynamischen Aufrufen) acht Nachrichtenformate Request, Reply, CloseConnection,... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 168

93 3.4.7 GIOP, IIOP und IOR... IIOP und IOR Implementierung des GIOP auf Basis von TCP/IP Hauptaufgabe: Festlegung des konkreten Aufbaus von IORs Genereller Aufbau einer IOR: Repository ID (standardisiert) Verbindungsendpunkt (standardisiert) Object Key (proprietär) Verb. Obj.Key... Object-Key enthält Objekt-ID und POA-Namen mehrere Einträge für Verbindungsendpunkt / Object-Key möglich, damit z.b. Objekt über verschiedene GIOP-Protokolle erreichbar Objekt mehrfach vorhanden (Lastausgleich, Fehlertoleranz) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) GIOP, IIOP und IOR... IIOP und IOR... Verbindungsendpunkt bei IIOP: Host / IP-Adresse und Port Beispiel für Inhalt einer IOR TypeId : IDL:omg.org/CosNaming/NamingContextExt:1.0 TAG_INTERNET_IOP Profiles: Profile Id: 0 IIOP Version : 1.2 Host: Port: Object key (URL): StandardNS/NameServer POA/_root Object key (hex): 0x E E 53 2F 4E 61 6D D 50 4F 41 2F 5F 72 6F 6F 74 Formatiert mit dem dior-tool des JacORB Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 170

94 3.4.7 GIOP, IIOP und IOR... Nutzung von IORs IORs in String-Form können beliebig zwischen Objekten ausgetauscht werden, z.b. als Methoden-Parameter oder -Ergebnis über Dateien, WWW,... Damit: Objekte können auch ohne Name Service bekanntgegeben werden Relevante Methoden (in Klasse ORB): object_to_string() : Erzeugt String-Form einer CORBA- Objektreferenz string_to_object() : Wandelt String wieder in CORBA- Objektreferenz um Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) CORBA im Detail Implementation Repository (IMR) ORBs unterstützen typischerweise zwei Methoden, wie IORs an Servants gebunden werden: direktes Binden: IOR enthält Host/Port des Servers, in dem Servant läuft indirektes Binden: IOR enthält Host/Port eines externen Brokers, d.h. des IMR IMR kennt Ort (Host/Port) des Servers IMR unterstützt u.a.: automatischer Server-Startup Migration von Servern bzw. Objekten automatischer Lastausgleich Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 172

95 3.4.8 Implementation Repository (IMR)... CORBA Spezifikation standardisiert nur Interaktion zwischen Clients und IMR ausreichend um Interoperabilität zu sichern Realisierung und Funktionsumfang des IMR sowie Schnittstelle zu Servern ist ORB-spezifisch Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) Implementation Repository (IMR)... Beispiel: Automatischer Server-Start Client Objektreferenz IDL:HelloWorld/Hello:1.0 frodo:2133 mypoa:hello1 4 LOCATION_FORWARD [bilbo:1799] 1 sayhello() [mypoa:hello1] 5 7 sayhello() [mypoa:hello1] Reply von sayhello() 2 rsh bilbo java HelloServer Implementation Repository (frodo:2133) Server Tabelle HelloWorld Test mypoa rsh bilbo java HelloServer Print Server (bilbo: 1799) mypoa hello1 6 3 ready [mypoa, bilbo: 1799] bilbo:1799 gandalf: 1234 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 174

96 3.4.8 Implementation Repository (IMR)... Beispiel: Automatischer Server-Start Client ruft Methode über IOR auf, Anfrage wird an IMR geleitet 2. IMR sieht in Server-Tabelle nach, ob POA existiert. Falls nicht, wird Server (mit POA) gestartet 3. Server sendet Fertig-Meldung an IMR, mit Host/Port. IMR trägt Information in Server-Tabelle ein 4. IMR konstruiert neue IOR, die Host/Port des Servers enthält und sendet LOCATION FORWARD-Nachricht an Client 5. Client sendet Anfrage zum zweiten Mal, diesmal an Server 6. Server findet POA über POA-Namen. POA findet passenden Servant über Objekt-ID und ruft Methode auf 7. Ergebnis wird an Client zurückgegeben Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) CORBA im Detail Interface Repository (IR) Online Datenbank mit Schnittstellenbeschreibungen CORBA spezifiziert nur Zugriffsmethoden (lesen / schreiben) Implementierung ist ORB-spezifisch ebenso, wie IDL-Spezifikationen in das IR kommen IR nützlich u.a. für: Typprüfung der Parameter durch den ORB (auch bei DII) Verbindung mehrerer ORBs Metadaten für Clients und Server (für DII, DSI) z.b. Klassenbrowser, Anwendungsgeneratoren,... selbstbeschreibende Objekte (Introspection) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 176

97 3.4.9 Interface Repository (IR)... Wichtige Klassen und Methoden IR definiert Klassen (genauer: Schnittstellen) für alle IDL-Konstrukte, z.b.: ModuleDef, InterfaceDef, OperationDef, ParameterDef,... Objekte der Klassen enthalten einander, entsprechend der Verschachtelung in der IDL Basisklassen Container und Contained InterfaceDef enthält mehrere OperationDefs,... Von Contained erbt jede Klasse die Methode describe() liefert Beschreibung des IDL-Konstrukts als Struct z.b. struct OperationDescription enthält Name, Repository-ID, Ergebnistyp, Parameterliste, Exceptions,... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) Interface Repository (IR)... Startpunkte für die IR-Information Methode _get_interface_def() liefert InterfaceDef eines Objekts: Hello helloref = HelloHelper.narrow(ncRef.resolve(path)); org.omg.corba.object c = helloref._get_interface_def(); org.omg.corba.interfacedef id = org.omg.corba.interfacedefhelper.narrow(c); Methode lookup_id() des IR liefert IR-Objekt zu einer Repository-ID Repository-ID beschreibt IDL-Element eindeutig, z.b. im Hello-World-Beispiel: IDL:HelloWorld/Hello:1.0 für Interface Hello IDL:HelloWorld/Hello/sayHello:1.0 für Operation Betriebssysteme / verteilte Systeme Client/Server-Programmierung (6/15) 178

98 Client/Server-Programmierung WS 2014/ Betriebssysteme / verteilte Systeme Tel.: 0271/ , Büro: H-B 8404 Stand: 23. Januar 2015 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) vii 3.4 CORBA im Detail Sicherheit CORBA-Spezifikation enthält Security Attribute Service Basis ist GIOP über (z.b.) SSL/TLS sichert Vertraulichkeit/Integrität der Nachrichten sichert Authentifizierung des Servers Security Attribute Service realisiert zusätzlich: Authentifizierung des Clients u.a. über Benutzername und Paßwort Weitergabe von Sicherheitsattributen (z.b. Identität, Privilegien) des Clients an den Server damit: Delegation von Rechten möglich, d.h. Server kann für Benutzer agieren Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 179

99 3 CORBA Zusammenfassung CORBA definiert ein verteiltes, sprach- und plattform-unabhängiges Objektmodell standardisiertes Protokoll (GIOP, IIOP) stellt Interoperabilität sicher Zentral: Schnittstellenbeschreibung über OMG IDL automatische Erzeugung von Stubs und Skeletons Keine 1-zu-1 Beziehung zwischen Objekten und Objektimplementierungen (Servants) POA kann unterschiedliche Policies realisieren CORBA spezifiziert Schnittstellen zu etlichen Diensten Namensdienst, Ereignisdienst, Lebenszyklus,... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 180 Client/Server-Programmierung WS 2014/ RMI / IIOP Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 181

100 4 RMI / IIOP... Inhalt RMI über IIOP Farley, Crawford, Flanagan: S. 88ff, Kap. 7 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) RMI / IIOP... RMI über IIOP Ziel: Verbindung von Java-RMI Objekten mit nicht-java (CORBA) Objekten Vorgehensweise: RMI nutzt CORBA IIOP-Protokoll zur Kommunikation zwischen Objekten Damit: Java-Client kann CORBA Objekt über RMI nutzen CORBA-Client kann RMI-Objekt über CORBA nutzen Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 183

101 4 RMI / IIOP... Vorgehen zur Nutzung von RMI/IIOP Basisklasse: Remote-Objekte müssen von javax.rmi.portableremoteobject erben statt von java.rmi.server.unicastremoteobject RMI Compiler: Stubs und Skeletons müssen über rmic -iiop erzeugt werden Option -idl erzeugt zusätzlich OMG IDL Datei Namensdienst: statt RMI Registry muß JNDI benutzt werden, um auf CORBA-Namensdienst zuzugreifen Downcast: vom Namensdienst erhaltene Objektreferenzen müssen über PortableRemoteObject.narrow() in gültige Referenzen umgewandelt werden Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) RMI / IIOP... Beispiel: Gemischtes Hello World Server mit RMI realisiert Schnittstelle: import java.rmi.remote; import java.rmi.remoteexception; public interface Hello extends Remote { String sayhello(string to) throws RemoteException; Client wahlweise mit RMI oder CORBA Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 185

102 4 RMI / IIOP... Server-Code import javax.naming.*; import java.rmi.*; import java.util.*; import javax.rmi.portableremoteobject; public class HelloServer extends PortableRemoteObject implements Hello { public HelloServer() throws RemoteException { super(); public String sayhello(string to) { System.out.println("Hello-Server called"); return "Hello World to " + to + "!"; Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) RMI / IIOP... Server-Code... public static void main(string args[]) { try { // Server Objekt erzeugen HelloServer obj = new HelloServer(); // Referenz über JNDI beim Namensdienst registrieren Properties props = new Properties(); props.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.cnctxfactory"); props.put("java.naming.provider.url", "iiop://bspc02:5555"); Context ctx = new InitialContext(props); ctx.rebind("helloworld", obj); catch (Exception e) {... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 187

103 4 RMI / IIOP... RMI Client public static void main(string args[]) { try { // Obektreferenz über JNDI vom Namensdienst besorgen Properties props = new Properties(); props.put(context.initial_context_factory, "com.sun.jndi.cosnaming.cnctxfactory"); props.put(context.provider_url, "iiop://bspc02:5555"); Context ctx = new InitialContext(props); Hello obj = (Hello) PortableRemoteObject.narrow(ctx.lookup("HelloWorld"), Hello.class); // Remote Methode aufrufen System.out.println(obj.sayHello("Roland")); catch (Exception e) {... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) RMI / IIOP... CORBA Client public static void main(string args[]) { try{ // ORB erzeugen und initialisieren ORB orb = ORB.init(args, null); // Root naming context holen org.omg.corba.object ns = orb.resolve_initial_references("nameservice"); NamingContextExt ncref = NamingContextExtHelper.narrow(ns); // Objektreferenz vom Namensdienst besorgen NameComponent path[] = ncref.to_name("helloworld"); Hello helloref = HelloHelper.narrow(ncRef.resolve(path)); System.out.println(helloRef.sayHello("Peter")); catch(exception e) {... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 189

104 4 RMI / IIOP... Code-Erzeugung mit RMI-Server / CORBA-Client Client Seite Server Seite _HelloStub.java Hello.java HelloServer.java HelloHolder.java HelloHelper.java Hello.java idlj javac Hello.class HelloServer.class HelloOperations.java HelloClient.java javac HelloClient.class... rmic iiop idl Hello.idl _Hello_Stub.class _HelloServer_Tie.class Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 190 Client/Server-Programmierung WS 2014/ Java Komponenten-Modelle Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 191

105 5 Java Komponenten-Modelle... Inhalt Komponenten-Modelle Java Beans Enterprise Java Beans (EJB 3.0) Burke / Monson-Haefel Farley / Crawford / Flanagan, Kap. 6 (EJB 2.1!) Orfali / Harkey, Kap (EJB 2.1!) Sriganseh / Brose / Silverman package-summary.html Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) Java Komponenten-Modelle Komponenten-Modelle Was sind Software-Komponenten? Software-Komponenten sind ausführbare Software-Einheiten, die unabhängig hergestellt, erworben und konfiguriert werden und aus denen sich funktionierende Gesamtsysteme zusammensetzen lassen. Im Vordergrund: Zusammensetzungsaspekt Eine Komponente ist: eine funktional und technisch abgeschlossene, ausführbare Einheit unabhängig als Einheit entwickelbar und konfigurierbar wiederverwendbar nur über genau festgelegte Schnittstellen ansprechbar Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 193

106 5.1 Komponenten-Modelle... Begriffe Visuelle Komponente stellt etwas auf dem Bildschirm (der Anwendung) dar Nichtvisuelle Komponente ist für Benutzer der Anwendung nicht sichtbar Komponentenmodell: definiert Architektur der Komponenten u. Struktur ihrer Schnittstellen Mechanismen zur Zusammenarbeit mit Container und anderen Komponenten Container: Ausführungsumgebung für Komponenten Kontext, in dem Komponenten gruppiert und miteinander verbunden werden stellt Management- und Kontroll-Dienste zur Verfügung Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) Komponenten-Modelle... Software-Entwicklung mit Komponenten Zwei Arten von Programmierern: Komponenten-Entwickler (component developer) implementiert eine Komponente Komponenten-Anwendungsentwickler (component assembler) entwickelt eine Anwendung (oder neue Komponenten) durch Zusammenfügen existierender Komponenten i.d.r. mit (graphischer) Werkzeug-Unterstützung! Bei Komponenten daher zwei verschiedene Nutzungsphasen: Design Time: während der Anwendungsentwicklung Run Time: während der Ausführung der Anwendung Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 195

107 5.1 Komponenten-Modelle... Software-Entwicklung mit Komponenten: Beispiel Zusammenbau einer Komponente aus Teilkomponenten: public class MyEventAdapter { { private TextBean target; MyEventAdapter(TaextBean t) { target = t; public void actionperformed( ActionEvent e) { if (x < max) target.setvalue(val); = x; Verwendung der Komponente in einer Anwendung: Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) Komponenten-Modelle... Werkzeug-Unterstützung (Bsp: Visual Café) Komponenten auswahl Anwendung mit Komponenten Editor für Komponenten Eigenschaften Wizard zur Komponenten Verknüpfung Betriebssysteme / verteilte Systeme Client/Server-Programmierung (7/15) 197

Client/Server-Programmierung

Client/Server-Programmierung Client/Server-Programmierung WS 2016/2017 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 21. Oktober 2016 Betriebssysteme / verteilte

Mehr

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1 Kapitel 10 JDBC und SQLJ 1 JDBC und SQLJ Bisher: Einbettung von SQL (statisch bzw. dynamisch) in C, C++, COBOL, ADA (embedded SQL) bzw. prozedurale Erweiterungen für SQL in Oracle (PL/SQL) Was ist mit

Mehr

Client/Server-Programmierung

Client/Server-Programmierung lient/server-programmierung WS 2016/2017 etriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, üro: H- 8404 Stand: 4. Oktober 2016 etriebssysteme / verteilte Systeme

Mehr

1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären.

1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären. CORBA Lernziele 1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären. Zentrale Idee: Schnittstelle: - mit einer Schnittstelle beschreibt man

Mehr

F.1 Überblick. 1 RPC-System in Aufgabe 3. Kommunikationsschicht: tauscht Daten zwischen zwei Rechnern aus

F.1 Überblick. 1 RPC-System in Aufgabe 3. Kommunikationsschicht: tauscht Daten zwischen zwei Rechnern aus F 5. Übung F 5. Übung F.1 Überblick Aufgabe 3 RPC-System im Überblick Marshalling primitiver Datentypen Byteorder Fließkommawerte s und s F.1 Kommunikationsschicht: tauscht Daten zwischen zwei Rechnern

Mehr

Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape. 6. Übung

Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape. 6. Übung Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape 6. Übung Aufgabe 1: In dieser Übung sollen Sie eine kleine Java-Anwendung schreiben, die auf die Oracle-Datenbank

Mehr

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans Projekt Entwicklung verteilter Softwaresysteme mit Web Services SoSe 2008 - Java Server Pages und Servlets - 7. April 2008 Verteilte Systeme und Informationssysteme (VSIS) Department Informatik Universität

Mehr

Praktikum Datenbanken und verteilte Systeme SS Java Server Pages und Servlets -

Praktikum Datenbanken und verteilte Systeme SS Java Server Pages und Servlets - Praktikum Datenbanken und verteilte Systeme SS 2008 - Java Server Pages und Servlets - Verteilte Systeme und Informationssysteme (VSIS) Department Informatik Universität Hamburg Infrastruktur vsispoolx

Mehr

Schematische Schnittstelle eines Naming-Context-Objekts und des Binding-Iterators. BindingIterator. next_one next_n destroy

Schematische Schnittstelle eines Naming-Context-Objekts und des Binding-Iterators. BindingIterator. next_one next_n destroy 10 Naming-Service (3) Schematische Schnittstelle eines Naming-Context-Objekts und des Binding-Iterators NamingContext resolve list destroy new_context unbind bind rebind bind_context rebind_context bind_new_context

Mehr

IUG DRESDEN ERSTELLUNG VON ROBUSTEN NATURAL SERVICES Software AG. All rights reserved. For internal use only

IUG DRESDEN ERSTELLUNG VON ROBUSTEN NATURAL SERVICES Software AG. All rights reserved. For internal use only IUG DRESDEN ERSTELLUNG VON ROBUSTEN NATURAL SERVICES 2016 Software AG. All rights reserved. For internal use only DIGITAL BUSINESS APPLICATIONS DRIVE THE DIGITAL BUSINESS Partner Lieferanten Kunden SaaS

Mehr

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation RMI Beispiel

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation RMI Beispiel UNIVERSITÄT LEIPZIG Mainframe Internet Integration Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth SS2013 Java Remote Method Invocation RMI Beispiel el0100 copyright Abt. Technische Informatik,

Mehr

Vorbereitung DSLab Test 2

Vorbereitung DSLab Test 2 Vorbereitung DSLab Test 2 Sebastian Wurzer Paul Staroch CORBA in Java: Client: 1. ORB orb = (ORB) ORB.init(args, null); public static ORB init(string[] args, Properties props) Creates a new ORB instance

Mehr

C Java RMI. 1 Java. Objektorientierte Sprache

C Java RMI. 1 Java. Objektorientierte Sprache Java RMI 1 1 Java Objektorientierte Sprache Objekte und andere Datentypen: int, float, boolean, etc. Objektreferenzen Verweise auf Objekte keine Zeiger, Adressen o.ä. Methodenaufruf bei vorhandener Objektreferenz

Mehr

OO Programmiersprache vs relationales Model. DBIS/Dr. Karsten Tolle

OO Programmiersprache vs relationales Model. DBIS/Dr. Karsten Tolle OO Programmiersprache vs relationales Model Vorgehen bisher Erstellen eines ER-Diagramms Übersetzen in das relationale Datenmodell Zugriff auf das relationale Datenmodell aus z.b. Java ER rel. Modell OO

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Java EE 5 und Komponententechnologien 2. Einführung Java EE 5 Plattform 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5.

Mehr

Praktikum Softwareentwicklung 2

Praktikum Softwareentwicklung 2 Praktikum Softwareentwicklung 2 SS 2005 Dipl.-Ing. Thomas Kotzmann Dipl.-Ing. Markus Löberbauer Dipl.-Ing. Dr. Herbert Prähofer Institut für Systemsoftware Johannes Kepler Universität Linz Pratikum SWE

Mehr

2 Anlegen und Konfigurieren von Datenbanken 35

2 Anlegen und Konfigurieren von Datenbanken 35 Inhalt 1 Einführung und Installation 9 1.1 Einführung 11 1.1.1 Aufbau 11 1.1.2 Schreibkonventionen 12 1.1.3 Zur Beispieldatenbank 13 1.1.4 Kurz-Installation 19 1.2 Die Oracle-Installation 20 1.3 Die Installation

Mehr

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel Einführung Servlets JEE Vorlesung Teil 2 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Wiederholung Hello World Blick in die Details Servlet Programmierung Potentielle Fehler Lernziele Gruppenübung 2

Mehr

1 Abstrakte Klassen, finale Klassen und Interfaces

1 Abstrakte Klassen, finale Klassen und Interfaces 1 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Java, XML und Oracle10g What's new?

Java, XML und Oracle10g What's new? Java, XML und Oracle10g What's new? Carsten Czarski Business Unit Database Oracle Deutschland GmbH Agenda JDBC Web Rowset Oracle Connection Cache Fast Connection Failover Server Side JVM Database Web Services

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Generics Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Überblick Generics 2 Generische Klassen 3 Generische Methoden 4

Mehr

Übersicht. Relationale Datenbanken SQL - Structured Query Language JDBC - Java Datenbank Schnittstelle Beispielanwendung. R. Kopetzky 7.

Übersicht. Relationale Datenbanken SQL - Structured Query Language JDBC - Java Datenbank Schnittstelle Beispielanwendung. R. Kopetzky 7. Informatik Verbund Stuttgart der Universität Stuttgart Tutorium Java Anbindung von Datenbanken mit JDBC (kopetzky@ike.uni-stuttgart.de) Übersicht Relationale Datenbanken SQL - Structured Query Language

Mehr

Relationales Datenbanksystem Oracle

Relationales Datenbanksystem Oracle Relationales Datenbanksystem Oracle 1 Relationales Modell Im relationalen Modell wird ein relationales Datenbankschema wie folgt beschrieben: RS = R 1 X 1 SC 1... R n X n SC n SC a a : i=1...n X i B Information

Mehr

Kap. 3 Evolution von TP-Monitoren zu Objekt-Monitoren

Kap. 3 Evolution von TP-Monitoren zu Objekt-Monitoren Kap. 3 Evolution von TP-Monitoren zu Objekt-Monitoren Vergleich TP-Lite versus TP-Heavy Objektorientierung: Object Request Brokers (ORBs) OMs: Object Monitors Kap3-1 3.1 TP-Lite oder TP-Heavy? Aktive Diskussion

Mehr

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik Programmieren II Innere Klassen Heusch 10, 13.10 Ratz 5.2.1, 9.8 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Innere Klassen Bisher kennen wir nur Klassen, die entweder zusammen

Mehr

Überblick über die Roblet -Technik

Überblick über die Roblet -Technik Überblick über die Roblet -Technik Hagen Stanek gefördert durch Agenda Teil 1: Motivation, Einführung Teil 2: Beispiel-Vorführung Teil 3: Anwendungen, Zusammenfassung 2 Teil 1 Motivation, Einführung 3

Mehr

Komponentenorientierte Software-Entwicklung. Seite 1 / 44

Komponentenorientierte Software-Entwicklung. Seite 1 / 44 Seite 1 / 44 Wiederholung EJB-Module/-Projekte SessionBeans Stateless Beans Stateful Beans EntityBeans JPA-Grundlagen (EntityManager, Query-Abfragen) Vorschlag Projektaufbau / Package-Strukturierung Seite

Mehr

Klausur Grundlagen der Programmierung

Klausur Grundlagen der Programmierung Klausur Grundlagen der Programmierung Aufgabenstellung: Martin Schultheiß Erreichte Punktzahl: von 60 Note: Allgemeine Hinweise: Schreiben Sie bitte Ihren Namen auf jedes der Blätter Zugelassene Hilfsmittel

Mehr

4. Objektrelationales Typsystem Kollektionstypen. Nested Table

4. Objektrelationales Typsystem Kollektionstypen. Nested Table Nested Table Bei einer Nested Table handelt es sich um eine Tabelle als Attributwert. Im Gegensatz zu Varray gibt es keine Beschränkung bei der Größe. Definition erfolgt auf einem Basistyp, als Basistypen

Mehr

Grundlagen der Informatik 2

Grundlagen der Informatik 2 Grundlagen der Informatik 2 Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik mwilhelm@hs-harz.de Raum 2.202 Tel. 03943 / 659 338 1 Gliederung 1. Einführung

Mehr

- dynamisches Laden -

- dynamisches Laden - - - Fachbereich Technik Department Elektrotechnik und Informatik 21. Juni 2012 1/23 2/23 s dynamisch Code kann von mehreren Programmen genutzt werden => kleinere Programme einzelne Teile eines Programms

Mehr

Java Message Service im J2EE-Kontext

Java Message Service im J2EE-Kontext Java Message Service im J2EE-Kontext Im Folgenden soll kurz das Konzept der nachrichtenorientierten Kommunikation mit Hilfe von Messaging Services vorgestellt, und im Anschluss deren Einsatzmöglichkeiten

Mehr

Bibliotheks-basierte Virtualisierung

Bibliotheks-basierte Virtualisierung Dr.-Ing. Volkmar Sieh Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2015/2016 V. Sieh Bibliotheks-basierte Virtualisierung (WS15/16)

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 15 Parallele Programmierung... 15-2 15.1 Die Klasse java.lang.thread... 15-2 15.2 Beispiel 0-1-Printer als Thread... 15-3 15.3 Das Interface java.lang.runnable... 15-4 15.4 Beispiel 0-1-Printer

Mehr

Aufgabenblatt 1: Allgemeines

Aufgabenblatt 1: Allgemeines Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 1: Allgemeines (Zu bearbeiten bis 21.11.2016) Client/Server-Programmierung Wintersemester 2016/17 Im Praktikum zur Vorlesung Client/Server-Programmierung

Mehr

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen 7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen

Mehr

In diesem Abschnitt wollen wir uns mit der Architektur von Datenbank Managements Systemen beschäftigen.

In diesem Abschnitt wollen wir uns mit der Architektur von Datenbank Managements Systemen beschäftigen. 1 In diesem Abschnitt wollen wir uns mit der Architektur von Datenbank Managements Systemen beschäftigen. Zunächst stellt sich die Frage: Warum soll ich mich mit der Architektur eines DBMS beschäftigen?

Mehr

Kapitel 11: Anwendungsentwicklung

Kapitel 11: Anwendungsentwicklung Ludwig Maximilians Universität München Institut für Informatik Lehr- und Forschungseinheit für ysteme Skript zur Vorlesung Wintersemester 2010/2011 Kapitel 11: Anwendungs Vorlesung: DP Dr. Matthias Schubert

Mehr

Programmieren I. Dokumentation mit javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

Programmieren I. Dokumentation mit javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik Programmieren I Dokumentation mit javadoc Heusch 10.4 Ratz 4.1.1 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Automatische Dokumentation Java bietet standardmäßig das Dokumentationssystem

Mehr

Komponentenorientierte Software-Entwicklung. Seite 1 / 42

Komponentenorientierte Software-Entwicklung. Seite 1 / 42 Seite 1 / 42 Wiederholung Messaging Java Messaging Service (JMS) Pub/Sub P2P Messaging Middleware XMPP-Protokoll Java API for XML-Processing (JAXP) Java API for XML-Binding Webservices / SOA Simple Object

Mehr

Klausur Fachprüfung Wirtschaftsinformatik. Name:

Klausur Fachprüfung Wirtschaftsinformatik. Name: Klausur Fachprüfung Wirtschaftsinformatik Dauer: 2 Stunden Datum: 02.10.2003 Name: Punkte True-or-False: von 15 Punkte Multiple Choice: von 15 Punkte Quickies: von 30 Punkte Shorties: von 20 Punkte Longies:

Mehr

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen. Innere Klassen Innere Klassen Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen. Literatur: Java Tutorial & Arnold, K., Gosling, J. und Holmes,D... Page 1 Innere Klassen Der erste

Mehr

Folien php/mysql Kurs der Informatikdienste

Folien php/mysql Kurs der Informatikdienste Folien php/mysql Kurs der Informatikdienste 1. Einführung in die Datenbank MySQL Kursbeispiel und Kursziele 1.1 Das Kursbeispiel: eine kleine Personalverwaltung 1.2 Was brauchen wir? 1.3 Ziele Kurs AEMS1,

Mehr

Wiederholung VU Datenmodellierung

Wiederholung VU Datenmodellierung Wiederholung VU Datenmodellierung VU Datenbanksysteme Reinhard Pichler Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Wintersemester

Mehr

Masterkurs Verteilte betriebliche Informationssysteme

Masterkurs Verteilte betriebliche Informationssysteme Peter Man dl Masterkurs Verteilte betriebliche Informationssysteme Prinzipien, Architekturen und Technologien Mit 196 Abbildungen STUDIUM VIEWEG+ TEUBNER 1 Einführung in verteilte Systeme 1 1.1 Definitionen

Mehr

Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

Java: Der Einstieg. Algorithmen und Datenstrukturen II 1 Java: Der Einstieg Algorithmen und Datenstrukturen II 1 Grundlegendes zu Java: Historisches 1990-1991: Entwicklung der Programmiersprache OAK durch James Gosling von Sun Microsystems (zunächst für Toaster,

Mehr

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans Graphische Benutzungsoberflächen mit Java Einführung in NetBeans Graphische Benutzungsoberflächen! Interaktion mit dem Programm! Datenein- und ausgabe! Rückmeldungen über Verarbeitung der Daten! Visualisierung

Mehr

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung Beispiele für Ausdrücke Der imperative Kern Deklarationen mit Initialisierung Variablendeklarationen int i = 10; int j = 15; Beispiele für Ausdrücke i+j i++ i & j i j [] [static]

Mehr

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme Schwerpunkte 3. Grundlegende Sprachkonstruktionen imperativer Programme Java-Beispiele: Temperature.java Keyboard.java Imperative Programmierung Beispiel für ein Programm aus drei Komponenten Variable,

Mehr

Entwurfsmuster und Frameworks Singleton

Entwurfsmuster und Frameworks Singleton Entwurfsmuster und Frameworks Singleton Oliver Haase Oliver Haase Emfra Singleton 1/20 Beschreibung I Klassifikation: objektbasiertes Erzeugungsmuster Zweck: sicherstellen, dass eine Klasse nur genau einmal

Mehr

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine

Mehr

Architekturen Internet-basierter Informationssysteme

Architekturen Internet-basierter Informationssysteme Architekturen Internet-basierter Informationssysteme Statische vs. dynamische Information im Web Realisierungsansätze Applikationsserver Java-Applets CGI-Programme Verteilte Anwendungen Folie 1 Statische

Mehr

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode Methoden und Klassen Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik Wiederholung Jede Applikation braucht eine Klasse mit einer main-methode Eintrittspunkt in das Programm Die main-methode

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden

Mehr

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen Klassenvariablen Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit aller Studentenobjekte.

Mehr

Java Reflection. Andreas Lochbihler. 15. Mai Lehrstuhl Programmierparadigmen Universität Karlsruhe

Java Reflection. Andreas Lochbihler. 15. Mai Lehrstuhl Programmierparadigmen Universität Karlsruhe Java Reflection Andreas Lochbihler Lehrstuhl Programmierparadigmen Universität Karlsruhe 15. Mai 2008 Was ist Reflection? Ein Paket (package) von Interfaces und Klassen, die dem Programm zur Laufzeit Zugriff

Mehr

Release Notes SAPERION Version 7.1 SP 6

Release Notes SAPERION Version 7.1 SP 6 Release Notes SAPERION Version 7.1 SP 6 Copyright 016 Lexmark. All rights reserved. Lexmark is a trademark of Lexmark International, Inc., registered in the U.S. and/or other countries. All other trademarks

Mehr

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7 1 Data Definition Language (DDL)... 2 1.1 Tabellen erstellen... 2 1.1.1 Datentyp...... 2 1.1.2 Zusätze.... 2 1.2 Tabellen löschen... 2 1.3 Tabellen ändern (Spalten hinzufügen)... 2 1.4 Tabellen ändern

Mehr

.NET Networking 1. Proseminar Objektorientiertes Programmieren mit.net und C# Matthias Jaros. Institut für Informatik Software & Systems Engineering

.NET Networking 1. Proseminar Objektorientiertes Programmieren mit.net und C# Matthias Jaros. Institut für Informatik Software & Systems Engineering .NET Networking 1 Proseminar Objektorientiertes Programmieren mit.net und C# Matthias Jaros Institut für Informatik Software & Systems Engineering Agenda Motivation Protokolle Sockets Anwendung in.net

Mehr

PL/SQL-Web-Services (Teil I)

PL/SQL-Web-Services (Teil I) Best Practise Integrationstools PL/SQL-Web-Services (Teil I) Autor: Markus Fiegler, ORDIX AG, Paderborn Web-Services spielen in der heutigen Software- Architektur eine immer wichtigere Rolle. Ihr großer

Mehr

Dezentrale Kontrolle: Aktive Objekte. Aktive Objekte Die Klasse AnimatorThread Aktivierung Objekte beobachten Die Java-Klasse Thread

Dezentrale Kontrolle: Aktive Objekte. Aktive Objekte Die Klasse AnimatorThread Aktivierung Objekte beobachten Die Java-Klasse Thread Dezentrale Kontrolle: Aktive Objekte Aktive Objekte Die Klasse AnimatorThread Aktivierung Objekte beobachten Die Java-Klasse Thread Passive Objekte Bieten Dienste auf Abruf an: - eine Zahl von der Konsole

Mehr

Inhaltsverzeichnis. Vorwort Kapitel 1 Einleitung... 15

Inhaltsverzeichnis. Vorwort Kapitel 1 Einleitung... 15 Vorwort..................................................... 13 Kapitel 1 Einleitung.......................................... 15 Kapitel 2 SQL der Standard relationaler Datenbanken... 19 2.1 Die Geschichte................................

Mehr

JMS Java Message Service

JMS Java Message Service JMS Java Message Service TK3 WS02/03 Dipl.-Ing. Erwin Aitenbichler Abt. Telekooperation TU Darmstadt 1 JMS: Java Message Service Messaging Lose gekoppelte verteilte Kommunikation RMI: Eng gekoppelt Sender

Mehr

Scala: Klassen, Methoden und Objekte. von Simon Lerch

Scala: Klassen, Methoden und Objekte. von Simon Lerch Scala: Klassen, Methoden und Objekte von Simon Lerch Überblick Methoden Klassen Objekte Basis Typen Prefixes Java's == vs. Scala's == Assoziativität von Operatoren Rich Wrapper 30.03.10 Klassen, Methoden

Mehr

Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore.

Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore. Hochschule Harz Versuch: fcopy Mit Java FB Automatisierung und Informatik Betriebssysteme Thema: Kopieren einer Datei unter der Kontrolle von Semaphoren Versuchsziele Konzepte der parallelen Programmierung

Mehr

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen

Mehr

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13 Auf einen Blick Vorwort 13 Teil 1 Vorbereitung Kapitel 1 Einleitung 17 Kapitel 2 SQL - der Standard relationaler Datenbanken 21 Kapitel 3 Die Beispieldatenbanken 39 Teil 2 Abfrage und Bearbeitung Kapitel

Mehr

Rückblick Themen Erste GUI-Anwendung Praktikum. Rückblick Themen Erste GUI-Anwendung Praktikum. Rückblick Themen Erste GUI-Anwendung Praktikum

Rückblick Themen Erste GUI-Anwendung Praktikum. Rückblick Themen Erste GUI-Anwendung Praktikum. Rückblick Themen Erste GUI-Anwendung Praktikum Programmieren I Martin Schultheiß Hochschule Darmstadt Sommersemester 2012 1 / 19 Rückblick Themen Erste GUI-Anwendung Praktikum 2 / 19 Inhalt von Teil 1 Algorithmen Elementare Datentypen Operatoren Bedingte

Mehr

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

ISBN Bibliografische Information Der Deutschen Bibliothek

ISBN Bibliografische Information Der Deutschen Bibliothek Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über

Mehr

1 Fehler-Objekte: Werfen, Fangen, Behandeln

1 Fehler-Objekte: Werfen, Fangen, Behandeln 1 Fehler-Objekte: Werfen, Fangen, Behandeln Tritt während der Programm-Ausführung ein Fehler auf, wird die normale Programm-ausführung abgebrochen und ein Fehler-Objekt erzeugt (geworfen). Die Klasse Throwable

Mehr

Hochschule Darmstadt Fachbereich Informatik

Hochschule Darmstadt Fachbereich Informatik Hochschule Darmstadt Fachbereich Informatik Entwicklung webbasierter Anwendungen Praktikumsaufgaben 1 5. & 6. Übung: Zielsetzung und allgemeine Hinweise Zielsetzung Sie sollen die Datenbankanbindung mit

Mehr

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH 1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH Die Umgebungsvariable CLASSPATH kann im Hamster-Simulator sowohl für Compiler als auch für die Ausführung des Hamster-Programms gesetzt werden: Hierdurch

Mehr

Einführung in SOA

<Insert Picture Here> Einführung in SOA Einführung in SOA Markus Lohn Senior Principal Consultant SOA? - Ideen Selling Oracle To All SAP On ABAP Increasing Sales Of Applications 3 Agenda Motivation SOA-Definition SOA-Konzepte

Mehr

Inhaltsverzeichnis. Fundamente 9. Lokale Datenbanken 247

Inhaltsverzeichnis. Fundamente 9. Lokale Datenbanken 247 DATENBANKEN MIT DELPHI Herausgegeben von der Redaktion Computer & Literatur Verlag GmbH Inhaltsverzeichnis Fundamente 9 1 Die Grundlagen von Datenbanken 11 1.1 Das Speichern von Daten 14 1.2 Datenbankmodellierung

Mehr

Betriebssysteme G: Parallele Prozesse (Teil A: Grundlagen)

Betriebssysteme G: Parallele Prozesse (Teil A: Grundlagen) Betriebssysteme G: Parallele Prozesse (Teil A: Grundlagen) 1 Prozesse Bei Betriebssystemen stoßen wir des öfteren auf den Begriff Prozess als wahrscheinlich am häufigsten verwendeter und am unklarsten

Mehr

In diesem Anschnitt geht es um die SQL Anweisungen, mit denen ich den Zugriff auf das Datenbankschema steuern kann.

In diesem Anschnitt geht es um die SQL Anweisungen, mit denen ich den Zugriff auf das Datenbankschema steuern kann. In diesem Anschnitt geht es um die SQL Anweisungen, mit denen ich den Zugriff auf das Datenbankschema steuern kann. All diese Befehle werden unter dem Begriff SQL DLC Data Control Language zusammengefasst.

Mehr

Whitepaper. Produkt: combit Relationship Manager. HowTo: Microsoft SQL Server Datenbank verschlüsseln. combit GmbH Untere Laube Konstanz

Whitepaper. Produkt: combit Relationship Manager. HowTo: Microsoft SQL Server Datenbank verschlüsseln. combit GmbH Untere Laube Konstanz combit GmbH Untere Laube 30 78462 Konstanz Whitepaper Produkt: combit Relationship Manager HowTo: Microsoft SQL Server Datenbank verschlüsseln HowTo: Microsoft SQL Server Datenbank verschlüsseln - 2 -

Mehr

Aufbau einer Datenbasis im DBMS SYBASE ASE

Aufbau einer Datenbasis im DBMS SYBASE ASE Hochschule für Technik und Wirtschaft Fakultät Informatik / Mathematik Prof. Dr. G. Gräfe / Prof. Dr. U. Wloka Lehrveranstaltung "Erweiterte Datenbanktechnologien / Medienarchive Aufgabenstellungen für

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 39 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 39 1 Überblick:

Mehr

Th. Letschert OOP 2 1. Vererbung I : Subklasse und Subtyp

Th. Letschert OOP 2 1. Vererbung I : Subklasse und Subtyp Th. Letschert OOP 2 1. Vererbung I : Subklasse und Subtyp Th. Letschert, FH Giessen-Friedberg Th. Letschert OOP 2 Vererbung (Inhertitance) I Wiederverwendung von Klassendefinitionen Erweiterung von Objekt-Konstruktionen

Mehr

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r 1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen

Mehr

Programmieren lernen in ASP.NET mit C#

Programmieren lernen in ASP.NET mit C# Programmieren lernen in ASP.NET mit C# von Patrick A. Lorenz, Christoph A. Müller 1. Auflage Hanser München 2003 Verlag C.H. Beck im Internet: www.beck.de ISBN 978 3 446 22311 0 Zu Leseprobe schnell und

Mehr

Objektserialisierung

Objektserialisierung Objektserialisierung SEP 170 Serialisierung von Objekten Umwandlung des Objektzustandes in einen Strom von Bytes, aus dem eine Kopie des Objekts zurückgelesen werden kann. Serialisierung in Java einfacher

Mehr

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java Standardisierung durch die ECMA und ISO Short Introduction to C# C# (C

Mehr

Objektorientierte Datenbanken

Objektorientierte Datenbanken OODB 3 Slide 1 Objektorientierte Datenbanken Vorlesung 3 Sebastian Iwanowski FH Wedel OODB 3 Slide 2 JDO: 1. Teil Entstehungsgeschichte und Ziele von JDO Überblick über den Leistungsumfang von JDO JDO

Mehr

Datenbanken Datenbanken 1 Belegnummer Belegnummer

Datenbanken Datenbanken 1 Belegnummer Belegnummer Datenbanken Datenbanken 1 Belegnummer 30.7302 Belegnummer 30.7312 Blockkurs 31.08. 11.09.2015 Wintersemester 2015/16 (Bachelor) Materialien zur Vorlesung Michael Roth Inge Hochschule Darmstadt Fachbereich

Mehr

From Vision to Reality -

From Vision to Reality - From Vision to Reality - Methoden und Arbeitsweisen des Sun Vision Councils Tom Groth Chief Visioneer Sun Microsystems,,Der pragmatische Ansatz die Zukunft zuerkennen, ist diese zu gestalten. DiesenAnspruch

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 16 Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 16 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen

Mehr

Datenbanken (Übung 12)

Datenbanken (Übung 12) Datenbanken (Übung 12) Prof. Dr.-Ing. Norbert Fuhr Dipl.-Inform. Thomas Beckers (tbeckers@is.inf.uni-due.de) Universität Duisburg-Essen Fachgebiet Informationssysteme 1. 2. Februar 2012 Dipl.-Inform. Thomas

Mehr

Erste Schritte der Programmierung in C

Erste Schritte der Programmierung in C Erste Schritte der Programmierung in C C versus C++ Anatomie von C-Programmen für AVR- Mikrocontroller Unterschiede zwischen C++ und C 1 Grundlegende Unterschiede File-Extensions (Header und Quellcode)

Mehr

DATENBANKEN MIT DELPHI. Herausgegeben von der Redaktion. Toolbox. Computer & Literatur Verlag GmbH

DATENBANKEN MIT DELPHI. Herausgegeben von der Redaktion. Toolbox. Computer & Literatur Verlag GmbH DATENBANKEN MIT DELPHI 11 Herausgegeben von der Redaktion Toolbox ИЗ Computer & Literatur Verlag GmbH Inhaltsverzeichnis Fundamente 9 1 Die Grundlagen von Datenbanken 11 1.1 Das Speichern von Daten 15

Mehr

JSP mit Tomcat. jetzt lerne ich. Der einfache Einstieg ins dynamische Webpublishing mit JavaServer Pages. Markt+Technik

JSP mit Tomcat. jetzt lerne ich. Der einfache Einstieg ins dynamische Webpublishing mit JavaServer Pages. Markt+Technik jetzt lerne ich JSP mit Tomcat Der einfache Einstieg ins dynamische Webpublishing mit JavaServer Pages MICHAEL SEEBOERGER-WEICHSELBAUM Markt+Technik Vorwort Einleitung 1 1.1 1.2 1.3 1.4 1.5 1.5.1 1.5.2

Mehr

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 1 / 11

Mehr

Web-Services mit Go. Sebastian tokkee Harl OpenRheinRuhr 07. November 2015 Oberhausen

Web-Services mit Go. Sebastian tokkee Harl OpenRheinRuhr 07. November 2015 Oberhausen Web-Services mit Go Sebastian tokkee Harl OpenRheinRuhr 07. November 2015 Oberhausen Überblick Was ist Go? Go is an open source programming language that makes it easy to build simple,

Mehr

MySQL, Java und einiges mehr

MySQL, Java und einiges mehr MySQL, Java und einiges mehr Client Der Browser Firefox Chrome Safari Internet Explorer URL http://localhost:8080/html/index.html Internet Die darzustellende Webseite HTML Server Apache Tomcat Jetty

Mehr

Prof. Dr. Uwe Schmidt. 21.August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (BInf 211, BTInf 211, BMInf 211, BWInf 211)

Prof. Dr. Uwe Schmidt. 21.August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (BInf 211, BTInf 211, BMInf 211, BWInf 211) Prof. Dr. Uwe Schmidt 21.August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (BInf 211, BTInf 211, BMInf 211, BWInf 211) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen

Mehr

1. Einführung, Problemstellung und Überblick Rechnernetze

1. Einführung, Problemstellung und Überblick Rechnernetze Inhaltsverzeichnis 1. Einführung, Problemstellung und Überblick 1 1.1 Einführung 1 1.2 Allgemeine Problemstellungen 5 1.2.1 Problemstellung bei Dezentralisierung 5 1.2.2 Problemstellung bei Integration

Mehr