Verteilte Anwendungen mit Java Verteilte Verteilte AAnnwweenndduunnggeenn mmiitt JJaavvaa EEnntteerrpprriissee--AArrcchhiitteekkttuurreenn iimm WWeebb mmiitt CCOORRBBAA,, X XMMLL//SSOOAAPP,, JJSSPP,, ((EE))JJBB uunndd JJDDBBCC TToorrsstteenn LLaannggnneerr new technology Markt+Technik Verlag Die Deutsche Bibliothek – CIP-Einheitsaufnahme Ein Titeldatensatz für diese Publikation ist bei Der Deutschen Bibliothek erhältlich. Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig. Fast alle Hardware- und Softwarebezeichnungen, die in diesem Buch erwähnt werden, sind gleichzeitig auch eingetragene Warenzeichen oder sollten als solche betrachtet werden. Umwelthinweis: Dieses Buch wurde auf chlorfrei gebleichtem Papier gedruckt. Die Einschrumpffolie – zum Schutz vor Verschmutzung – ist aus umweltverträglichem und recyclingfähigem PE-Material. 10 9 8 7 6 5 4 3 2 1 05 04 03 02 ISBN 3-8272-6296-8 © 2002 by Markt+Technik Verlag, ein Imprint der Pearson Education Deutschland GmbH, Martin-Kollar-Straße 10–12, D 81829 München/Germany Alle Rechte vorbehalten Fachlektorat: Wolfgang Dehnhardt, Stuttgart Lektorat: Melanie Kasberger, [email protected] Orthografische Korrektur: Christel Metke, Köln Herstellung: Ulrike Hempel, [email protected] Einbandgestaltung: adesso 21, Thomas Arlt, München Satz: reemers publishing services gmbh, Krefeld (www.reemers.de) Druck und Verarbeitung: Kösel, Kempten (www.KoeselBuch.de) Printed in Germany Inhaltsverzeichnis Kapitel 1 Prolog 9 1.1 Allgemeines 10 1.2 An wen richtet sich dieses Buch? 11 Kapitel 2 Auffrischen einiger Vorkenntnisse 13 2.1 Grundlagen verteilter Systeme 14 2.2 Der Aufbau verteilter, webbasierter Anwendungen 15 2.3 Entwicklungstechnologien 17 2.4 Vorkenntnisse zur Objektorientierung 18 2.4.1 Beispiel 1: Identitätskonstruktion in grauer Vorzeit 18 2.4.2 Beispiel 2: WindowsDrucker 20 2.5 Objektorientierte Programmierung mit Java – Wiederholung 22 2.5.1 Schnittstellen und Vererbungsmechanismen 23 2.5.2 Quasi-parallele Ausführung mittels Threads 26 2.5.3 Ausführung der beiden Varianten 28 Kapitel 3 Socket-Kommunikation zwischen verteilten Anwendungen 31 3.1 Die Kommunikation über TCP/IP 32 3.2 Beispiel 1: Ein einfacher Server 32 3.2.1 Realisierung des Clients 33 3.2.2 Realisierung des Servers 35 3.2.3 Klassendokumentationen 39 3.2.4 Der Server läuft 40 3.3 Ein wiederverwendbares Framework 41 3.3.1 Erstellung der Elternklasse für einen unbegrenzten Server 41 3.3.2 Die Auslagerung der Kommunikation in einer eigenen Klasse 44 3.4 Beispiel 2: Verwendung des Frameworks 45 3.4.1 Der »Portier« 46 3.4.2 Einbettung der Kommunikationsstruktur 48 3.5 Beispiel 3: Eine komplexere Kommunikationsstruktur implementieren 52 3.5.1 Realisierung des Clients 52 6 Inhaltsverzeichnis 3.5.2 Realisierung des Servers 55 3.6 Erweiterung des Frameworks 60 3.6.1 Variante 1 61 3.6.2 Variante 2 64 3.6.3 Beispiel 4: Einen skalierbaren Server implementieren 66 3.7 Klassen dynamisch über das Netz laden 69 3.7.1 Allgemeine Vorgehensweise 69 3.7.2 Wozu das Ganze? 74 3.7.3 Ein Socket-basierter Klassenserver 75 Kapitel 4 Middleware als die Kommunikationsalternative 85 4.1 Eine Vorüberlegung 86 4.1.1 Ein kurzer Exkurs: Methodenaufrufe einmal anders 87 4.1.2 Aufbau einer geeigneten Client/Server-Architektur 90 4.2 Middleware heißt die Alternative! 101 4.2.1 Ein erster Vergleich zwischen RPC und Middleware 102 4.2.2 Ein Broker übernimmt die Kommunikation! 103 4.2.3 Die Interface Definition Language (IDL) 105 4.2.4 Verwirrung pur: Proxies, Stubs und Skeletons 107 4.3 Remote Method Invocation (RMI) 107 4.3.1 Hintergründe 108 4.3.2 Erzeugen einer RMI-Architektur in nur fünf Schritten 109 4.3.3 Ausführen des RMI-Beispiels 116 4.3.4 Klassenreferenzen 117 4.3.5 Code-Mobilität 119 4.4 CORBA 120 4.4.1 Was ist CORBA? 120 4.4.2 IDL: Eine Sprache zur Definition von Interfaces 122 4.4.3 Erzeugen einer CORBA-Architektur in fünf Schritten 131 4.5 Interoperabilität zwischen CORBA- und RMI-Systemen 146 4.5.1 JRMP 146 4.5.2 IIOP 147 4.5.3 JRMP oder IIOP? 147 4.5.4 Ein praktisches Anwendungsbeispiel 148 4.5.5 Die Programmierung der Beispielsysteme 149 4.5.6 Die Ausführung der Beispielsysteme 165 4.6 CORBA: Ansichten und Meinungen 167 Inhaltsverzeichnis 7 4.7 Verwendete Tools 169 4.7.1 Broker 169 4.7.2 Kompilierungs- und Übersetzungstools 170 4.8 JNDI: Namens- und Verzeichnisdienste 171 4.8.1 Namenskontexte 172 4.9 Sicherheitsberechtigungen in Java: Java Security 175 4.9.1 Berechtigungen (Permissions) 176 4.9.2 Berechtigungstypen 176 4.9.3 Policy-Dateien erzeugen 181 4.10 Zusammenfassung 187 Kapitel 5 Datenbehandlung mit Java 189 5.1 JDBC 190 5.1.1 Grundlagen 190 5.1.2 Eine Datenbankanbindung mit Java erstellen 195 5.1.3 Objekte und Relationen – Widerspruch oder Symbiose? 235 5.2 Datenbehandlung mit XML 249 5.2.1 Die Geschichte von XML 250 5.2.2 Grundlagen von XML 251 5.2.3 Parsen von XML-Dokumenten mit Java 260 5.2.4 Transformation von XML-Dokumenten mit XSLT 296 5.3 Ein Brückenschlag: Von der Datenbank zum XML-Dokument und weiter zu anderen Medien 304 5.3.1 buch.kapitel5.xml.vorlagen.DB2XML_Konverter 304 5.3.2 buch.kapitel5.xslt.vorlagen.Transformer 310 5.4 Zusammenfassung 318 Kapitel 6 Basistechnologien für webbasierte Anwendungen 319 6.1 Informationsübermittlung an die CGI-Komponente 322 6.2 Servlets 325 6.2.1 Die Entwickung eines Servlets 326 6.2.2 Praktische Anwendungsbeispiele 327 6.2.3 Weitere Servlet-Techniken 342 6.2.4 Klassen-Dokumentationen 350 6.3 JSP 355 6.3.1 Das Prinzip der Entwicklung von JavaServer Pages 356 6.3.2 Erweiterte Sprachkonstrukte einer JSP 357 6.3.3 Praktische Anwendungsbeispiele 360 8 Inhaltsverzeichnis 6.4 JSP oder Servlet? 367 6.5 Session-Management 367 6.5.1 Die Idee der »Session« 367 6.5.2 Alternative Ansätze zum Ablegen von Session-Informationen 368 6.5.3 Klassen-Dokumentationen 378 6.6 Zusammenfassung 380 Kapitel 7 Weiterführende Konzepte webbasierter Anwendungen 381 7.1 Exkurs: JavaBeans 382 7.1.1 Was sind JavaBeans? 382 7.1.2 Eine Beispiel-Bean 384 7.1.3 Eine Umgebung für die Beispiel-Bean 387 7.2 SOAP 389 7.2.1 Was ist SOAP? 389 7.2.2 Wissenswertes über SOAP 390 7.2.3 Webserverkonfiguration 391 7.2.4 Praktische Beispiele 392 7.2.5 Zusammenfassung 404 7.3 Enterprise JavaBeans 405 7.3.1 Was sind Enterprise JavaBeans? 405 7.3.2 Vorgehen bei der EJB-Entwicklung am Beispiel 408 7.3.3 Zusammenfassung 419 Kapitel 8 Endanwendung: Der Directbroker »comsofort« 421 8.1 Allgemeiner Aufbau des Systems 422 8.2 Die Entwicklung der einzelnen Teilsysteme 423 8.2.1 Das »XEVA-Börsensystem« 423 8.2.2 Das »comsofort«-Kundensystem 426 8.3 Zusammenfassung 448 Stichwortverzeichnis 449 Kapitel 1 Prolog 1.1 Allgemeines 10 1.2 An wen richtet sich dieses Buch? 11 10 Allgemeines 1.1 Allgemeines Statistisch gesehen ist dieser Abschnitt das am häufigsten überschlagene Kapitel vieler IT-Bücher. Viele Leser (zu denen ich mich auch zähle) wollen »direkt ans Eingemachte« vordringen, also zu den Kapiteln, in denen irgendwelche Bildchen oder Quellcode vorkommen. Aber genau diese Leser verpassen nun den Hinter- grund für die Entstehung dieses Buches. Abbildung 1.1: Das Buch soll einen »roten Faden« durch die unterschiedlichen Technologien bieten Als Dozent habe ich schon unzählige Vorträge, Seminare und Schulungen abge- halten, die sich um die in Abbildung 1.1 gezeigten Themen drehten. Dabei habe ich stets festgestellt, dass die Teilnehmer sich zwar auf ein oder zwei Themenge- biete spezialisiert haben, ihnen aber meist die »globale« Sichtweise auf das zur Verfügung stehende Technologiespektrum fehlte. Bei der realen Projektarbeit in größeren Unternehmen lassen sich nur selten Allround-Genies finden, die sich 100-prozentig mit allen Technologien auskennen. Wenn aber Projekte anstehen, die z.B. in den B2B1-Bereich einzuordnen sind, dann muss zur Lösung der gestellten Aufgabe ein Mix verschiedener Technologien angewendet werden. Wenn das System der Firma A plötzlich mit dem System der Firma B zusammen- 1 Business-to-Business