© 2008 AGI-Information Management Consultants May be used for personal purporses only or by libraries associated to dandelon.com network. Oracle und Java Datenbankentwicklung für E-Commerce-Anwendungen Elio Bonazzf Glenn Stokol Deutsche Übersetz G&U Technische' Dokumentation iew technolo :+Technik Inhaltsverzeichnis Einführung und Überblick Der Aufbau dieses Buchs Herunterladen von Oracle-Software Die Listings dieses Buches Anmerkung zu den Oracle-Versionen Kapitel 1 Einführung in das objektrelationale Datenbankdesign und die Architektur von Oracle 1.1 1.1.1 1.1.2 1.1.3 1.2 1.3 1.4 1.5 1.6 1.7 1.7.1 1.7.2 1.7.3 1.8 1.8.1 1.9 1.9.1 1.9.2 1.9.3 1.9.4 Das relationale Modell und das Design für eine Online-Buchhandlung Die Notation für Entitäten Die Notation für Attribute Die Notation für Beziehungen Die Bedeutung von Datenbankmodell und-design Die Transformation eines ERD in ein Tabellendesign Transformation von über- und untergeordneten Entitätstypen Das allgemeine Design von untergeordneten Typen Tabellen-und Systemdesign Das Objektmodell und das Design für die Buchhandlung Die Notation für Klassen Die Notation für Verknüpfungen: Assoziationen und Aggregationen Die Notation für Vererbungshierarchien Abbilden eines Klassenmodells auf eine Oracle-Datenbank Die Objekttypen, Objekttabellen und Objektsichten von Oracle Regeln für die Abbildung eines Objektmodells auf eine relationale Implementierung Objektbezeichner und eindeutige Bezeichner im Vergleich Abbilden von Attributen auf Spalten Abbilden von Klassen auf Tabellen Abbilden von Vererbungshierarchien 17 18 20 20 20 21 22 23 24 24 27 28 29 32 33 34 36 37 39 40 40 43 43 44 44 48 Inhaltsverzeichnis 1.9.5 1.9.6 1.9.7 1.9.8 1.10 Kapitel 2 Abbilden von Assoziationen Abbilden von Aggregationen Abbilden des Klassenmodells auf relationale Oracle-Tabellen Abbilden des Klassenmodells auf Objekttabellen von Oracle Zusammenfassung DDL-Anweisungen 2.1 2.2 2.3 2.4 2.5 2.6 2.6.1 2.6.2 2.7 2.7.1 2.7.2 2.8 2.8.1 2.8.2 2.8.3 2.9 2.9.1 2.9.2 2.9.3 2.10 2.11 2.11.1 2.11.2 2.11.3 2.11.4 2.11.5 2.12 2.12.1 2.12.2 2.12.3 Überblick über die Anweisungen von SQL Eine kurze Einführung in Oracle SQL*Plus Die allgemeine Syntax der DDL Namensregeln für Datenbankstrukturen in Oracle Integrierte Datentypen von Oracle8 Relationale Tabellen Erstellen einer Tabelle Datenbankeinschränkungen und Integritätsregeln Eine alternative Syntax für die Anweisung CREATE TABLE Verändern einer Tabellenstruktur Entfernen einer Tabelle und ihrer Daten Relationale Sichten Erstellen einer Sicht Verändern einer Sicht Löschen einer Sicht Sequenzen Erstellen einer Sequenz Verändern einer Sequenz Löschen einer Sequenz Synonyme Objekttypen Erstellen eines Objekttyps MAP und ORDER Verwenden von Objekttypen Verändern von Objekttypen Löschen von Objekttypen Objekttabellen Erstellen von Objekttabellen Verändern von Objekttabellen Löschen von Objekttabellen 51 57 58 60 64 65 66 68 71 71 71 72 73 74 77 78 82 83 83 84 84 85 85 86 86 86 88 89 97 100 101 101 103 103 106 107 Inhaltsverzeichnis 2.13 2.13.1 2.13.2 2.13.3 2.13.4 2.13.5 2.13.6 2.14 2.14.1 2.14.2 2.14.3 2.15 Kapitel 3 Objektsichten Auswählen von Objektbezeichnern Erstellen von Objektsichten Ein Beispiel für eine Objektsicht Verändern von Objektsichten Löschen von Objektsichten Erstellen von Collections Sicherheit: Anweisungen für die Zugriffssteuerung Die Anweisung GRANT für Systemberechtigungen Die Anweisung REVOKE für Systemberechtigungen Objektberechtigungen Zusammenfassung 108 108 109 109 112 113 113 116 117 118 118 120 Abfrageverarbeitung 121 3.1 3.1 .1 3.1 .2 3.2 3.2 .1 3.3 122 123 124 129 130 3.3 .1 3.3 .2 3.3 .3 3.3 .4 3.3 .5 3.3 .6 3.3 .7 3.4 3.4 .1 3.5 3.6 3.7 3.8 3.9 3.9 .1 3.9 .2 SELECT-Anweisungen Aliase für Spalten Berechnungen in SQL-Ausdrücken Zeilenbasierte Funktionen Die Konvertierungsfunktion TO_CHAR Die Klausel WHERE zur Einschränkung der abzurufenden Zeilen Bedingte Abfrageausdrücke Negative Bedingungen Der Operator für den Listenvergleich Der Operator für den Bereichsvergleich Der Operator für den Mustervergleich Der Umgang mit NULL-Weiten Kombinieren mehrerer Bedingungen Operationen zur Verknüpfung von Tabellen Die äußere Verknüpfung Die Klausel ORDER BY Aggregatfunktionen Die Klausel GROUP BY Die Klausel HAVING Unterabfragen Regeln für die Verwendung von Unterabfragen Arten von Unterabfragen 133 133 134 134 135 135 137 138 139 140 143 145 147 151 152 153 156 Inhaltsverzeichnis 3.10 3.10.1 3.10.2 3.10.3 3.10.4 3.11 Kapitel 4 Kapitel 5 Abfragen von Objektstrukturen 158 Abfragen von Objekttabellen und -spalten 158 Nützliche Funktionen für die Objektinstanzen in Objekttabellen 160 Abfragen von Werten verschachtelter Objektinstanzen 163 Abfragen von Collections 165 Zusammenfassung 169 DML-Anweisungen und Transaktionen 171 4.1 4.1.1 4.1.2 4.1.3 4.1.4 4.2 4.2.1 4.2.2 4.2.3 4.2.4 4.3 4.3.1 4.3.2 4.3.3 4.4 4.5 4.5.1 4.6 172 172 177 180 181 183 183 186 188 188 192 194 196 198 199 201 202 208 DML-Anweisungen für relationale Tabellen Die Anweisung INSERT Die Anweisung UPDATE Die Anweisung DELETE Unterabfragen in DML-Anweisungen DML-Anweisungen für Objekttabellen Einfügen von Objektinstanzen Aktualisieren der Attribute von Objektinstanzen Löschen von Objektinstanzen DML-Anweisungen mit Objektverweisen DML-Anweisungen für Collection-Objekte Einfügen von Daten in eine Collection Aktualisieren einer Collection Löschen von Daten aus einer Collection Optimierung der Geschwindigkeit von DML-Anweisungen Transaktionen in Oracle SQL Steuerung und Grenzen von Transaktionen Zusammenfassung Architektur und Optimierung von Oracle 209 5.1 5.1.1 5.1.2 5.1.3 5.1.4 5.2 5.2.1 5.2.2 210 213 217 221 222 223 224 226 Elemente der Architektur Die Oracle-SGA und die Prozesse/Threads im Hintergrund Der Lebenszyklus von Transaktionen Bestandteile der Oracle-SGA SQL-Anweisungen und Bindungsvariablen Leistungsoptimierung Effiziente SQL-Anweisungen Die Abfrageoptimierer von Oracle Inhaltsverzeichnis 5.2.3 5.2.4 5.3 Kapitel 6 228 239 245 Das Internet und Oracle: Sicherheitsaspekte 247 6.1 6.2 6.3 6.4 248 252 255 6.5 6.6 Kapitel 7 Die Analyse von SQL-Anweisungen Durchsuchen des Shared Pool Zusammenfassung Netzwerk-Firewalls Die Sicherheit von Oracle Die entmilitarisierte Zone Verwenden der Sicherheitsfunktionen und Synonyme von Oracle Neue Sicherheitsfunktionen von Oracle Zusammenfassung 257 263 266 Einführung in PL/SQL 267 7.1 7.1.1 7.1.2 7.2 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6 7.2.7 7.3 7.3.1 7.3.2 7.4 7.4.1 7.4.2 7.5 7.5.1 7.5.2 7.6 7.6.1 7.6.2 269 269 272 273 274 275 276 278 280 282 285 288 288 292 296 296 298 302 303 304 308 308 309 Anonyme Blöcke Die Blockstruktur von PL/SQL Ausführen von PL/SQL-Blöcken Variablen und Datentypen von PL/SQL Definitionen von Untertypen Einwertige Datentypen LOB-Datentypen Zusammengesetzte Datentypen Ableiten von PL/SQL-Datentypen aus der Datenbank Verweisdatentypen Literale Bedingte und sequenzielle Steuerelemente IF-Anweisungen Schleifen Verwenden von SQL-Anweisungen in PL/SQL Verwenden von SELECT-Anweisungen in PL/SQL DML-Anweisungen in PL/SQL Cursor Implizite Cursor Explizite Cursor Tabellen und variable Arrays in PL/SQL Verschachtelte Tabellen Index-By-Tabellen 10 Inhaltsverzeichnis 7.6.3 7.6.4 7.7 7.8 Kapitel 8 Variable Arrays Vorteile von verschachtelten Tabellen und variablen Arrays Benutzerdefinierte Typen und Objekttypen in PL/SQL Zusammenfassung 313 315 319 321 Prozeduren, Funktionen, Pakete und Ausnahmen von PL/SQL 323 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.1.5 324 325 325 326 327 8.1.6 8.1.7 8.1.8 8.2 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.5 8.5.1 8.6 8.6.1 8.7 8.7.1 Gespeicherte Prozeduren und Funktionen Erstellen einer Prozedur Aufrufen einer Prozedur Erstellen einer Funktion Aufrufen einer Funktion Ausführen von PL/SQL-Code mit Definer- oder Invoker-Rechten Ersetzen einer Prozedur oder Funktion Angeben von Argumenten Übergeben von Parametern an Prozeduren und Funktionen PL/SQL-Pakete Die Paketspezifikation Der Paketrumpf Aufrufen einer Prozedur oder Funktion in einem Paket Überladen von Prozeduren und Funktionen Erweitern von SQL mithilfe von Paketfunktionen Objekttypen in PL/SQL Deklarieren von Objektvariablen in PL/SQL Erstellen von Objekttypinstanzen in PL/SQL Attribute und Methoden von SQL-Objekten in PL/SQL Die Behandlung von Ausnahmen in PL/SQL Auffangen von Ausnahmen Vordefinierte Ausnahmen Benutzerdefinierte Ausnahmen Allgemeine Vorgehensweise zum Auffangen sämtlicher Ausnahmen Transaktionen in PL/SQL Autonome Transaktionen Java und PL/SQL im Vergleich Das Zusammenspiel von PL/SQL und Java Überlegungen zur Leistung Partitionieren von Client/Server-Anwendungen 328 329 330 335 340 340 341 343 344 354 356 356 358 361 371 371 374 374 378 381 382 384 384 385 385 Inhaltsverzeichnis 8.7.2 8.7.3 8.8 Kapitel 9 Kapitel 10 11 Minimieren von Netzwerkzugriffen Optimieren des Datenzugriffscodes Zusammenfassung 386 386 390 Datenbankzugriff mit JDBC 391 9.1 Einführung in die Architektur von JDBC 9.2 Der Treibermanager und die JDBC-Treiber 9.2.1 Typen von JDBC-Treibern 9.2.2 Die JDBC-Treiber von Oracle 9.2.3 Der JDBC-Treibermanager 9.2.4 Laden eines JDBC-Treibers 9.3 Überblick über die Schnittstellen und Klassen von JDBC 9.4 Verwenden von JDBC-Objekten 9.4.1 Herstellen einer Verbindung mit der Datenbank 9.4.2 Ausführen von SQL-An Weisungen 9.4.3 JDBC und Transaktionen 9.4.4 Verwenden von JDBC in Applets 9.5 Zusammenfassung 393 394 395 395 398 399 400 401 402 409 446 446 449 Erweiterter Datenbankzugriff mit JDBC 451 10.1 10.1.1 10. .2 10. .3 10. .4 10. .5 10. .6 10. .7 10.1.8 10.1.9 10.2 10.2.1 10.2.2 10.2.3 10.2.4 10.3 452 453 454 458 463 505 505 506 517 537 542 542 543 546 556 561 Erweiterungen der JDBC-Treiber von Oracle Verwenden der JDBC-Treibererweiterungen Vorausschauendes Lesen von Zeilen Durchführen von Stapelaktualisierungen Streaming-Datentypen Verwenden von ROWID Aufrufen von anonymen PL/SQL-Blöcken Lesen und Schreiben von Java-Objekten Lesen und Schreiben von Oracle-Objekttypen Lesen und Schreiben von Collections Unterstützung für das Optional Package JDBC 2.0 Scrollbare Resultsets Die JDBC-2.0-Datenquelle Verbindungen mithilfe des JNDI Das Verbindungs-Pooling von JDBC 2.0 Zusammenfassung 12 Kapitel 11 Inhaltsverzeichnis Datenzugriff mit SQLJ: Einbetten von SQL in Java 563 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.2.3 11.3 11.3.1 11.3.2 11.3.3 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.6.3 11.6.4 11.6.5 11.6.6 11.6.7 11.6.8 11.6.9 564 565 566 567 571 571 571 574 578 580 582 584 587 604 604 611 625 626 628 630 636 637 638 639 640 641 641 642 643 Ein Überblick über SQLJ Die Komponenten von SQLJ Anlegen einer SQLJ-Datei Übersetzen der SQLJ-Datei Ausführen der SQLJ-Datei Herstellen einer Verbindung zu einer Datenbank in SQLJ Festlegen des standardmäßigen Verbindungskontexts Erstellen und Verwenden weiterer Verbindungskontexte Ausführungskontexte Ausführen von SQL-Anweisungen mithilfe von SQLJ Verwenden von Hostvariablen DML- und DDL-Anweisungen in SQLJ Abfrage Verarbeitung Verarbeiten der SQL-Objekttypen von Oracle Oracle JPublisher Verwenden der von JPublisher generierten Klassen Verarbeiten von SQL-Collections Erstellen von SQL-Collections und -Tabellen Erstellen von Java-Klassen für SQL-Collections Zugriff auf SQL-Collections aus Java heraus Verwalten von LOB-Datentypen Lesen aus einer LONG-Spalte Schreiben in eine LONG-Spalte Lesen aus einer LONG RAW-Spalte Schreiben in eine LONG RAW-Spalte Lesen aus einer CLOB-Spalte Schreiben in eine CLOB-Spalte Lesen aus einer BLOB-Spalte Schreiben in eine BLOB-Spalte Lesen aus einer LONG-Spalte mit einem UnicodeStream-Objekt 11.6.10 Schreiben in eine LONG-Spalte mit einem UnicodeStream-Objekt 11.6.11 Lesen eines BFILE-Objekts 11.6.12 Schreiben eines BFILE-Objekts 644 645 646 646 Inhaltsverzeichnis Kapitell 2 Kapitel 13 13 11.7 Ausführen von gespeicherten Prozeduren und Funktionen 11.7.1 Aufrufen einer gespeicherten Prozedur 11.7.2 Aufrufen einer gespeicherten Funktion 11.7.3 Argumente von gespeicherten Prozeduren und Funktionen 11.8 Zusammenfassung 647 647 647 648 648 Gespeicherte Java-Prozeduren in Oracle 651 12.1 Ausführen von Java-Code im Kernel von Oracle 12.1.1 Vorteile 12.1.2 Grenzen 12.2 Drei Schritte zur Entwicklung und zur Weitergabe von gespeicherten Prozeduren 12.2.1 Entwickeln von gespeicherten Prozeduren in Java 12.2.2 Laden von Java-Bytecode in Oracle 12.2.3 Veröffentlichen der Java-Klassen in der Datenbank 12.2.4 Automatische Weitergabe mit JDeveloper 12.3 Interaktion zwischen Java und PL/SQL 12.3.1 Aufrufen von PL/SQL aus Java heraus 12.3.2 Aufrufen von Java aus PL/SQL heraus 12.3.3 Der Zugriff auf Resultsets 12.4 PL/SQL und Java: Welches ist das richtige Werkzeug für Ihre Aufgaben? 12.5 Zusammenfassung 652 653 653 654 655 663 667 674 679 679 682 682 684 689 Datenzugriff mithilfe von Java-Servlets und Verbindungs-Pooling 691 13.1 13.2 13.3 13.3.1 13.3.2 13.3.3 13.4 13.5 13.5.1 13.5.2 13.6 694 695 697 698 708 728 749 750 753 757 759 Mehrere Threads, Sitzungszustand und Sicherheit Verbindungs-Pooling Ein Beispiel-Servlet Entwurf der Datenbank Verbindungs-Pooling in Java Die zentralen Servlet-Methoden Vor- und Nachteile von BookServlet Ausführen der Anwendung BookServlet Konfigurieren von Netscape iPlanet Konfigurieren von Apache und JServ Zusammenfassung 14 Kapitel 14 Inhaltsverzeichnis Java Server Pages und Active Server Pages 761 14.1 14.1.1 14.1.2 14.1.3 762 762 763 14.1.4 14.1.5 14.2 14.2.1 14.2.2 14.3 14.4 14.4.1 14.4.2 14.4.3 14.5 Kapitel 15 Kapitel 16 JSP im Überblick JSP-Elemente JSP-Tags Fortgeschrittene JSP-Routinen: Bean-Gültigkeitsbereiche, das Einbinden von Dateien, Umleitung und Tag-Erweiterungen Ein JSP-Beispiel Die JDeveloper-Unterstützung für JSP ASP im Überblick ASP-Elemente Ein ASP-Beispiel JSP und ASP im Vergleich Die Neuerstellung von BookServlet mit JSP Verbindungs-Caching Java-Beans und Java Server Pages Das Servlet Servelmage Zusammenfassung 770 774 785 786 789 791 796 798 798 802 807 812 Zugriff auf Oracle Advanced Queuing mithilfe von Java 813 15.1 15.2 15.3 15.3.1 15.3.2 15.3.3 15.4 814 816 821 824 828 833 843 Warteschlangen für Anwendungen Oracle Advanced Queuing Beispiele für Advanced Queuing Handhaben von Nachrichten mit PL/SQL-Wrappern Handhaben von Nachrichten mit der nativen Java-Schnittstelle Handhaben von Nachrichten mit der JMS-Schnittstelle Zusammenfassung Enterprise JavaBeans: eine Einführung 845 16.1 16.1.1 16.1.2 16.2 16.2.1 16.2.2 16.2.3 16.2.4 16.2.5 847 847 849 850 850 853 854 855 857 Umgebung und Struktur von EJBs Die Enterprise-JavaBean-Umgebung Die Struktur einer Enterprise JavaBean Erstellen einer Enterprise JavaBean Die Bean-Klasse Die Home-Schnittstelle Die Remote-Schnittstelle Weitere Klassen Der Lebenszyklus einer Session-Bean Inhaltsverzeichnis 16.3 16.3.1 16.3.2 16.3.3 16.3.4 16.3.5 16.4 16.4.1 16.4.2 16.5 16.5.1 16.5.2 16.6 Kapitel 17 IS Erstellen einer EJB-Clientanwendung Entwickeln des Clientcodes Schritt 1 und 2: Suchen des Home-Objekts Schritt 3: Erstellen einer Bean-Instanz mithilfe des Home-Objekts Schritt 4: Aufrufen von Bean-Methoden Schritt 5: Entfernen der EJB und Freigeben von Ressourcen Erstellen einer EJB und eines Clients mit JDeveloper Erstellen der Klassen der Enterprise JavaBean Erstellen des Clients mit JDeveloper Ausführen der Enterprise JavaBean Die Installation einer Enterprise JavaBean in Oracle8« Ausführen des Clients der Enterprise JavaBean Zusammenfassung Weitergabe und Verwendung einer Enterprise JavaBean 17.1 17.1.1 17.1.2 17.1.3 17.2 17.2.1 17.2.2 17.2.3 17.3 17.4 17.4.1 17.4.2 17.4.3 17.4.4 17.4.5 17.4.6 17.4.7 17.4.8 Vorbereitungen für die Ausführung der EJB-Dienste von Oracle8/ Installieren von Oracle JServer Einrichten der IIOP-Dienste Speicherverwaltung auf dem Datenbankserver Weitergabe einer EJB mit Befehlszeilenprogrammen Kompilieren des EJB-Codes und Anlegen einer JAR-Datei von EJB Erstellen eines Deployment-Deskriptors Ausführen des Dienstprogramms deployejb Ausführen der Clientanwendung nach der Weitergabe Einrichten von Enterprise JavaBeans für den Umgang mit Transaktionen Verwenden von JDBC in EJB-Methoden Verwenden von SQLJ in EJB-Methoden Der Transaktionsdienst und verteilte Transaktionen Festlegen des Wertes für TransactionAttribute Anwendungsszenarien für EJB-Transaktionen Clientgesteuerte EJB-Transaktionen Containergesteuerte Persistenz Containergesteuerte Transaktionen 859 859 860 863 865 866 866 866 871 872 876 876 878 879 881 881 882 886 888 889 892 895 898 900 901 902 903 909 910 912 917 918 Inhaltsverzeichnis 16 17.4.9 17.4.10 17.5 17.6 17.6.1 17.6.2 17.6.3 17.6.4 17.7 17.8 17.9 Beangesteuerte Persistenz Beangesteuerte Transaktionen Beschränkungen und Grenzen von Oracle8i-EJBs Die EJB-Sicherheit in Oracle8* Steuern des Zugriffs auf veröffentlichte Namen Steuern des Zugriffs auf EJB-Methoden Gewähren der Execute-Berechtigung für EJB-Klassen Gewähren des Zugriffs auf die von der EJB verwendeten Datenbankobjekte Entfernen einer EJB vom Oracle8/-Server Installieren einer Enterprise JavaBean im Oracle Application Server Zusammenfassung Stichwortverzeichnis 933 934 938 939 940 942 944 945 946 947 950 951