Steffen Heinzl Markus Mathes Middleware in Java Leitfaden zum Entwurf verteilter Anwendungen - Implementierung von verteilten Systemen über JMS - Verteilte Objekte über RMI und CORBA Mit 50 Abbildungen vieweg
Inhaltsverzeichnis Kapitel 1: Architektur verteilter Systeme 1 1.1 Einführung und Begriffsbildung 1 1.2 Entstehung verteilter Systeme 3 1.3 Struktur verteilter Systeme ~ 6 1.4 Zerlegung verteilter Anwendungen 8 1.5 Transparenz in verteilten Systemen 9 1.6 Aufgaben zur Theorie verteilter Systeme 11 Kapitel 2: Nebenläufigkeit in Java 13 2.1 Definition 13 2.2 User-level Threads und kernel-level Threads 14 2.3 Threads auf Hardwareebene 15 2.4 Prozess- und Thread-Zustände 15 2.4.1 Prozesszustände 16 2.4.2 Thread-Zustände allgemein 17 2.4.3 Java Threads 18 2.5 Abbildung von Java Threads auf POSIX Threads 20 2.6 Scheduling von Threads unter Solaris 9 22 2.6.1 Thread-Bibliotheken 22 2.6.2 Erzeugung von Lightweight Processes 24 2.7 Verwendung von Java Threads 24 2.7.1 Threads starten 24 2.7.2 Threads beenden 29 2.7.3 Auf Threads warten 30 2.8 Abfrage von Thread-Informationen 31 2.8.1 Eigenschaften laufender Threads abfragen 31 2.8.2 Speicherbelegung 33 2.8.3 Systemarchitektur und Betriebssystem 34 2.9 Aufgaben zur Nebenläufigkeit in Java 34 Kapitel 3: Synchronisationsmechanismen 37 3.1 Korrektheit eines parallelen Programms 37 3.1.1 Sicherheit 37 3.1.2 Lebendigkeit (Liveness) 43
XVI Inhaltsverzeichnis 3.2 Mutual exclusion...46 3.2.1 Deaktivierung von Interrupts 46 3.2.2 test_and_set und test_and_clear, 48 3-3 Semaphore 51 3.3-1 Operationen PO und VO?... 51 3.3.2 Fairness 52 3.3.3 Semaphore und Fairness in Java 54 3-3-4 Wechselseitiger Ausschluss durch Semaphoren 56 3.4 Monitore 57 3-4.1 Signalisierungsmechanismen 58 3.4.2 Nested Monitor Calls 59 3.4.3 Monitore in Java 59 3-4.4 Geschachtelte Monitoraufrufe in Java 61 3-5 Mächtigkeit von Synchronisationsmitteln 63 3-5-1 Semaphoreimplementierung durch Monitore 63 3-5-2 Monitorimplementierung durch Semaphore 64 3-5-3 Mächtigkeitsübersicht 64 3-6 Locks in Java 65 3-6.1 Das Interface Lock 65 3-6.2 Bedingungsvariablen 66 3-6.3 Beispiel: Die Klasse ReentrantLock 67 3-7 Aufgaben zur Synchronisation 69 Kapitel 4: Design von Client/Server-Software 71 4.1 Das Client/Server-Modell 71 4.1.1 Entwurf von Clients 73 4.1.2 Entwurf von Servern 75 4.2 Implementierung des Client/Server-Modells über Sockets 79 4.2.1 Übersicht der Socket-Primitive 80 4.2.2 Die Socket-API unter Java 83 4.3 Fallbeispiele 87 4.3.1 DAYTIME 87 4.3.2 ECHO 92 4.3.3 FILE 98 4.4 Aufgaben zu Client/Server-Software 110 Kapitel 5: Serialisierung 113 5.1 Serialisierungsprozess 114 5.1.1 Serialisierbarkeitsbedingungen 114 5.1.2 Repräsentation der Elemente 118
Inhaltsverzeichnis XVII 5.1.3 Aufbau des Streams 119 5.1.4 Beispiel-Stream 130 5.2 Deserialisierungsprozess 132 5.3 Fallbeispiel: DAYTIME-Server 133 5.4 Nachrichtenkonzept 135 5.4.1 Message-ID 136 5.4.2 Reflection-API 142 5.5 Erweiterung der Standardserialisierung 143 5.6 Substitution von Objekten 148 5.7 Beschleunigung der Serialisierung 152 5.8 Versionsverwaltung 155 5-9 Aufgaben zu Serialisierung 158 Kapitel 6: Verteilte Objekte durch RMI l6l 6.1 Struktur einer RMI-Anwendung 162 6.2 Ablauf eines entfernten Methodenaufrufs 163 6.3 Parameterübergabe und das RMI Wire-Protocol 165 6.4 Werkzeuge 168 6.5 Fallbeispiel: Entwicklung eines Multiservice-Servers 170 6.5.1 Implementierung einer Dienstauskunft 170 6.5-2 Definition der Schnittstellen entfernter Objekte 172 6.5-3 Implementierung der Remote-Interfaces 174 6.5-4 Implementierung des Multiservice-Servers 179 6.5.5 Entwicklung der RMI-Clients 189 6.6 Aufgaben zum entfernten Methodenaufruf 194 Kapitel 7: Einführung in CORBA 197 7.1 Kommunikation in CORBA 198 7.2 Interface Definition Language (IDL) 200 7.3 ORB Services 202 7.3-1 Namensdienst 204 7.4 Vor- und Nachteile von CORBA 209 7.5 Aufgaben zu CORBA 210
XVIII Inhaltsverzeichnis Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS 211 8.1 Aufbau und Struktur einer JMS-Anwendung 214 8.2 P2P- und Pub/Sub-Kommunikation 215 8.3 Das Paket javax.jms 216 8.3-1 Verbindungsfabriken 216 8.3-2 Verbindungen 217 8.3-3 Sitzungen 218 8.3-4 Produzenten und Konsumenten 218 8.3-5 Nachrichten 220 8.3-6 Nachrichtenziele 223 8.3-7 Ausnahmen 223 8.4 Fallbeispiele 225 8.4.1 Metadaten des JMS-Providers erfragen 225 8.4.2 Nachrichten in einer Warteschlange zählen 228 8.4.3 ECHO-Dienst mit P2P 231 8.4.4 DAYTIME-Dienst mit Pub/Sub 238 8.5 Aufgaben zu JMS 244 Anhang 247 Anhang A: Die Methode printstreamo 247 Anhang B: Das Reflection-Konzept von Java 248 Anhang C: Entwicklung von Java bis zur Version 5 258 Literaturverzeichnis 271 Sachwortverzeichnis 277