Diplomarbeit Java Programmierung mit JDBC Zugriff auf eine OS/390 DB2 Datenbank Stefan Munz April 2003 2 Ich versichere, die Arbeit selbständig verfasst und nur die angegebenen Quellen und Hilfsmittel benutzt zu haben. 3 Danksagung An dieser Stelle möchte ich mich bei allen bedanken, die durch ihre Hilfe und Unterstützung dazu beigetragen haben, dass meine Diplomarbeit in dieser Form entstehen konnte. Besonders danken möchte ich Herr Prof. Dr. rer. nat. Wolfgang Rosenstiel und Herr Prof. Dr.-Ing. Wilhelm G. Spruth, die meine Diplomarbeit betreut haben. Herrn Spruth möchte ich für die Vermittlung der vielen Kontakte danken, ohne die ich die Konfiguration des OS/390 Servers sicher nicht in der vorliegenden Form geschafft hätte. Einige der OS/390 Spezialisten möchte ich besonders hervorheben: Herr Greis und Herr Holliger von der Firma TPS-Data, die mir einen 2 tägigen, arbeitsintensiven Zürichaufenthalt ermöglichten und die grundlegende Konfiguration von Websphere und DB2 vornahmen. Herr Breitenfeld, der mehrfach kritische DB2 und JDBC Einstellungen berichtigt hat. Herr Böhm, der mir bei einem halbtägigen Aufenthalt im IBM Labor in Böblingen mit der Websphere Konfiguration half. Und natürlich Herr Drecker, der immer wieder telefonisch bei Websphere Problemen zur Verfügung stand. 4 Inhaltsverzeichnis 1. Zusammenfassung.......................................................................................................................6 2. Einleitung.....................................................................................................................................8 2.1 Motivation für die Integration von OS/390 Mainframes in das Internet......................................8 2.2 Ziel der Diplomarbeit.............................................................................................................10 2.3 Aufbau der Diplomarbeit........................................................................................................10 3. Funktionsweise von Connectoren............................................................................................12 4. OS/390 Systemumgebung.........................................................................................................14 4.1 OS/390 Hardware..................................................................................................................14 4.2 Zugriff auf den OS/390 Server...............................................................................................15 4.3 OS/390 Software...................................................................................................................15 4.3.1 DB2...............................................................................................................................15 4.3.2 SQL Processor Using File Input (SPUFI)........................................................................15 4.3.3 Unix System Services (USS).........................................................................................16 4.3.4 Websphere....................................................................................................................17 5. Konfiguration der OS/390 Systemumgebung ..........................................................................19 5.1 JDBC Zugriff aus einem Java Programm auf DB2...............................................................19 5.1.1 Konfiguration von DB2 für den JDBC Zugriff aus einem Java Programm.......................20 5.1.1.1 db2jdbc.cursors Datei ............................................................................................20 5.1.1.2 Call Level Interface Konfigurationsdatei.................................................................22 5.1.1.3 .profile Datei..........................................................................................................22 5.1.1.4 GRANT Statement ausführen.................................................................................23 5.1.2 Beispielprogramm von IBM kompilieren und ausführen..................................................23 5.2 JDBC Zugriff aus einem Java Servlet....................................................................................26 5.2.1 Konfiguration von Websphere für den JDBC Zugriff aus einem Java Servlet.................27 5.2.1.1 was.conf Datei.......................................................................................................28 5.2.1.2 Websphere Startskript............................................................................................28 5.2.1.3 httpd.envvars Datei................................................................................................29 6. Entwicklungsumgebung auf der Workstation..........................................................................30 6.1 Eclipse vs. Visual Age for Java..............................................................................................30 6.2 Installation von VisualAge for Java und Eclipse.....................................................................31 6.3 Zugriff von der Entwicklungsumgebung auf eine OS/390 Datenbank.....................................33 6.3.1 DB2 Zugriff mit DB2Connect..........................................................................................34 6.3.2 DB2 Zugriff mit Hit JDBC Treiber...................................................................................35 6.3.3 Test der Installation mit JUnit Tests...............................................................................35 6.4 Programmierung....................................................................................................................37 6.4.1 HelloWorld Java Programm...........................................................................................37 6.4.1.1 Test in der Entwicklungsumgebung........................................................................39 6.4.1.2 Export in die Produktionsumgebung.......................................................................39 6.4.2 HelloWorld Java Servlet................................................................................................43 6.4.2.1 Test in der Entwicklungsumgebung........................................................................43 6.4.2.2 Export in die Produktionsumgebung.......................................................................44 7. Gästebuch Servlet......................................................................................................................45 8.Zusammenfassung und Ausblick...............................................................................................50 9. Literaturverzeichnis...................................................................................................................51 5 9.1 Referenzen aus Zeitschriften und Büchern.............................................................................51 9.2 Internet Referenzen...............................................................................................................51 10. Anhang.....................................................................................................................................54 10.1 Inhaltsverzeichnis der CD....................................................................................................54 11. Glossar.....................................................................................................................................56 Zusammenfassung 6 1. Zusammenfassung Die vorliegende Arbeit befasst sich mit der Entwicklung von Java-Programmen und -Servlets für OS/390 Großrechner. Daten, die auf dem OS/390 Server in einer DB2 Datenbank liegen, sollen über das Internet zugänglich gemacht werden. Es wird eine einfache Anwendung entwickelt, bei der Präsentations- und Businesslogik in einem einzigen Servlet enthalten sind. Im Mittelpunkt der Arbeit steht die Konfiguration des OS/390 Servers und der Einsatz einer effizienten Entwicklungsumgebung. Hierfür wird eine Workstation und alternativ die Java Programmierumgebungen VisualAge bzw. Eclipse benutzt. In der Entwicklungsumgebung fehlerfrei laufende Programme oder Servlets werden in die Produktionsumgebung (OS/390 Server) exportiert (s. Abbildung 1). Klient Browser Workstation OS/390 Server (Entwicklungsumgebung) (Produktionsumgebung) Visual Age for Java / Eclipse Servlet Engine Java Servlet Websphere Java Servlet Java Programm Java Programm OS/390 JDBC Treiber IBM JDBC Treiber Hit Treiber DB2Connect DB2 Abbildung 1 - Überblick über die Entwicklungs- und Produktionsumgebung Der Zugriff auf die DB2 Datenbank erfolgt durch umgebungsspezifische Connectoren (vgl. Kapitel 3). Java Programme oder -Servlets greifen aus der Entwicklungsumgebung über den Hit Java Database Connectivity (JDBC) Connector oder mit dem IBM JDBC Connector über DB2Connect auf die Datenbank zu. In der Produktionsumgebung wird hierzu der OS/390 JDBC Connector von IBM verwendet. Diese Konstellation kombiniert die Vorteile einer modernen, grafischen Entwicklungsumgebung (Debugger, übersichtliche Darstellung, usw.) mit einem sehr einfachen Export der Programme in die Produktionsumgebung. Die Zusammenfassung 7 fertigen Programme und Servlets werden per FTP auf den Server geladen und können dort sofort ausgeführt werden. In den folgenden Kapiteln wird die Konfiguration des OS/390 Servers (Websphere und DB2), und der Workstation (VisualAge bzw. Eclipse, Websphere Testumgebung bzw. Tomcat, DB2Connect und der Hit Treiber) beschrieben. Die aufgezeigten Konfigurationen wurden anhand einer Anwendung (Gästebuch) evaluiert. Hierfür wurde die erforderliche Datenbank eingerichtet, das Gästebuch Servlet entwickelt und in die Produktionsumgebung exportiert. Aus den oben genannten Arbeitsabläufen sind zwei Tutorials entstanden, die Schritt für Schritt erklären, wie über ein Netzwerk auf eine OS/390 DB2 Datenbank zugegriffen und das Java Programm auf den OS/390 Server exportiert wird (vgl. Kapitel 6). Die Entwicklung des Gästebuchs beschreibt beispielhaft die Programmierung einer Internetanwendung in einer modernen IDE mit der Java Servlet Technologie (vgl. Kapitel 7). Ein weiteres Ziel dieser Diplomarbeit ist eine moderne Gestaltung, die digital gespeicherte Daten möglichst benutzerfreundlich integriert. Deshalb wird der klassische Anhang durch eine CD bzw. eine Internetseite ersetzt. Dadurch können Quellcode und Konfigurationsdateien direkt am Computer angeschaut bzw. benutzt werden. An vielen Stellen wird noch einmal speziell durch dieses Icon darauf hingewiesen (vgl. Kapitel 2.3): Verzeichnis/Dokumentname Einleitung 8 2. Einleitung 2.1 Motivation für die Integration von OS/390 Mainframes in das Internet Etwa 90 % der 2000 größten Unternehmen setzen einen S/390 Rechner als ihren zentralen Server ein. Die Anzahl der weltweit stündlich durchgeführten S/390 CICS Transaktionen ist etwa so groß wie die Anzahl der Zugriffe auf Seiten des World Wide Web [ CIC ] [ GRA ]. Vorgänge wie das Abheben eines Geldbetrages in der Bank, die Buchung eines Fluges im Reisebüro oder das Bezahlen eines Einkaufs mit der EC Karte werden als Transaktionen in einem zentralen Rechner mit Hilfe eines Transaktionsmonitors verarbeitet. CICS ist der mit Abstand am weitesten verbreitete Transaktionsmonitor. Von sogenannten Experten als Auslaufmodell bezeichnet, werden die Großrechner jedoch laut den zuständigen IT-Verantwortlichen nach wie vor in großem Umfang eingesetzt. Die Frage "Wann ersetzen Sie Ihre S/390-Anwendungen durch eine moderne Technologie?" habe der IT-Veranwortliche einer deutschen Großbank so beantwortet: "Ich glaube nicht, dass dies in den nächsten 50 Jahren geschehen wird" [ KEB ]. Bei einem Blick auf folgende Zahlen • Zwischen 65 und 70 % aller geschäftsrelevanten Daten werden im EBCDIC Format auf S/390 Rechnern gespeichert, • 60% aller geschäftsrelevanten Daten, auf die mittels des World Wide Web zugegriffen werden kann, sind in Mainframe Datenbanken gespeichert, hauptsächlich DB2, IMS und VSAM [ SP1 ], wird klar, welche wichtige Stellung die Bereitstellung dieser Daten über das Internet, in Zukunft und auch heute schon, einnimmt. Um diesem Umstand Rechnung zu tragen, beschäftigt sich diese Diplomarbeit mit der Entwicklung von Java Servlets und deren Zugriff auf OS/390 Großrechner. Bei der Wahl der Entwicklungsumgebung und -werkzeuge sowie dem Produktionsablauf wird darauf geachtet, sich an der Entwicklung realer Projekte für Großrechner zu orientieren. Deshalb hierzu noch einige Anmerkungen: Es ist ausgesprochen unüblich, die Entwicklung neuer Anwendungen auf dem gleichen Server zu betreiben, auf dem die Anwendungen später einmal laufen sollen. In einem Unternehmen unterscheiden wir in der Regel zwischen dem/den Rechner/n einer Entwicklungsumgebung, auf dem/denen neue Anwendungen entstehen, und dem/den Rechner/n einer Produktionsumgebung, auf dem/denen die Anwendung später einmal laufen sollen. Entwicklungen erfolgen meistens im Team. Die Entwickler haben jeder einen leistungsfähigen Arbeitsplatzrechner, auf dem editiert, kompiliert und getestet wird. Alle Arbeitsplatzrechner sind mit einem gemeinsamen Entwicklungsserver, dem Repository, verbunden, auf dem Quellcode und Maschinencode in unterschiedlichen Versionen zentral gespeichert werden. Auf dem Repository Rechner laufen Funktionen wie die zentrale Steuerung des Entwicklungsprojektes, Backup Verwaltung und der Integrations- und Systemtest der von den einzelnen Entwicklern erstellten Komponenten. Nach Abschluss einer Entwicklung wird der so entstandene Code in die Produktionsumgebung exportiert. Häufig wird noch eine Testumgebung zwischengeschaltet, welche die Produktionsumgebung möglichst naturgetreu nachbildet. Einleitung 9 Die Software der Entwicklungsumgebung unterscheidet sich erheblich von der Software der Produktionsumgebung. Als Entwicklungsrechner werden Win 2000 Rechner oder Linux Rechner eingesetzt. Das Repository befindet sich in der Regel auf einem getrennten Unix oder Win 2000 Rechner. Bei der Produktionsumgebung unterscheiden wir zwischen einer 2-Tier und einer 3-Tier Konfiguration. Bei der 2-Tier Konfiguration laufen alle Anwendungen auf dem zentralen OS/390 Rechner. Bei der 3-Tier Konfiguration läuft ein Teil der Anwendungen auf einem getrennten Unix oder Win 2000 Server; auf dem OS/390 Rechner befindet sich die zentrale Datenhaltung (z.B. DB2) und evtl. ein Teil der Anwendungen (z.B. Java Servlets oder CICS Programme). Die Arbeitsplatzrechner der Benutzer der Produktionsumgebung haben in der Regel nur eine geringe Funktionalität. In vielen Fällen ist dies lediglich ein Browser (vgl. Abbildung 2). Abbildung 2 - Alternativen für einen Servletzugriff auf eine OS/390 Datenbank Einleitung 2.2 Ziel der Diplomarbeit Das Ziel ist, mit Hilfe von Java und der JDBC Datenbankzugriffe auf einen OS/390 Großrechner durchzuführen, zuerst als Java Programm und im nächsten Schritt als Java Servlet. Es handelt sich hierbei um eine 2-Tier Architektur; alle Anwendungen (Java, Websphere und DB2) laufen auf dem OS/390 Server. Im Rahmen dieser Arbeit wurde hierfür der OS/390 Rechner des Instituts für Informatik der Universität Leipzig, jedi.informatik.uni-leipzig.de, eingesetzt. Die Entwicklungs- und Produktionsumgebung soll dem bereits beschriebenen Szenario möglichst nahe kommen. Die Entwicklung und der Test sollen deshalb auf einer Workstation mit modernen Entwicklungswerkzeugen durchgeführt und die fertigen Programme dann auf den OS/390 Server exportiert werden. Sobald dies mit einfachen HelloWorld Programmen funktioniert, soll ein komplexeres Servlet erstellt werden. Die Diplomarbeit umfasst die Installation und Konfiguration aller Werkzeuge und Systemkomponenten sowohl auf dem OS/390 Server als auch auf der Workstation sowie die Programmierung bzw. Konfiguration aller verwendeten Programme. Die Ergebnisse sollen so aufbereitet werden, dass sie im Rahmen des Client Server Praktikums als Tutorials bzw. Übungsaufgaben den Studenten zur Verfügung gestellt werden können [ TU2 ][ TU3 ][ TU4 ]. Folgende Systemumgebungen werden konfiguriert: 1. Die Test- und Entwicklungsumgebung: Alle Programme werden dabei auf der Workstation ausgeführt, der Datenbankzugriff erfolgt auf den OS/390 Server. 2. Die „Produktionsumgebung“: Alle Programme und Datenbankzugriffe werden auf dem OS/390 Server durchgeführt. Am Ende der Diplomarbeit soll ein funktionsfähiges System mit folgenden Leistungsmerkmalen zur Verfügung stehen: 1. Der OS/390 Server muss so konfiguriert sein, dass JDBC Zugriffe intern und aus dem Internet möglich sind. Sowohl Java Programme als auch Java Servlets sollen JDBC benutzen können. 2. Die Beispielprogramme müssen in der Entwicklungsumgebung auf der Workstation ausgeführt und debuggt werden können. 3. Die Beispielprogramme müssen auf den OS/390 Server hochgeladen und dort ausgeführt werden können. 2.3 Aufbau der Diplomarbeit Die vorliegende Arbeit ist in 9 Hauptbereiche aufgeteilt: Kapitel 3 beschreibt die grundlegende Funktionsweise von Connectoren. Der Zugriff auf eine DB2 Datenbank mit den entsprechenden Connectoren ist Hauptgegenstand dieser Arbeit. Kapitel 4 enthält einen kurzen Überblick über die OS/390 Hard- und Software. 10 Einleitung 11 Kapitel 5 befasst sich mit der Konfiguration des OS/390 Großrechners. Zuerst wird der Ablauf eines Zugriffs auf die Datenbank aus einem Java Programm und einem Servlet beschrieben. Dann werden die dafür nötigen Konfigurationsschritte erläutert. Kapitel 6 beschreibt die Installation und Konfiguration der Workstation. Schematisch wird zuerst der theoretische Ablauf dargestellt. Dann werden die verwendeten Programme und ihre Installation bzw. Konfiguration beschrieben. Kapitel 7 erklärt den Produktionsablauf. Anhand eines Beispiels, einem Gästebuch Servlet, wird erläutert, wie ein Projekt auf der Workstation entwickelt, getestet und dann in die Produktionsumgebung exportiert wird. Kapitel 8 beschreibt in einigen Schlussbemerkungen den Gesamteindruck des Produktionsablaufs. Es werden auch einige Erweiterungen skizziert. Kapitel 9 enthält das Literaturverzeichnis. Kapitel 10 listet in tabellarischer Form den Inhalt der beigelegten CD bzw. der zugehörigen Internetseite auf. Kapitel 11 erklärt die wichtigsten Abkürzungen in einem Glossar. Anmerkungen: Bei der Beschreibung von Konfigurationsdateien oder Java Programmen werden bei umfangreicheren Dateien jeweils nur die geänderten oder hinzugefügten Teile abgebildet. Quellcode, Programm- und Verzeichnisnamen werden im Text durch die Schriftart Courier gekennzeichnet. Zeilenumbrüche, die nur zur Lesbarkeit gemacht werden und in den Orginaldateien zu Fehlern führen könnten, sind dadurch gekennzeichnet, dass keine separate Zeilennummer eingefügt wird. In dieser Diplomarbeit wird der klassische Anhang durch eine Referenz auf einer CD bzw. Internetseite ersetzt. Der erstellte Quellcode, die angepassten Konfigurationsdateien und alle im Literaturverzeichnis referenzierten Dokumente, die in digitaler Form verfügbar sind, sind auf einer CD und zusätzlich auf einer Internetseite gespeichert. Im Text wird mit einem Icon nochmals gezielt darauf hingewiesen: Verzeichnis/Dokumentname Das referenzierte Dokument kann auf der CD über das Menü oder direkt durch den Aufruf des Dokuments Dokumentname im angegebenen Verzeichnis Verzeichnis geöffnet werden. Es ist auch möglich, auf das Dokument über die URL: http://www-ti.informatik.uni-tuebingen.de/~csp/diplom/munz im Internet zuzugreifen. Für das Verständnis der Diplomarbeit wird ein grundlegendes Wissen über die Programmierung in Java und von Java Servlets vorausgesetzt. Es existieren zahlreiche Bücher und Online Tutorials, die dem Leser einen Einstieg erleichtern [ JA1] [ JA2 ]. Funktionsweise von Connectoren 12 3. Funktionsweise von Connectoren Zum Verständnis der Diplomarbeit sind grundlegende Kenntnisse über Connectoren notwendig, da sie für alle Datenbankzugriffe verwendet werden. Es folgt hier ein kurzer Überblick über deren Aufbau, Klassifizierung und Funktionsweise [ HER ]: Bei den Implementierungen von e-Business- oder Web Commerce-Lösungen spricht man von einem Frontend, das typischerweise mit einem Web Application-Server realisiert wird, und einem Backend (Auftragseingang, Finanzbuchhaltung), wofür z.B. OS/390 Anwendungen eingesetzt werden. In vielen Fällen werden 20% des Projektaufwandes für die Neuentwicklung des Frontends und 80% für dessen Integration in das vorhandene Backend aufgewendet. Connectoren sind Software-Programme, die ein Java-Programm, eine Web-Anwendung oder einen Browser mit existierenden Backend-Anwendungen oder Daten verbinden, beispielsweise über JDBC an eine OS/390 DB2 Datenbank (s. Abbildung 3). Wichtige Gesichtspunkte für die Auswahl eines Connectors sind: 1. Leistungsanforderungen (Transaktionen pro Sekunde), 2. Sicherheitsanforderungen (z.B. SSL, einschließlich Einfluss auf das Leistungsverhalten), 3. 2-Tier versus 3-Tier-Überlegungen. Connectoren lassen sich in drei Klassen aufteilen: 1. API Connectoren verwenden kein Java. Sie sind seit längerer Zeit verfügbar und haben in der Regel eine schlechtere Portabilität und ein besseres Leistungsverhalten als die Connectoren der beiden anderen Klassen. Existierende OS/390-Beispiele sind: CICS Web Support (CWS), IMS TCP/IP OTMA Connection (IMS TOC), Net.Data sowie CWS mit 3270 Bridge. In der Diplomarbeit wird auf dem OS/390 Server ebenfalls mit einem JDBC API Connector gearbeitet. IBM bietet auch für Nicht-OS/390 Betriebssysteme nur einen JDBC API Connector an, die entstehenden Probleme und Lösungsmöglichkeiten werden in Kapitel 6.3 erläutert. 2. Java Connectoren verwenden Java. Für sie liegen ebenfalls Erfahrungen im industriellen Einsatz vor. Für relationale Datenbanken existieren die JDBC- und SQLJConnectoren. CICS und IMS haben das CICS Transaction Gateway (CTG) und den IMS TOC Connector for Java als Teil des Common Connector Framework (CCF) entwickelt. Dieses Framework wird von den Websphere Java-AnwendungsEntwicklungswerkzeugen unterstützt, spezifisch VisualAge for Java. Host On-Demand ist eine weitere Lösung für 3270-Anwendungen. Der Vorteil von Connectoren der 2. Generation ist, dass sie vollständig systemunabhängig sind. Eine Java Applikation, die JDBC benutzt, kann z.B. mit minimalen Änderungen auf verschiedenen Plattformen laufen. Minimale Änderung bedeutet, dass nur der Treibername und evtl. die URL für den Datenbankserver, die meist zentral für die gesamte Applikation gesetzt werden, geändert werden müssen. 3. Enterprise JavaBeans Connectoren bauen auf der Java 2-Protokoll-Familie auf, z.B. JMS, JDBC 2.0, und stellen eine Evolution der Java-Connectoren dar. Sie verfügen über Funktionsweise von Connectoren 13 zusätzliche Transaktions- und Sicherheitseigenschaften auf der Thread-Ebene sowie Daten-Persistenz als Teil des Programmiermodells. Sie sind derzeitig in der Entwicklung; eine Reihe offener Fragen müssen noch geklärt werden. Sie sind als Teil des J2EEStandards in der Java Connector Architecture (JCA) Spezifikation definiert. Da die auf dem OS/390 Server installierten Programmversionen von Websphere und DB2 JDBC 2.0 nicht unterstützen, wird stattdessen JDBC 1.0 eingesetzt. Abbildung 3 - Funktionsweise von Connectoren [ KO1 ] OS/390 Systemumgebung 14 4. OS/390 Systemumgebung 4.1 OS/390 Hardware Für Leser ohne Mainframe Erfahrung ist anzumerken, dass die Systemumgebung eines Mainframes sich deutlich von einer Unix- oder Windowssystemumgebung unterscheidet. Einige der besonders interessanten Eigenschaften der OS/390 Hardware werden in diesem Kapitel vorgestellt. Eine umfassende Einführung in die OS/390 Hard- und Software findet man in [ HER ]. 1. Ein-/Ausgabe Architektur Im Gegensatz zu den meisten anderen Rechnerarchitekturen verfügt S/390 über eine eindeutig definierte Ein-/Ausgabe-Architektur mit einer überdurchschnittlich hohen Leistung. Letztere hat einen besonderen Stellenwert bei Zugriffen auf Datenbanken und bei der Transaktionsverarbeitung. Vorgänge wie das Abheben eines Geldbetrags in der Bank, die Buchung eines Flugs im Reisebüro oder das Bezahlen eines Einkaufs mit der EC-Karte werden als Transaktionen in einem zentralen Rechner mit Hilfe eines Transaktions-Monitors verarbeitet. In solchen Fällen wird das Leistungsverhalten eines Rechners nicht vorrangig durch die Leistungsfähigkeit der Zentraleinheit (CPU) bestimmt, sondern dadurch, wie effektiv der Zugriff auf die gespeicherten Daten erfolgen kann. E-Business und e-Commerce sind moderne Ausprägungen, deshalb ist das OS/390 Betriebssystem besonders für die Webanbindung bestehender Daten mit Java geeignet. 2. Datenspeicherung Ein Dateisystem verbirgt die Eigenschaften des physikalischen Datenträgers weitestgehend vor dem Anwender. Unix und Windows 2000 behandeln Dateien als strukturlose Zeichenketten, die mittels Namen identifiziert werden. Dafür dienen Dateiverzeichnisse, die auch wie Dateien aussehen und als solche behandelt werden können. Während Dateien grundsätzlich sequentiell gelesen werden, sind Direktzugriffe in der Regel nur mit Hilfe von speziellen Funktionen programmierbar. Im Betriebssystem OS/390 ist das Dateisystem identisch mit dem Inhalt des physikalischen Datenträgers. Bei der Formatierung einer Datei auf dem Plattenspeicher wird die Dateistruktur festgelegt. Man unterscheidet Formatierungen für Dateien mit direktem (DAM), sequentiellem (SAM) und index-sequentiellem (VSAM) Zugriff. Durch diese Art der Dateistrukturierung kann der Benutzer selbst sehr genau festlegen, wie jede Datei gespeichert werden soll. Dadurch kann die Dateifragmentierung verhindert und die Speicherplatzzuordnung optimiert werden. Das Erstellen der richtigen Dateistruktur ist eigentlich noch deutlich komplexer und erfordert viel mehr Benutzervorgaben. Zum Verständnis der Diplomarbeit sind aber nur die daraus resultierende Strukturierung in sog. Datasets im Gegensatz zu den von Unix oder Windows bekannten Dateien und Verzeichnissen wichtig. Die Darstellung und Speicherung von alphanumerischen Zeichen geht bei allen Rechnerarchitekturen auf uralte Wurzeln zurück. Bei vielen Rechnern (u.a. bei allen PCs mit Windows Betriebssystemen) ist dies die 7-Bit-ASCII-Darstellung, die ihren Ursprung in den Lochstreifen der Teletype-Maschinen hat und nachträglich auf 8 Bit erweitert wurde. Bei den OS/390- (und einigen anderen) Rechnern ist dies die 8-Bit-EBCDICDarstellung, die ihren Ursprung in den Lochkarten hat. Bei der Übertragung und OS/390 Systemumgebung 15 Erstellung von Textdateien musste deshalb auf die korrekte Konvertierung von ASCII nach EBCDIC und umgekehrt geachtet werden [ HER ] [ SP2 ]. 4.2 Zugriff auf den OS/390 Server Um die nachfolgenden Konfigurationsschritte durchzuführen, muss über das Internet auf den OS/390 Server zugegriffen werden. Dafür wird ein 3270 Klient benötigt, der über das 3270 Übertragungsprotokoll mit dem OS/390 Communication Server Subsystem kommuniziert. Das 3270 Übertragungsprotokoll setzt auf dem Telnet Protokoll auf und verwendet wie dieses TCP/IP Port 23 auf der Serverseite. Der 3270 Klient wird allgemein als 3270 Emulator bezeichnet. Zum Einsatz in der Diplomarbeit kommt vor allem der Freeware Emulator QWS3270. Stellt man damit eine Verbindung zum OS/390 Server her, bekommt man eine Terminaloberfläche mit 24 Zeilen a 80 Zeichen angezeigt. Damit kann auf die verschiedenen OS/390 Subsysteme und das Betriebssystem zugegriffen werden. Die Konfiguration des OS/390 Servers wird damit vollständig remote von einer Workstation aus durchgeführt, ein Neustart oder eine Konfiguration vor Ort ist zu keinem Zeitpunkt notwendig. 4.3 OS/390 Software Um die Ausführung des kompilierten Quellcodes auf dem OS/390 Server zu verstehen, sind grundlegende Kenntnisse über die verwendete Software bzw. die Laufzeitumgebung notwendig. Die verwendeten Subsysteme werden im folgenden, soweit nötig, erklärt. 4.3.1 DB2 Bei allen Programmbeispielen findet ein Zugriff auf eine OS/390 Datenbank statt. DB2 Universal Database, auf dem Server in der Version 5 installiert, ist das OS/390 (objekt-) relationale Datenbank-Produkt. Es ist in einer identischen Implementierung für alle UNIX-, Linux-, OS/2-, und Windows-Betriebssysteme verfügbar. Eine zweite getrennte Implementierung mit dem gleichen Namen ist für die S/390-Betriebssysteme verfügbar, besonders für OS/390 und VSE. Obwohl es sich um zwei getrennte Implementierungen handelt, ist der Funktionsumfang weitestgehend identisch und die Kompatibilität sehr gut. DB2 ist eine Server-Anwendung, die grundsätzlich in einem getrennten Adressraum läuft. Wie bei allen Server-Anwendungen ist ein Klient erforderlich, um auf einen DB2-Server zuzugreifen. Der Zugriff kann mit Hilfe von SQL-Statements erfolgen, die z.B. in einem Java-Anwendungsprogramm oder einem Java-Servlet eingebettet sind. Alternativ existieren eine Reihe spezifischer SQL-Klienten-Anwendungen, wie z.B. SPUFI (vgl. folgendes Kapitel) [ HER ]. 4.3.2 SQL Processor Using File Input (SPUFI) Wie im Kapitel zuvor beschrieben, gibt es verschiedene Möglichkeiten SQL Statements an die DB2 Datenbank zu stellen. Die einfachste ist, das ISPF-Subsystem SPUFI zu verwenden. Es handelt sich dabei um eine SQL-Klienten-Anwendung, die es dem Benutzer erlaubt, SQL Statements, die in Datasets gespeichert sind, auszuführen. Nach der Ausführung kann die Ausgabe angezeigt werden. Vor allem zur Erstellung von einfachen Datenbanken zu Testzwecken und zur unkomplizierten Überprüfung von Tabellendaten ist OS/390 Systemumgebung 16 SPUFI geeignet. Deshalb wurde SPUFI immer, wenn SQL Statements außerhalb von Java Programmen abgesetzt werden mussten, verwendet. 4.3.3 Unix System Services (USS) Bei den USS (früher Open Edition MVS) handelt es sich um ein funktionell eingeschränktes aber vollwertiges Unix-Betriebssystem. Die USS sind in den OS/390-Kernel integriert und haben deshalb die gleichen guten Zuverlässigkeits-, Robustheits- und Skalierungseigenschaften wie das OS/390 Betriebssystem. Dem Benutzer stehen zwei verschiedene Unix-Shells zur Verfügung. Die tcsh-Shell ist eine Erweiterung von csh, der BerkleyUnix-C-Shell. Sie wird über einen rlogin- oder telnet-Klienten direkt aufgerufen und unterstützt den vi-Editor. Die OS/390-Shell, auch als Ishell (ISPF-Shell) bezeichnet, basiert auf der Unix System V-Shell mit Elementen der Korn-Shell. Sie wird über einen 3270Klienten auf dem Umweg über TSO und ISPF aufgerufen. Für den ISPF-Benutzer wird nach der Eingabe des Kommandos TSO OMVS auf der Kommando-Zeile die Ishell initialisiert. Nach Erscheinen des Shell-Prompts (#) können alle von Unix her bekannten Kommandos verwendet werden. An Stelle des vi-Editors wird der ISPF-Editor benutzt [ HER ]. Die zuletzt genannte Shell wurde während der gesamten Diplomarbeit zum Zugriff auf die USS verwendet. Zu beachten ist, dass die in den USS benutzten Dateien nicht, wie sonst bei dem OS/390 Betriebssystem üblich, in Datasets (z.B. VSAM), sondern im Hierarchical File System (HFS) gespeichert werden. Das HFS von OS/390 verfügt über eine Directory-Struktur, die analog zu den File-Systemen anderer Unix-Plattformen ist. Es wird in Containern implementiert. Diese stellen ganz normale OS/390 Datasets dar. Innerhalb der USS kann der Benutzer deshalb mit den gewohnten Befehlen „cd Verzeichnisname“in beliebige Verzeichnisse wechseln und sich beispielsweise mit „ls -la“den Inhalt des aktuellen Verzeichnisses anzeigen lassen. Unter USS ist ein Java Development Kit (JDK) verfügbar (auf dem Server in Leipzig in der Version 1.1.8), über das Java Programme kompiliert und ausgeführt werden können. Die Syntax unterscheidet sich nicht von einem anderen Unix System, ein Programm wird mit javac Programmname kompiliert und mittels java Programmname ausgeführt. Der Compiler auf dem OS/390 Betriebssystem bietet mehrere Optionen, um Java Programme auszuführen: • Java Klassen können interpretativ abgearbeitet werden. Dies war bei der Einführung von Java der Standard und ist in einzelnen Fällen auch heute noch sinnvoll (z.B. bei sehr kurzer Ausführungszeit des Programms oder sehr sequentiellem Programmablauf). • Seit geraumer Zeit wird aber für Java Programme auf allen Betriebssystemen ein sog. Just In Time Compiler (JIT) verwendet. Dies ist auch die Standardeinstellung des OS/390 Java Compilers. Dabei wird der Java Bytecode beim Start einer Applikation mit ähnlichen Verfahren wie bei Compilern anderer Programmiersprachen optimiert und kompiliert. Der erzeugte Maschinencode wird dann ausgeführt und evtl. zur erneuten Verwendung gecached. Der höhere Aufwand durch den zusätzlichen Schritt der Kompilierung lohnt sich vor allem bei größeren Programmen wegen der deutlich kürzeren Ausführungszeit. OS/390 Systemumgebung • 17 Die dritte Möglichkeit, die es bei anderen Betriebssystemen nicht gibt, ist, den High Performance Compiler for Java (HPCJ) zu verwenden. Dabei wird der Java Bytecode vor der eigentlichen Ausführung spezifisch für OS/390 statisch kompiliert und in einem Dataset gespeichert. Dadurch kann mehr Zeit für die Optimierung verwendet werden und zur Ausführungszeit muss keine Java Virtual Machine mehr gestartet werden. Aus diesen Gründen erhält man eine bessere Performance als bei der Verwendung des JIT Compilers. Allerdings gilt dies nur für Anwendungen, die bestimmte Anforderungen (z.B. kurze Ausführungszeit, möglichst nur ein Thread) erfüllen. Außerdem gibt es keinen Servletsupport und die Java Spezifikation unterscheidet sich vom Sun Standard. Ab der Version 2 des JDKs soll die Verwendung des HPCJ unnötig sein, da dort der neue JIT Compiler ähnlich performant wie der HPCJ sein soll [ OLI ]. In der Diplomarbeit wird ausschließlich der JIT Compiler verwendet. 4.3.4 Websphere Um bereits bestehende Daten und Anwendungen an das Internet anzubinden, wird eine Möglichkeit zur Anzeige dynamischer HTML Seiten benötigt. Die zwei wichtigsten Schnittstellen dafür sind das Common Gateway Interface (CGI) und (die in dieser Diplomarbeit verwendeten) Java Servlets. Java Servlets haben einige Vorteile gegenüber CGI Skripten [ HER ]: • Servlets sind vollwertige Java-Programme; sie verfügen über alle Java APIs, einschließlich JDBC und SQLJ. • Im Gegensatz zu CGI erfordert das Java Servlet nur Light Weight Context Switches. Daraus resultiert ein deutlich besseres Leistungsverhalten. • Da das Servlet im Hauptspeicher verbleibt, können Verbindungen (Connections) zur Datenbank offen gehalten werden. Ein Servlet kann einen gemeinsamen Vorrat (Pool) an Datenbankverbindungen verwalten, und diesen je nach Bedarf einzelnen konkurrierenden Benutzern zuordnen. Dieses sog. Connection Pooling verbessert die Antwortzeit des Servlets, da der Verbindungsaufbau durchaus länger (1-2 Sek. sind realistische Werte) als die Ausführung des SQL Statements dauern kann. Einige JDBC Treiber können nur wenige Verbindungen gleichzeitig offen halten und wären ohne Connection Pooling auf sehr wenige, parallele Benutzer beschränkt [ TUR ]. • Ein Servlet kann Objekte und Daten während einer Sitzung speichern, ohne dass diese, wie bei CGI Skripten, in der HTTP Anfrage übergeben werden müssten. • Leistungsfähiges Fehler- und Type-Checking. • Umfangreiche (Remote-) Debugging Möglichkeiten. Zur Ausführung der Servlets wird zusätzlich zum HTTP Server (der die statischen HTML Anfragen beantwortet) ein Servlet Container (Laufzeitumgebung) benötigt. Alle Servlets werden innerhalb des Servlet Containers ausgeführt. Üblich ist eine Bündelung des HTTP Servers und des Servlet Containers zu einem Web Application Server (s. Abbildung 4). Dabei stellt der HTTP Server anhand der URL fest, ob es sich um eine statische Anfrage handelt, die er selbst beantwortet, oder eine dynamische, die er an den Servlet Container weiterleitet. Der Web Application Server arbeitet meistens mit einem Backendsystem (im Fall dieser Diplomarbeit eine DB2 Datenbank) zusammen. Der Servlet Container von IBM für das OS/390 Betriebssystem heißt Websphere und ist in der Standardkonfiguration mit OS/390 Systemumgebung 18 Abbildung 4 - Web Application Server auf OS/390 dem IBM HTTP Server als Web Application Server gebündelt. Es kann aber auch ein anderer HTTP Server, wie z.B. Apache, eingebunden werden. Außerdem existieren Application Server von Drittanbietern (z.B. Weblogic von der Firma BEA), die ausgezeichnet mit dem OS/390 Betriebssystem zusammenarbeiten. Websphere läuft unter den USS und benutzt das HFS um Daten zu lesen bzw. zu schreiben. Die auszuführenden Java Servlets werden üblicherweise in dem Servletverzeichnis unterhalb des Websphereverzeichnisses abgelegt (vgl. Kapitel 6.4.2.2). Weiterführende Informationen über Web Application Server bzw. Websphere sind in [ HER ] zu finden. Konfiguration der OS/390 Systemumgebung 19 5. Konfiguration der OS/390 Systemumgebung In diesem Kapitel wird die Konfiguration des OS/390 Servers erklärt. Da zum Zeitpunkt der Diplomarbeit kein zweiter OS/390 Server zur Verfügung stand, wurde die Konfiguration direkt auf dem „Produktionssystem“durchgeführt. Auf dem Server lief parallel der Praktikumbetrieb. Dabei wurde z.B. Websphere verwendet. Der fehlerfreie Betrieb des Systems musste deshalb während der Konfiguration gewährleistet werden. Da Fehler in einzelnen Konfigurationsschritten nicht ausgeschlossen werden können, ist die ständige Sicherung aller geänderten Dateien und Datasets unabdingbar. 5.1 JDBC Zugriff aus einem Java Programm auf DB2 Zuerst wird die Produktionsumgebung genauer erläutert. Auf dem OS/390 Server läuft ein Java Compiler, der so konfiguriert werden muss, dass mittels JDBC auf eine DB2 Datenbank zugegriffen werden kann (s. Abbildung 5). Ein typischer Programmaufruf, der einen Datenbankzugriff enthält, läuft folgendermaßen ab: 1. Das Java Programm wird mit dem Kommando java Programmname gestartet. 2. Das Programm reagiert auf evtl. zu tätigende Benutzereingaben. 3. Der Drivermanager lädt den angegebenen Treiber. 4. Das Programm stellt mit Hilfe der JDBC Treiber eine Verbindung zu DB2 her. Bei einem Remotezugriff wird die Authentifizierung auf dem OS/390 Server von der Distributed Data Facility (DDF) übernommen [ ALM ]. Dann wird die Verbindung zur DB2 Datenbank aufgebaut. 5. Die SQL Anfrage wird an DB2 gestellt. 6. Das Programm gibt die erhaltenen Daten aus. Konfiguration der OS/390 Systemumgebung 20 Abbildung 5 - Ablauf eines JDBC Zugriffs auf DB2 unter OS/390 [ KO3 ] 5.1.1 Konfiguration von DB2 für den JDBC Zugriff aus einem Java Programm Die Konfiguration von DB2 erfolgt an Hand der Beschreibung in [ KO1 ]. Um die oben beschriebene Funktionalität zu erreichen, müssen einige DB2 Konfigurationsdateien angepasst werden. Die Änderungen werden für jede Datei in einem eigenen Abschnitt erläutert. Alle Konfigurationsdateien sind auf der CD im Verzeichnis /konfig gespeichert. In den folgenden Kapiteln werden diese Konfigurationsschritte durchgeführt: • db2jdbc.cursors Datei anpassen • Call Level Interface Konfigurationsdatei anpassen • .profile Datei anpassen • GRANT Statement ausführen um die Zugriffsrechte entsprechend zu setzen 5.1.1.1 db2jdbc.cursors Datei /konfig/db2jdbc.cursors) Datei wird festgelegt, In der db2jdbc.cursors ( wieviele Cursor JDBC benutzen kann und welche Eigenschaften sie haben. Jeder von einem JDBC Zugriff zurückgegebene Resultset benötigt einen Cursor. Die Anzahl der Konfiguration der OS/390 Systemumgebung 21 Cursor legt also die max. Anzahl gleichzeitig zu beantwortender Anfragen fest. Ein Cursor mit der Eigenschaft „hold“bleibt nach einem Commit oder Rollback offen. Die Defaulteinstellung der DB2 Datenbank war, dass jeder Cursor nach einem Commit oder Rollback geschlossen wird („no-hold“). Mit der installierten Version 5 von DB2 darf die maximale Anzahl von 100 Cursorn nicht überschritten werden. Deshalb wird die Anzahl auf jeweils 10 Cursor mit „no-hold“(s. Abbildung 6, Zeile 1-10) und 10 mit „hold“(s. Abbildung 6, Zeile 11-20) Attribut begrenzt. (1)cursor=DB2OS390NOHOLD001:nohold (2)cursor=DB2OS390NOHOLD002:nohold (3)cursor=DB2OS390NOHOLD003:nohold (4)cursor=DB2OS390NOHOLD004:nohold (5)cursor=DB2OS390NOHOLD005:nohold (6)cursor=DB2OS390NOHOLD006:nohold (7)cursor=DB2OS390NOHOLD007:nohold (8)cursor=DB2OS390NOHOLD008:nohold (9)cursor=DB2OS390NOHOLD009:nohold (10)cursor=DB2OS390NOHOLD010:nohold (11)cursor=DB2OS390HOLD001:hold (12)cursor=DB2OS390HOLD002:hold (13)cursor=DB2OS390HOLD003:hold (14)cursor=DB2OS390HOLD004:hold (15)cursor=DB2OS390HOLD005:hold (16)cursor=DB2OS390HOLD006:hold (17)cursor=DB2OS390HOLD007:hold (18)cursor=DB2OS390HOLD008:hold (19)cursor=DB2OS390HOLD009:hold (20)cursor=DB2OS390HOLD010:hold Abbildung 6 - /usr/lpp/db2/db2510/classes/db2jdbc.cursors /konfig/db2jdbc.cursors Konfiguration der OS/390 Systemumgebung 22 5.1.1.2 Call Level Interface Konfigurationsdatei (1); DB2 CLI configuration (2); (3); This is a comment line (4); (5); COMMON section for all subsystems (6)[COMMON] (7); DBA1 is our example DB2 subsystem (8)MVSDEFAULTSSID=DBA1 (9); Configuration of our example DB2 subsystem (10)[DBA1] (11);MVSATTACHTYPE can be RRSAF or CAF (12)MVSATTACHTYPE=CAF (13)PLANNAME=DSNACLI Abbildung 7 - /usr/lpp/db2/db2510/dsnaoini /konfig/dsnaoini In der Konfigurationsdatei des DB2 Call Level Interface (CLI) muss die Subsystem ID von DB2 angepasst werden (s. Abbildung 7, Zeile 8). Dieser Wert ist installationsspezifisch und für diesen OS/390 Server „DBA1“. Beim DB2 CLI handelt es sich um eine C/C++ API die Funktionen zur Verarbeitung von dynamischen SQL Statements zur Verfügung stellt [ CAL ]. Diese Schnittstelle ist produktspezifisch und wird vom OS/390 JDBC API Connector benutzt um die SQL Statements an DB2 weiterzuleiten. Üblicherweise implementiert jedes DBMS ein CLI, das dann von entsprechenden Connectoren verwendet wird. 5.1.1.3 .profile Datei Nach diesen Anpassungen ist JDBC nun fertig eingerichtet. Um es aus Java Programmen benutzen zu können, müssen noch einige Umgebungsvariablen exportiert werden. Am /konfig/.profile) Datei besten werden die Exportstatements in die .profile ( des entsprechenden Benutzers oder die Default .profile Datei eingefügt. Bei der .profile Datei handelt es sich um eine Batchdatei, die beim Login des Benutzers ausgeführt wird. Konfiguration der OS/390 Systemumgebung 23 (1)export (2)export (3)export (4)export STEPLIB=DSN510.SDSNLOAD:DSN510.SDSNEXIT:$STEPLIB PATH=$PATH:/usr/lpp/db2/db2510/bin LIBPATH=$LIBPATH:/usr/lpp/db2/db2510/lib:. LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /usr/lpp/db2/db2510/lib (5)CLASSPATH=$CLASSPATH: /usr/lpp/db2/db2510/classes/db2jdbcclasses.zip (6)CLASSPATH=$CLASSPATH:. (7)export CLASSPATH (8)export DSNAOINI=/usr/lpp/db2/db2510/dsnaoini (9)export JAVA_HOME=/usr/lpp/java/J1.1 Abbildung 8 - /u/stefanm/.profile /konfig/.profile In den Exportstatements werden die Pfade zu den JDBC Treiberklassen und DLLs (s. Abbildung 8, Zeile 1-5) gesetzt. Außerdem wird die zu verwendende CLI Konfigurationsdatei (s. Abbildung 8, Zeile 8) angegeben. 5.1.1.4 GRANT Statement ausführen Abschließend wird noch ein vorgegebenes SQL Statement ausgeführt, um allen Benutzern, die DB2 Zugriffsrechte besitzen, die Nutzung von JDBC durch Gewährung der benötigten zusätzlichen Rechte für den CLI Plan DSNACLI zu ermöglichen (s. Abbildung 9). Zur Ausführung wird das bereits erwähnte ISPF Subsystem SPUFI benutzt. Die Ausführung von SQL Statements in SPUFI ist in [ TU1 ] sehr detailliert beschrieben: GRANT EXECUTE ON PLAN DSNACLI TO PUBLIC Abbildung 9 - GRANT Statement Damit auch über das Internet JDBC benutzt werden kann, muss unbedingt die Distributed Data Facility (DDF) gestartet sein. Auf dem OS/390 Server war dies bereits der Fall (vgl. Abbildung 5 auf Seite 6). 5.1.2 Beispielprogramm von IBM kompilieren und ausführen Nachdem alle Anpassungen vorgenommen wurden, kann mit dem vorinstallierten Beispielprogramm (s. Abbildung 10) ein erster Test der Installation durchgeführt werden. Konfiguration der OS/390 Systemumgebung (1)import java.sql.*; (2)class sample01 { (3) static { (4) try { (5) //register DB2 for OS/390 driver withDriverManager (6) Class.forName("ibm.sql.DB2Driver"); (7) } catch (ClassNotFoundException e) { (8) e.printStackTrace(); (9) } (10) } (11) (12) public static void main(String argv[]) { (13) try { (14) System.out.println("**** JDBC Entry within class sample01."); (15) String url = "jdbc:db2os390:DBA1"; (16) Connection con = DriverManager.getConnection(url); (17) System.out.println("**** JDBC Connection to DB2 for OS/390."); (18) // Create the Statement (19) Statement stmt = con.createStatement(); (20) System.out.println("**** JDBC Statement Created"); (21) // Execute a Query and generate a ResultSet (22) // The Query is a Select from SYSIBM.SYSTABLES (23) ResultSet rs = stmt.executeQuery("SELECT * FROM SYSIBM.SYSTABLES"); (24) System.out.println("****JDBC Result Set Created"); (25) // Print all of the table names to sysout (26) while (rs.next()) { (27) String s = rs.getString(1); (28) System.out.println("Table NAME = " + s); (29) } (30) System.out.println("**** JDBC Result Set output completed"); (31) // Close the statement (32) stmt.close(); (33) System.out.println("**** JDBC Statement Closed"); (34) (35) // Close the connection (36) con.close(); (37) System.out.println("**** JDBC Disconnect from DB2 for OS/390."); (38) (39) } catch( Exception e ) { (40) e.printStackTrace(); (41) } (42) (43) System.out.println("**** JDBC Exit from class sample01 - no Errors."); (44) } Abbildung 10 - sample01.java /java/sample01.java 24 Konfiguration der OS/390 Systemumgebung 25 Dafür muss das Java Programm kompiliert und ausgeführt werden. Das Programm stellt eine Verbindung zum DB2 Subsystem her und greift auf eine Systemtabelle zu, die bei jeder DB2 Installation vorhanden ist. Anhand dieses kurzen und einfachen Beispielprogramms wird erklärt, wie ein JDBC Aufruf funktioniert. Dazu wird Schritt für Schritt erläutert, was beim Ausführen des Quellcodes (s. Abbildung 10) passiert: Zuerst müssen alle für JDBC Zugriffe benötigte Klassen importiert werden (Zeile 1). Der richtige Treiber für einen Zugriff auf die DB2 Datenbank vom Betriebssystem OS/390 aus wird geladen (Zeile 4-11). Aus den vorhergehenden Installationen und Konfigurationen ist bekannt, dass der Zugriff auf das DB2 Subsystem mit der SSID DBA1 stattfindet. Daraus und aus der Art des Zugriffs ergibt sich die in Zeile 16 gesetzte URL für das DB2 Datenbanksystem. Eine Verbindung mit dem vorher geladenen Treiber und der erzeugten URL wird hergestellt (Zeile 17). Wenn bis jetzt keine Exception aufgetreten ist, wird das SQL Statement ausgeführt. Dazu wird ein Instanz der Klasse Statement erzeugt, die von der zuvor erzeugten Verbindung geliefert wird (Zeile 20). Durch Aufruf der executeQuery Methode der Statementklasse mit dem SQL Statement als Parameter, in unserem Fall der erwähnte Zugriff auf die Systemtabelle, wird der Datenbankzugriff durchgeführt (Zeile 24). Jetzt werden die erhaltenen Ergebnisse ausgegeben, hier die Namen aller Tabellen in der DB2 Datenbank (Zeile 27-30). Um die verwendeten Ressourcen wieder freizugeben, werden das Statement und die Connection geschlossen. Das Testprogramm wurde fehlerfrei ausgeführt (Zeile 33-45). Die Ausgabe für das Programm auf dem OS/390 Server ist in Abbildung 11 zu sehen. Konfiguration der OS/390 Systemumgebung 26 STEFANM : /usr/lpp/db2/db2510/samples/sample01 >java sample01 **** JDBC Entry within class sample01. **** JDBC Connection to DB2 for OS/390. **** JDBC Statement Created **** JDBC Result Set Created**** JDBC Result Set Created Table NAME = SYSCOPY Table NAME = SYSCOLAUTH Table NAME = SYSCOLUMNS Table NAME = SYSFOREIGNKEYS Table NAME = SYSINDEXES Table NAME = SYSINDEXPART ... ... **** JDBC Result Set output completed **** JDBC Stetement Closed **** JDBC Disconnect from DB2 for OS/390. **** JDBC Exit from class sample01 - no Errors. Abbildung 11 - Ausgabe des JDBC Testprogramms auf dem OS/390 Server Durch die korrekte Ausführung des Programms wurde verifiziert, dass JDBC Zugriffe von lokal ausgeführten Java Programmen aus möglich sind. 5.2 JDBC Zugriff aus einem Java Servlet Mit der im vorigen Kapitel beschriebenen Konfiguration kann bereits eine Java Applikation mit Textinterface SQL Anfragen an die Datenbank stellen. Um der zunehmenden Bedeutung des Internets und e-commerce Rechnung zu tragen, soll aber auch der Zugriff über das Internet auf die Datenbank ermöglicht werden. Mit Java Servlets können dynamische Webseiten erstellt werden, die auch bei mehreren tausend Zugriffen pro Sekunde akzeptable Antwortzeiten liefern. Aus den bereits genannten Gründen (vgl. auch Kapitel 4.3.4) sind Java Servlets sehr gut für zugriffsintensive Internetprojekte geeignet. Da alle Anwendungen auf einem (2-Tier Architektur) oder zwei (3-Tier Architektur) Servern ausgeführt werden, sind einige Sicherheitsaspekte einfacher zu handhaben als bei Technologien, bei denen auf der Klientenseite Programme bzw. Programmteile ausgeführt werden, wie z.B. Java Applets. Konfiguration der OS/390 Systemumgebung 27 Websphere Application Server Websphere Servlet Container Abbildung 12 - Websphere und DB2 auf OS/390 [ AND ] In Abbildung 12 wird die Konfiguration der verwendeten Subsysteme auf dem OS/390 Server detailliert dargestellt. Um HTTP Anfragen zu beantworten, läuft auf dem OS/390 Server der IBM HTTP Server, als Servlet Container wird der Websphere Applikationsserver Version 1.2 verwendet. Über einen JDBC Connector wird auf eine DB2 Datenbank zugegriffen. Eine typischer Servletaufruf sieht dann folgendermaßen aus: 1. Der Klient stellt eine HTTP Anfrage. 2. Der Webserver bekommt die Anfrage und stellt fest, dass es sich um einen ServletAufruf handelt. 3. Die Servletengine (Websphere) wird gestartet und ruft das angeforderte Servlet auf 4. Das Servlet reagiert auf die Anfrage und stellt mit Hilfe des JDBC Connectors eine SQL Anfrage an die Datenbank (für den Programmierer transparent und damit analog zum Javaprogramm). 5. Die Datenbank liefert das Ergebnis zurück. 6. Das Servlet bereitet die Daten auf und bettet sie in HTML Code ein. 7. Websphere stellt die vom Servlet erzeugte (HTML-) Antwortseite dar. 5.2.1 Konfiguration von Websphere für den JDBC Zugriff aus einem Java Servlet Bevor mit Servlets auf Daten in der DB2 Datenbank zugegriffen werden kann, muss Websphere in der Lage sein, die Datenbank zu finden und mit ihr zu kommunizieren. Die Konfiguration von Websphere wurde an Hand der Beschreibung in [ WE1 ] durchgeführt. In einzelnen müssen folgende Dateien angepasst werdent • was.conf Datei Konfiguration der OS/390 Systemumgebung • Websphere Startskript • httpd.envvars Datei 28 5.2.1.1 was.conf Datei Damit Websphere den JDBC Connector verwenden kann, wird in der Konfigurationsdatei /konfig/was.conf) der Pfad zu den JDBC was.conf (s. Abbildung 13, Treiberdateien von DB2 an die Classpath Eigenschaft angehängt (Zeile 8 und 9). Zusätzlich benötigt Websphere noch den Pfad zu den DLLs (für den JDBC Connector), er wird der Libpath Eigenschaft hinzugefügt (Zeile 14). (1)ncf.jvm.classpath=/web/serv1/ApplServer/lib/ibmwebas.jar: (2) /web/serv1/ApplServer/lib/jst.jar: (3) /web/serv1/ApplServer/lib/jsdk.jar: (4) /web/serv1/ApplServer/lib/x509v1.jar: (5) /web/serv1/ApplServer/lib/xml4j.jar: (6) /web/serv1/ApplServer/lib: (7) /web/serv1/ApplServer/web/classes: (8) /usr/lpp/java/J1.1/lib/classes.zip: (9) /usr/lpp/db2/db2510/classes/db2jdbcclasses.zip (10) (11)ncf.jvm.libpath= /usr/lpp/java/J1.1/lib: (12) /usr/lpp/java/J1.1/lib/mvs/native_threads: (13) /web/serv1/ApplServer/lib: (14) /usr/lib:/usr/lpp/db2/db2510/lib Abbildung 13 - /web/serv1/ApplServer/properties/was.conf /konfig/was.conf 5.2.1.2 Websphere Startskript Das Websphere Startskript ( /konfig/wasStartskript.txt) musste ebenfalls geändert werden. Da dieser Teil der Konfiguration sehr schwierig war, wurde das StandardStartskript kopiert und umbenannt. Immer wenn es Fehlkonfigurationen gab, konnte dann auf das vorherige Startskript zurückgegriffen werden. (1)//******************************************************** (2)//STEPLIB DD DSN=DSN510.SDSNLOAD,DISP=SHR (3)// DD DSN=DSN510.SDSNEXIT,DISP=SHR (4)//SYSIN DD DUMMY (5)//OUTDSC OUTPUT DEST=HOLD (6)//* ------------------ * (7)//* Starting variables * (8)//* ------------------ * (9)//WENV DD PATH='/web/serv1/httpd.envvars_X' Abbildung 14 - Websphere Startskript /konfig/wasStartskript.txt Letztendlich waren die notwendigen Änderungen das Einfügen der STEPLIP Variable (s. Abbildung 14, Zeile 2) und das Setzen des Dateinamens für die Umgebungsvariablen auf httpd.envvars_X (s. Abbildung 14, Zeile 9). Konfiguration der OS/390 Systemumgebung 29 5.2.1.3 httpd.envvars Datei Die Datei httpd.envvars ( /konfig/httpd.envvars_X) enthält die Umgebungsvariablen für den Webserver. Wie bereits in Kapitel 5.1.1.3 für die .profile Datei eines Benutzers, werden auch hier die Umgebungsvariablen für die JDBC Treiberklassen und DLLs (s. Abbildung 15, Zeile 1-4) gesetzt. Außerdem wird die zu verwendende CLI Konfigurationsdatei (s. Abbildung 15, Zeile 5) angegeben. (1)LIBPATH=/usr/lpp/internet/bin:/usr/lpp/internet/sbin: /usr/lpp/ldap/lib: /usr/lpp/java/J1.1/lib/mvs/native_threads: /usr/lpp/db2/db2510/lib (2)LD_LIBRARY_PATH=/usr/lpp/db2/db2510/lib:$LD_LIBRARY_PATH (3)CLASSPATH=.:/usr/lpp/internet/server_root/CAServlet: /usr/lpp/java/J1.1/lib/classes.zip: /usr/lpp/db2/db2510/classes/db2jdbcclasses.zip (4)STEPLIB=DSN510.SDSNLOAD:DSN510.SDSNEXIT (5)DSNAOINI=/usr/lpp/db2/db2510/dsnaoini Abbildung 15 - /web/serv1/httpd.envvars_X /konfig/httpd.envvars_X Die Konfiguration von Websphere war sehr zeitaufwändig, da eine relativ frühe Version (1.2) von Websphere auf dem OS/390 Server installiert war. Außerdem war die Webanbindung von DB2 mit Servlets noch recht neu, deshalb gab es auch wenig Erfahrung mit der hier geschilderten Software Konstellation. Nach der erfolgreichen Konfiguration kann die Funktionalität mit Hilfe eines HelloWorld /java/SMJDBCTestServlet.java) verifiziert werden. Der JDBC Zugriff Servlets ( zum Testen läuft vollkommen analog zum HelloWorld Java Programm ( /java/SMJDBCTestPrg.java) ab. Das Servlet produziert nur noch einen HTML Rahmen um die Programmausgaben. Entwicklungsumgebung auf der Workstation 30 6. Entwicklungsumgebung auf der Workstation Grundsätzlich kann die Entwicklung der Java Programme auch auf dem OS/390 Server, z.B. unter Benutzung des ISPF Texteditors, durchgeführt werden. Da die Entwicklung auf einer Workstation mit einer modernen Integrated Development Environment (IDE) viele Vorteile für den Programmierer bietet, wurde für diese Diplomarbeit alternativ Visual Age for Java von IBM, sowie Eclipse verwendet. Es handelt sich dabei um IDEs für Java, die gegenüber der OS/390 Entwicklungsumgebung viele Vorteile haben. Einige der wichtigsten sind: 1. Durch GUI basierte Entwicklung werden Klassen- und Projektstrukturen übersichtlich dargestellt. 2. Die IDE bietet Hilfen zum Refactoring an, z.B. automatisches Umbenennen einer Klasse und aller Referenzen auf sie. 3. Nutzung eines Debuggers um Laufzeitfehler aufzuspüren. 4. Integration eines Webservers und damit die Möglichkeit, Servlets und JSP Seiten zu debuggen. 5. Einfache Einbindung vieler Tools, wie z.B. CVS (Concurrent Version System) zur Versionskontrolle, UML Entwicklungsumgebungen, ... . 6. Die Möglichkeit, verschiedene JDKs für verschiedene Projekte zu benutzen und ein Projekt zu Testzwecken mit verschiedenen JDKs zu kompilieren. 7. Integrierte Hilfe, sowohl zum vom Programmierer erstellten Quellcode (Highlighting von Variablen und Anzeige des Variablentyps), als auch zum JDK. Da nicht alle Features auf beide IDEs zutreffen, folgt ein kurzer Vergleich der Entwicklungsumgebungen. 6.1 Eclipse vs. Visual Age for Java Visual Age, aktuell in der Version 4 verfügbar, wurde von IBM entwickelt. Als großer Pluspunkt von VisualAge for Java ist sicherlich die integrierte Websphere Testumgebung zu sehen. Servlets, JavaBeans und JSPs lassen sich sofort in der Entwicklungsumgebung ausführen und debuggen. Der eingebaute inkrementelle Compiler ermöglicht sog. „HotCode Replace“: Der Quelltext lässt sich bereits im laufenden Betrieb modifizieren und erneut testen, ohne dass ein Neustart erforderlich ist. Vor allem bei der Entwicklung von Servlets und EJBs ist dies ein großer Vorteil, da das zeitaufwändige Starten des Web Application Servers entfällt. Speziell für die Entwicklung von Anwendungen für das OS/390 Betriebssystem ist die Unterstützung des Common Connector Framework (CCF) und die damit verbundene hohe Verfügbarkeit von Connectoren für unterschiedliche Backendsysteme wichtig. Das CCF stellt eine gemeinsame Infrastruktur für die einzelnen Connectoren zur Verfügung. Entwickelt wurde es von IBM, derzeitig entwickelt Sun es unter dem Namen J2EE Connector Architecture (JCA) zu einer Standardschnittstelle der Java 2 Enterprise-Edition. Entwicklungsumgebung auf der Workstation 31 Als zusätzlichen Vorteil stellt VisualAge eine umfangreiche Menge an Code-Generatoren zur Verfügung, angefangen bei der Erstellung von Attributen, Methoden oder Klassen bis hin zur Entwicklung von grafischen Benutzungsoberflächen, Servlets oder EJBs. Der Entwickler wird durch eine Reihe von dialogbasierten Assistenten unterstützt. Auch die Anbindung an andere Programmiersprachen, wie beispielsweise C++, oder die Integration von Backend-Systemen läuft durch die Verwendung von entsprechenden Assistenten weitestgehend automatisiert ab [ SCH ]. Trotz dieser Vorteile hat die Entwicklungsumgebung auch einige Schwächen, die den Einsatz in der Praxis manchmal etwas schwierig gestalten. Als Erstes ist hier zu kritisieren, dass von VisualAge 4.0 immer noch das bereits veraltete JDK 1.2.2 unterstützt wird, obwohl von Sun bereits neuere Versionen des JDK zur Verfügung stehen. Außerdem ist der EJBStandard 1.1 noch nicht vollständig implementiert [ SCH ]. Ein weiterer Nachteil ist, dass in Visual Age alle Java Dateien in einem Repository abgelegt werden, das nicht dateibasiert ist. Zwar kann dadurch die Versionierung der Java Klassen sehr fein abgestimmt werden, allerdings müssen andere Ressourcen anderweitig verwaltet werden. In der Praxis wird deshalb trotz der Nachteile (keine vollständige Integration in VA, evtl. auch doppelte Datenhaltung) oft auf externe Systeme, wie z.B. CVS zurückgegriffen. Allerdings enden mit der Version 4 sämtliche Weiterentwicklungen an VisualAge for Java. IBM wird in Zukunft alle Java Entwicklungsumgebungen auf Basis des Eclipse Frameworks erstellen [ WE2 ]. Es beinhaltet neben einem komfortablen Text Editor mit Syntax Highlighting, Such- und Ersetzungsfunktionen auch die Möglichkeit zur Anbindung an gängige Software Configuration Management (SCM)-Systeme, wie z.B. CVS. Darüber hinaus ist Eclipse so entwickelt, dass die verwendete Java-Laufzeitumgebung für jedes Werkzeug bzw. jede Zielplattform unabhängig gewählt werden kann. Ebenfalls interessant ist, dass Eclipse selbst in Java entwickelt wurde. Daraus ergeben sich einige Vorteile, wie beispielsweise die Unabhängigkeit von der Zielplattform. Durch die Verwendung einer eigens entwickelten Klassenbibliothek für die GUI Programmierung (Standard Widget Toolkit) wurden die oft bei Java Programmen entstehenden Performance Probleme elegant umgangen. Um die Entwicklung und Integration von Zusatzwerkzeugen durch unabhängige Hersteller noch schneller voranzutreiben, hat IBM das Framework als freie Software zur Verfügung gestellt. Das zugehörige Open Source Projekt heißt Eclipse.org, weiterführende Information findet man auf der Internetseite [ ECL ]. Dort kann die Entwicklungsumgebung kostenlos herunterladen werden. Dass dieses Konzept aufgeht, scheint die schnell wachsende Nutzerzahl von Eclipse zu bestätigen. Es befinden sich bereits zahlreiche Unterprojekte in der Entwicklung, z.B. Entwicklungsumgebungen für C/C++ und Cobol [ ECL ]. Außerdem sind viele Plugins erhältlich. Die Application Server BEA Weblogic, IBM Websphere und der, in der Diplomarbeit auf der Workstation verwendete, Tomcat können mit Hilfe von Plugins integriert werden. Da Eclipse als OpenSource Software verfügbar ist, bietet es sich vor allem für den Praktikumbetrieb an. 6.2 Installation von VisualAge for Java und Eclipse Die Arbeitsumgebung ist bei beiden IDEs sehr ähnlich. Bei der Entwicklung von Java Programmen wird der Code komplett in der IDE ausgeführt. Soll ein Servlet entwickelt werden, gibt es einige Unterschiede (s. Abbildung 16). Bei beiden IDEs wird ein Web Application Server integriert, der das Ausführen und Debuggen der Servlets ermöglicht. Bei Entwicklungsumgebung auf der Workstation 32 Visual Age ist die Websphere Testumgebung bereits enthalten, es wird keine separate Webserver Installation benötigt. Eclipse verlangt dagegen eine vollständige Installation von Apache Tomcat, der dann über ein Plugin den Servlet Code ausführt. Die Websphere Testumgebung bzw. Tomcat erfüllen dann dieselben Aufgaben wie Websphere auf dem OS/390 Server (bereits erläutert in Kapitel 4.3.4). Der Zugriff auf die OS/390 Datenbank findet bei beiden IDEs mit Hilfe des Hit Treibers oder dem IBM Windows JDBC Treiber in Verbindung mit DB2Connect statt. Über das Internet kann dann mit dem TCP/IP Protokoll auf die DB2 Datenbank zugegriffen werden. Abbildung 16 - JDBC Zugriff aus einem Servlet in den Entwicklungsumgebungen auf der Workstation Da die Installationsanleitung in Form eines Tutorials [ TU3 ] für den Praktikumbetrieb vorliegt, wird hier nicht näher auf die einzelnen Installationsschritte eingegangen. Die Tutorials sind im Anhang aufgeführt. Allerdings ist anzumerken, dass die Installation ohne größere Probleme ablief, sofern jeweils die richtigen Programmversionen verwendet wurden. Durch die Verwendung des gleichen JDKs (Version 1.1.8) auf der Workstation und auf dem OS/390 Server kann sichergestellt werden, dass Programme, die auf der Workstation fehlerfrei kompiliert werden, dies auch auf dem Mainframe tun. Es muss nur darauf Entwicklungsumgebung auf der Workstation 33 geachtet werden, dass der für das Betriebssystem richtige JDBC Treiber eingebunden wird. Mit den folgenden Programmen und Servlets wird darüber hinaus verifiziert, dass der, auf einer Windows Workstation kompilierte, Java Bytecode auf dem OS/390 Server sofort (ohne Neukompilierung) ausgeführt werden kann. In den beiden folgenden Kapiteln 6.3 und 6.4 wird zuerst der Ablauf eines JDBC Zugriffs und die verwendeten Komponenten erklärt. Anschließend werden die technischen Details und die eigentliche Programmierung erläutert. 6.3 Zugriff von der Entwicklungsumgebung auf eine OS/390 Datenbank Um auf einer Workstation zu programmieren und dabei die OS/390 Subsysteme zu benutzen, werden Connectoren verwendet. IBM liefert nur einen JDBC API Connector für DB2 auf Windows und OS/390. JDBC auf dem OS/ 390 Betriebssystem baut auf der Distributed Relational Database Architecture (DRDA) auf. Dabei handelt es sich um auf der OS/390 Seite verwendete Protokolle, die zur Verbindung von RDBMS verwendet werden [ KO2 ]. Da der Windows Treiber DRDA nicht unterstützt, kann mit dem JDBC Connector nicht ohne zusätzliche Software von einer Windows Workstation auf einen OS/390 Server zugegriffen werden. Abbildung 17 - JDBC Connectoren unter Windows Im Wesentlichen gibt es deshalb zwei Möglichkeiten, von einer Workstation mit JDBC auf eine DB2 Datenbank zuzugreifen (s. Abbildung 17). Zum einen bietet IBM DB2Connect an. Dabei handelt es sich um ein Tool das den Zugriff auf eine OS/390 Datenbank (unter Verwendung des IBM Windows JDBC Connectors) ermöglicht. Zum anderen kann ein JDBC Java Connector von einem Drittanbieter benutzt werden. In dieser Arbeit wird der von Entwicklungsumgebung auf der Workstation 34 IBM empfohlene Treiber der Firma Hit benutzt. Die Verwendung sowie die Vor- und Nachteile beider Möglichkeiten werden in den folgenden zwei Kapiteln näher erläutert. Die Installation beider Möglichkeiten liegt ebenfalls als Tutorial vor [ TU2 ] [ TU3 ]. Eine weitere Möglichkeit ist die Nutzung von SQLJ zum Datenbankzugriff. SQLJ greift auf die JDBC Treiber (für den Programmierer transparent) zu, um in den Java Quellcode eingebettete, statische SQL Statements mit einem Präprozessor zu überprüfen und zu kompilieren. Da es sich um statische SQL Anweisungen handelt, ist SQLJ performanter als JDBC. SQLJ hat jedoch Softwarevoraussetzungen, die in der derzeitigen Version des OS/390 Servers der Universität Leipzig nicht gegeben sind. 6.3.1 DB2 Zugriff mit DB2Connect Abbildung 18 - Zugriff auf eine OS/390 Datenbank mit DB2Connect [ KO4 ] Um die bereits beschriebene Problematik mit DRDA zu umgehen, kann die Software DB2Connect von IBM verwendet werden. Eine Workstation, auf der DB2Connect installiert ist, ermöglicht den Zugang zu DB2 Datenbanken auf Servern mit folgenden Betriebssystemen: MVS/ESA, OS/390, OS/400, VM, VSE, Windows NT, UNIX und OS/2 [ KO4 ]. Dabei wird von DB2Connect sozusagen ein Datenbankproxy emuliert, der die Konvertierungen zwischen der Datenbank und den Klienten vornimmt. Dafür wird einmalig zu jeder genutzten Datenbank eine Verbindung definiert. Darin wird das Entwicklungsumgebung auf der Workstation 35 Serverbetriebssystem, der Servername bzw. die IP Adresse, der DB2 Subsystemname, das verwendete Protokoll usw. gespeichert. Die Klienten benutzen dann den IBM Windows JDBC Treiber und greifen damit auf eine in DB2Connect definierte Verbindung zu. Für die Klienten ist DB2Connect transparent, d.h. für den Klienten ist diese Verbindung nicht von einer direkten Verbindung zur Datenbank zu unterscheiden. DB2Connect transformiert die SQL Anfragen in das entsprechende Format für das entsprechende Betriebssystem und leitet die Anfrage dann weiter. Die Antwort vom Server wird für den Klienten aufbereitet und dann weitergeleitet. Für den Programmierer hat das den Vorteil, dass er mit einer einzigen Installation von DB2Connect und dem IBM Windows JDBC Treiber auf DB2 Datenbanken auf den verschiedensten Servern zugreifen kann. DB2Connect gibt es auch in der Enterprise Edition. Sie wird auf einem DB2Connect Server installiert, über den Workstations ohne eigene DB2Connect Installation auf OS/390 Datenbanken zugreifen können. Da bei dieser Lösung auf dem Klienten und auf dem Server Typ 1 Connectoren verwendet werden, ist sie sehr performant. 6.3.2 DB2 Zugriff mit Hit JDBC Treiber Die Firma Hit bietet einen (kostenpflichtigen) JDBC Treiber an, mit dem auf DB2 Datenbanken auf OS/390 zugegriffen werden kann. Der Treiber ist vollständig in Java programmiert und wird als jar-Datei in den Classpath eingebunden. Zu der oben vorgestellten Variante mit DB2Connect ändert sich nur wenig. Da mit dem Hit Treiber direkt auf die DB2 Datenbank zugegriffen wird, ändert sich die URL der Datenbank. Der Vorteil des Hit Treibers ist, dass er sehr leicht mit den entwickelten Programmen mitgeliefert werden kann und es praktisch keinen Installationsaufwand gibt. Wenn ein CVS System verwendet wird, reicht es, bei richtiger Konfiguration, das entsprechende Projekt aus dem CVS auszuchecken. Außerdem ist diese Lösung vollkommen betriebssystemunabhängig. Es ist sogar möglich, auf dem OS/390 Server den Hit Treiber zu verwenden. Aus Performancegründen ist dies aber nicht sinnvoll. 6.3.3 Test der Installation mit JUnit Tests Um eine einfache Überprüfung der Installation der Entwicklungsumgebung und aller benötigten Klassen zu ermöglichen, wird eine, zu diesem Zweck programmierte, JUnit /java/TestInstall.java) eingesetzt, die mit jedem Connector eine Testklasse ( Verbindung aufbaut und sofort wieder schließt. Dabei wird überprüft, ob die Verbindung zustande kommt. Sollte einer oder beide Connectoren nicht funktionieren, wird eine entsprechende Fehlermeldung ausgegeben. Vor allem für die Verwendung im Praktikum ist diese Testklasse sehr nützlich, da dort regelmäßig Neuinstallationen von Studenten durchgeführt werden und diese einfach und automatisch auf die korrekte Funktionalität geprüft werden können. Zum Verständnis der Testklasse wird kurz erläutert, wie ein JUnit Test aufgebaut ist. Für eine umfangreichere Einführung in das JUnit Framework lohnt sich ein Blick auf die Homepage von JUnit [ JUN ], speziell das Tutorial [ WES ] ist für Einsteiger sehr nützlich. Entwicklungsumgebung auf der Workstation 36 Das JUnit Framework stellt einige Super-Klassen zur Verfügung. Für diesen Test ist nur die Klasse TestCase von Bedeutung. Von den vererbten Methoden sind die assert Methoden die Wichtigsten. Mit assert Funktionen werden Annahmen formuliert, die JUnit automatisch verifizieren wird. In der Klasse TestInstall (s. Abbildung 19) wird damit z.B. in Zeile 3 mit assertTrue geprüft, ob die Funktion connectionTest True zurückgibt und gegebenenfalls eine entsprechende Fehlermeldung ausgegeben. (1)public void testDrivers() { (2) // Windows => teste beide Connectoren , hit + DB2Connect (3) assertTrue( (4) "Hit Treiber funktioniert nicht!", (5) connectionTest( (6) "hit.db2.Db2Driver", (7) "jdbc:db2://jedi.informatik.unileipzig.de:446;rdbname=DBA1")); (8) assertTrue( (9) "DB2Connect funktioniert nicht", (10) connectionTest( (11) "COM.ibm.db2.jdbc.app.DB2Driver", (12) "jdbc:db2:DBA1")); (13) } (14) public boolean connectionTest(String driver, String url) { (15) try { (16) Connection con; (17) Class.forName(driver); (18) con = DriverManager.getConnection(url, user, password); (19) if (con == null) (20) return false; (21) else (22) con.close(); (23) } catch (Exception e) { (24) e.printStackTrace(); (25) return false; (26) } (27) return true; (28) } Abbildung 19 - TestInstall.java /java/SMJDBCTestPrg.java Beim Aufruf mit dem JUnit Framework werden in einer von TestCase abgeleiteten Klasse (hier:TestInstall) alle Funktionen, deren Namen mit „test“beginnen, in einer zufälligen Reihenfolge ausgeführt. Die grafische Oberfläche zeigt dann an, ob Tests fehlgeschlagen sind und wenn ja, welche (s. Abbildung 20). Für zusätzliche Informationen kann eine vom Programmierer vorgegebene, dynamisch erzeugte Fehlermeldung ausgegeben werden. Wird die TestInstall Klasse mit JUnit ausgeführt, startet das Framework die Funktion testDrivers. In testDrivers wird mit der Methode assertTrue überprüft, ob die Funktion connectionTest True zurückliefert. Es werden einmal die entsprechenden Parameter für den Hit Treiber und einmal für DBConnect übergeben. Die Funktion Entwicklungsumgebung auf der Workstation 37 connectTest lädt jeweils den Treiber und macht eine Verbindung zur übergebenen URL auf. Kann die Verbindung hergestellt werden, wird True zurückgegeben. Abbildung 20 - Der JUnitinstallationstest war erfolgreich, erkennbar am grünen Balken! Sind alle Tests erfolgreich durchgelaufen, meldet sich JUnit mit einem grünen Balken (s. Abbildung 20). Unter Eclipse ist das Ausführen des Tests besonders einfach, da dort JUnit bereits integriert ist. Entwicklungsumgebung auf der Workstation 38 6.4 Programmierung 6.4.1 HelloWorld Java Programm 1. // Treiber und URL an die Benutzerauswahl anpassen: 2. if (sDriver.equals("1")) { 3. //OS/390 4. Class.forName("ibm.sql.DB2Driver"); 5. // Verbindung herstellen 6. con = DriverManager.getConnection("jdbc:db2os390:DBA1", user, 7. password); 8. } else if (sDriver.equals("2")) { 9. // Hit Connector 10. Class.forName("hit.db2.Db2Driver"); 11. // Verbindung herstellen 12. con = DriverManager.getConnection( 13. "jdbc:db2://jedi.informatik.uni-leipzig.de:446;rdbname=DBA1", 14. user, 15. password); 16.} else if (sDriver.equals("3")) { 17. // IBM Windows Connector 18. Class.forName("COM.ibm.db2.jdbc.app.DB2Driver"); 19. // Verbindung herstellen 20. con = DriverManager.getConnection("jdbc:db2:DBA1", user, 21. password); Abbildung 21 - SMJDBCTestPrg.java /java/SMJDBCTestPrg.java Nachdem die Installation auf der Workstation und dem OS/390 Server durchgeführt und verifiziert wurde, kann mit dem kompletten Produktionsablauf begonnen werden. Als erstes wird dies mit einem HelloWorld ( /java/SMJDBCTestPrg.java) Programm getestet. Es handelt sich dabei um eine modifizierte Version des Beispielprogramms, das in Kapitel 5 verwendet wurde (s. Abbildung 21). Dieses Programm fragt den Benutzer nach dem zu verwendenden Connector und führt dann die bereits in Kapitel 5 beschriebene SQL Abfrage auf eine DB2 Systemtabelle durch. Der wichtigste Teil der Erweiterung ist das dynamische Laden des JDBC Connectors und das Setzen der Datenbank URL. In Zeile 4 wird beispielsweise der OS/390 JDBC Connector geladen und dann in Zeile 5 damit eine Verbindung zur Datenbank aufgebaut. Für den Hit (Zeile10-15) bzw. den IBM Windows Connector (Zeile 18-21) wird jeweils ein anderer Treibername und eine andere URL verwendet. Durch die Benutzereingabe wird eine der drei Alternativen ausgeführt und mit dem entsprechenden Connector eine Verbindung zur Datenbank hergestellt. 6.4.1.1 Test in der Entwicklungsumgebung Bei dem Test eines HelloWorld Programmes sind die Vorteile der Benutzung einer modernen Entwicklungsumgebung noch nicht so offensichtlich, da das Programm einfach zu kurz ist, als dass viele Probleme, wie z.B. Laufzeitfehler, auftreten würden. Trotzdem kann mit dem Debugger zum Test und besseren Verständnis das Programm Zeile für Zeile abgearbeitet werden. Nach dem Start des Programms in der Eclipse Entwicklungsumgebung erscheint in der Console die Aufforderung, einen Connector auszuwählen, in Abbildung 22 wird durch Eingabe der „2“der Hit Treiber zum Zugriff Entwicklungsumgebung auf der Workstation 39 Abbildung 22 - Java Programm auf der Workstation mit JDBC Zugriff auf DB2 verwendet. Nach einem erfolgreichen Programmdurchlauf sieht man das erste Mal auf der Workstation Daten, die aus der OS/390 DB2 Datenbank ausgelesen wurden (in Abbildung 22 in den Zeilen nach der Ausgabe **** JDBC Resultset Created). 6.4.1.2 Export in die Produktionsumgebung Nach der erfolgreichen Ausführung des Programms ist als nächster Schritt das Exportieren in die Produktionsumgebung geplant. Dabei gibt es grundsätzlich zwei verschiedene Möglichkeiten: Entweder man exportiert den Quellcode und kompiliert ihn auf dem OS/390 Server, oder man exportiert gleich die Class Dateien und spart sich das erneute Kompilieren auf dem Server. Bei beiden Methoden werden die Dateien mit Hilfe eines FTP Programms übertragen. In der Diplomarbeit wird WSFTP Pro benutzt. Mit der kostenlosen Version WSFTP LE können die hier beschriebenen Einstellungen ebenfalls verwendet werden. An dieser Stelle treten auch einige OS/390 spezifische Probleme auf. Zuerst muss sich der FTP Klient auf dem Mainframe einloggen. Dabei ist es wichtig zu wissen, dass es verschiedene Möglichkeiten gibt, wo man auf dem OS/390 Server nach dem Login landet. Auf Grund der vorliegenden Konfiguration des OS/390 Servers hat man, nach dem üblichen Eingeben von IP Adresse, Login und Passwort, erstmal das OS/390 System vor sich. Dies erkennt man an der Darstellung von OS/390 Datensätzen in der Form DATASETNAME.MEMBER (s. Abbildung 23). Entwicklungsumgebung auf der Workstation 40 Abbildung 23 - FTP Zugriff auf den OS/390 Server Da Java und Websphere aber unter den USS laufen, müssen einige Einstellungen an dem FTP Programm vorgenommen werden, um auf das HFS (vgl. Kapitel 4.3.3 und 4.3.4) zuzugreifen. Durch die richtige Angabe eines externen Anfangsordners kann man erzwingen, mit dem FTP Programm auf das HFS der USS zuzugreifen. In diesem Fall ist der richtige Eintrag das Benutzerverzeichnis /u/stefanm (s. Abbildung 24). Abbildung 24 - Externen Anfangsordner festlegen Außerdem muss die automatische Erkennung des Hosttyps ausgeschaltet und von Hand Unix gewählt werden (s. Abbildung 25). Entwicklungsumgebung auf der Workstation 41 Abbildung 25 - Hosttyp Unix vorgeben Nach diesen Einstellungen und einer erneuten Aufnahme der Verbindung, greift man nun auf das angegebene Homeverzeichnis im HFS unter den USS zu (s. Abbildung 26). Abbildung 26 - FTP Zugriff auf das HFS des OS/390 Servers Nun kann mit dem Übertragen der Dateien begonnen werden. Dabei ist zu beachten, dass bei Text Dateien eine Konvertierung von ASCII nach EBCDIC vorgenommen werden muss. Es ist deshalb wichtig, entweder von Hand auf eine korrekte Einstellung des FTP Programms zu achten, oder dem FTP Programm in den Einstellungen mitzuteilen, dass es sich bei Dateien mit der Endung „java“um Textdateien handelt (s. Abbildung 27). Jetzt sind alle wichtigen Einstellungen des FTP Programms vorgenommen, es kann mit dem Export der Dateien begonnen werden. Nach dem erfolgreichen Upload der Dateien kann die .class Datei sofort auf dem OS/390 Server ausgeführt werden. Die .java Datei muss zuerst kompiliert werden; dabei sind jedoch keine Änderungen am Quellcode notwendig. Entwicklungsumgebung auf der Workstation 42 Abbildung 27 - Übertragungsmodus im FTP Programm einstellen Um das hochgeladene Programm zu testen, muss man sich unter Verwendung des QWS3270 Klienten (vgl. Kapitel 4.2) auf dem OS/390 Server einloggen und in die USS Shell wechseln. Am schnellsten erreicht man dies durch die Eingabe des TSO Kommandos tso omvs. Da die in dieser Arbeit entwickelten Programme in Packages organisiert sind, wird das Programm mit folgendem Aufruf gestartet: java sm390.SMJDBCTestPrg ( /java/SMJDBCTestPrg.java) Nach dem Programmstart wählt man durch die Eingabe von „1“den OS/390 JDBC Connector. Das Programm führt dann die bereits erklärte Testabfrage auf eine Systemtabelle durch und gibt die Namen aller Tabellen aus (s. Abbildung 28). Wie erwartet, erzeugt das Programm auf dem OS/390 Server die gleiche Ausgabe wie auf der Workstation. Entwicklungsumgebung auf der Workstation 43 Abbildung 28 - Java Programm auf dem OS/390 Server 6.4.2 HelloWorld Java Servlet Der nächste Schritt ist, das Javaprogramm in ein Servlet umzuprogrammieren. Dabei wird ein HTML Rahmen für die Programmausgabe erstellt und die bisher durch Texteingabe zu tätigende Auswahl in Formularfelder umgewandelt. Damit auf der Workstation das Servlet ausgeführt werden kann, muss zusätzlich ein Servlet Container installiert und konfiguriert sein (vgl. Abbildung 16, Kapitel 6.2). Die Entwicklungsumgebung startet den Servlet Container und führt darin den Code des Servlets aus, dabei kann das Servlet jederzeit mit dem Debugger unterbrochen bzw. Schritt für Schritt abgearbeitet werden. 6.4.2.1 Test in der Entwicklungsumgebung Wie beim Test des Javaprogramms, kann das Servlet komplett auf der Workstation getestet, ausgeführt und debuggt werden. Es wird nur noch ein Browser benötigt, mit dem das Servlet aufgerufen werden kann. In Visual Age kann der Browser direkt per Mausklick auf die Serverklasse mit der richtigen URL gestartet werden. Das Servlet wird dann sofort angezeigt. In Eclipse muss von Hand im Browser die richtige URL aufgerufen werden. Als Server muss localhost (für die Entwicklungsworkstation) und Port 8080 angegeben werden, damit die lokale Tomcat Installation die Anfrage beantwortet. Die URL sieht für das /java/SMJDBCTestServlet.java) folgendermaßen aus: HelloWorld Servlet ( http://localhost:8080/servlet/sm390.SMJDBCTestServlet Nach der Angabe des Servers und Ports folgt das Schlüsselwort servlet/ das Tomcat mitteilt, dass es sich bei der URL um ein Servlet handelt. Am Ende steht der Packagename und der Name der Servletklasse, die durch einen „.“getrennt sind. Entwicklungsumgebung auf der Workstation 44 Sobald das Servlet fehlerfrei läuft, kann mit dem Übertragen der Dateien auf den OS/390 Server begonnen werden. 6.4.2.2 Export in die Produktionsumgebung Der Export in die Produktionsumgebung unterscheidet sich kaum vom Export des Javaprogramms. Da das Servlet von Websphere ausgeführt wird, muss es in das Servletverzeichnis von Websphere kopiert werden oder das Homeverzeichnis, in dem das Servlet liegt, in den Classpath von Websphere übernommen werden. Letzteres hat aber einen gravierenden Nachteil: Meist ist aus Performancegründen nur für das Websphere Servletverzeichnis der automatische Reload von geänderten Servlets aktiviert. D.h. Servlets in anderen Verzeichnissen werden nur einmal kompiliert, selbst wenn eine geänderte Version erneut hochgeladen wird. Diese neue Version wird erst nach einem Neustart von Websphere kompiliert und angezeigt. Da die wenigsten Benutzer das Recht haben, Websphere neu zu starten, und der Neustart für jeden Servletupload auch nicht sinnvoll ist, sollte das Servlet in das Websphereservletverzeichnis übertragen werden. Deshalb bleiben alle Einstellungen des FTP Programms gleich wie in Kapitel 6.4.1.2, nur das Zielverzeichnis wird auf: /web/serv1/ApplServer/servlets geändert. Das übertragene Servlet kann durch Aufrufen der URL http://jedi.informatik.unileipzig.de/servlet/sm390.SMJDBCTestServlet in einem Browser angezeigt werden. Gerade beim Upload auf den Server sollte bei der Behebung von evtl. auftretenden Laufzeitfehlern auf den Browser und Server Cache geachtet werden. Es empfiehlt sich, z.B. durch die Ausgabe einer Debugmeldung mit einer Versionsnummer, zu kontrollieren, dass der Server bereits die neueste Version anzeigt. Gästebuch Servlet 45 7. Gästebuch Servlet Nach dem erfolgreichen Test der Entwicklungsumgebung und des Exports in die Produktionsumgebung soll eine einfache Anwendung mit Hilfe der bereits verifizierten Abläufe programmiert werden. Ein Gästebuchservlet bietet sich auf Grund der Anforderungen an ( /java/GuestBookServlet.java): 1. Persistenz ist zwingend notwendig. 2. Es demonstriert, wie man eine OS/390 Datenbank anlegt und auf sie zugreift. 3. Die Anwendung (und damit der Quellcode ) ist trotz der oben genannten Anforderungen überschaubar. Als erstes müssen die Anforderungen an die Datenbank spezifiziert werden. Für die Gästebuchanwendung wird nur eine Tabelle benötigt, in der die Informationen zu den einzelnen Einträgen gespeichert sind. Folgende Felder werden benötigt: • email-Adresse des Eintragenden • Name des Eintragenden • Eintragstext • Eintragsdatum Alle Felder außer dem Eintragsdatum werden als String mit unterschiedlicher Länge angelegt (vgl. Abbildung 32, Zeile 2-5). Für das Eintragsdatum eignet sich der Typ TIMESTAMP, da darin ein Datum und eine Uhrzeit gespeichert werden (vgl. Abbildung 32, Zeile 6). Nach dieser Spezifikation wird eine DB2 Datenbank mit einer Tabelle angelegt. Beim Anlegen der Datenbank sind einige Besonderheiten zu berücksichtigen. Eine Einführung in die DB2 Datenbank ist unter [ VIS ] zu finden. Besondere Eigenschaften der OS/390 Version sind in [ SLO ] abgehandelt. Neben den üblichen Angaben, z.B. Feldspezifikationen, Namen der Datenbank und der Tabelle, müssen drei zusätzliche Definitionen erstellt werden. Diese Definitionen enthalten: 1. Art, Ort (Bereich auf einem von mehreren Plattenspeichern), Größe und Eigenschaften des Speicherplatzes, der die Datenbank aufnehmen soll. Dieser Speicherplatz wird als Storage Group bezeichnet und erhält einen symbolischen Namen. 2. Eine Datenbank speichert normalerweise einen Teil der aktiven Daten innerhalb des Hauptspeichers temporär ab (Cache). Dieser Cache wird allgemein als Bufferpool bezeichnet und erhält ebenfalls einen symbolischen Namen. 3. Eine relationale Datenbank besteht aus mindestens einer, meistens aber aus mehreren Tabellen (Relationen). Für jede Tabelle muss Speicherplatz, als Tablespace bezeichnet, reserviert werden. Dieser erhält ebenfalls einen symbolischen Namen [ TU1 ]. Zuerst wird mit dem SQL Statement in Abbildung 29 der Speicherplatz (Storage Group) festgelegt: Gästebuch Servlet 46 (1)CREATE STOGROUP STOGR1 VOLUMES (SCPMV5) VCAT DSN510; Abbildung 29 - SQL Statement zum Erstellen der STORAGE GROUP Die Angaben für VOLUMES und VCAT sind installationsspezifisch und müssen vom Systemadministrator vorgegeben werden. Für den in der Diplomarbeit verwendeten OS/390 Server gelten die Werte (SCPMV5) und DSN510. Die Datenbank DIPLGB wird in dem zuvor reservierten Speicherplatz angelegt (s. Abbildung 30). (1)CREATE DATABASE DIPLGB STOGROUP STOGR1 BUFFERPOOL BP0; Abbildung 30 - SQL Statement zum Erstellen der Datenbank Der zugewiesene Hauptspeicher Cache (BUFFERPOOL) mit dem Namen BP0 exisitiert bereits und kann von der neu angelegten Datenbank mitbenutzt werden. Damit die für das Gästebuch benötigte Tabelle in der Datenbank angelegt werden kann, muss noch der benötigte Tablespace angelegt werden (s. Abbildung 31). (1)CREATE TABLESPACE SPAGB IN DIPLGB (2) USING STOGROUP STOGR1 (3) PRIQTY 20 (4) SECQTY 20 (5) ERASE NO (6) BUFFERPOOL BP0 (7) CLOSE NO; Abbildung 31 - SQL Statement zum Erstellen des Tablespace Nachdem auch diese Definition erfolgreich angelegt wurde, kann die benötigte Tabelle erstellt werden. Bei dem CREATE Statement muss auf jeden Fall die Datenbank und der verwendete Tablespace angegeben werden (s. Abbildung 32, Zeile 6). (1)CREATE TABLE GUESTBOOK ( (2) EMAIL CHAR(100), (3) NAME CHAR(200), (4) COMMENT LONG VARCHAR, (5) CMT_DATE TIMESTAMP (6) ) IN DIPLGB.SPAGB; Abbildung 32 - SQL Statement zum Erstellen der Tabelle Durch diese Definitionen erhält man eine hohe Kontrolle über das Verhalten jeder einzelnen Datenbank, es gibt aber vor allem für Einsteiger mehr potentielle Fehlerquellen. Nach dem Anlegen der für das Gästebuchservlet benötigten Tabelle, müssen noch die Zugriffsrechte gesetzt werden. Damit auch der Webserver auf die Tabelle zugreifen kann, bekommt die Benutzergruppe PUBLIC die Rechte zum Ändern und Anzeigen der Tabellendaten. Hierfür wird das SQL Statement in Abbildung 33 ausgeführt. Gästebuch Servlet 47 (1)GRANT UPDATE,SELECT ON STEFANM.GUESTBOOK TO PUBLIC Abbildung 33 - SQL Statement zum Festlegen der Zugriffsrechte Jetzt kann die Entwicklung auf der Workstation beginnen. Um sicherzustellen, dass von der Workstation ebenfalls auf die Tabelle zugegriffen werden kann, wird das HelloWorld Servlet so modifiziert, dass es auf die neu generierte Tabelle zugreift. Die, in Abbildung 34 abgedruckte, Änderung beschränkt sich auf das SQL Statement zum Auslesen der Gästebuchtabelle. (1) // SQL Query zum Zugriff auf die Tabelle des Gästebuchs: (2)String sStdSql = "SELECT name, email, cmt_date, comment " + "FROM STEFANM.GUESTBOOK ORDER BY cmt_date"; Abbildung 34 - SQL Statement zum Zugriff auf die Gästebuch Tabelle /java/GuestBookServlet.java Damit besteht bereits ein rudimentäres Gerüst, um die bestehenden Einträge anzuzeigen. Um auch neue Einträge anlegen zu können, muss die ausgegebene HTML Seite um ein Formular mit Eingabefeldern und das Servlet um eine Funktion, die neue Einträge in die Datenbank speichert, erweitert werden. Die Programmierung des Servlets ist vollkommen unabhängig vom OS/390 Betriebssystem. Einen Screenshot der fertigen Gästebuch Applikation zeigt Abbildung 35. /java/GuestBookServlet.java) ( Um den Aufwand für einen Export in die Produktionsumgebung möglichst gering zu halten, wird im Servlet dynamisch der JDBC Treiber geladen und die URL zur Datenbank gesetzt. Durch Auslesen der Systemeigenschaft os.name wird das verwendete Betriebssystem, hier OS/390 oder Windows, bestimmt. Abhängig vom Betriebssystem wird dann der richtige JDBC Treiber geladen und die URL in einer globalen Variablen gespeichert (s. Abbildung 36, Seite 49). Gästebuch Servlet Abbildung 35 - Gästebuch Servlet auf dem OS/390 Server 48 /java/GuestBookServlet.java Nach einem letzten Funktionstest wird das Servlet auf den OS/390 Server übertragen. Der Upload wird, wie bereits in Kapitel 6.4.2.2 dargestellt, durchgeführt. Das Servlet ist ohne Anpassungen sofort funktionsfähig. Das Servlet kann unter der URL: http://jedi.informatik.unileipzig.de/servlet/sm390.GuestBookServlet aufgerufen werden. 49 (1)private void loadJDBCDriver() throws ServletException { (2) environment = System.getProperties().getProperty("os.name"); (3) String db2Driver = null; (4) (5) // Treiber und URL entsprechend dem Betriebssystem wählen: (6) if (environment.equals("OS/390") || environment.equals("z/OS")) { (7) // OS/390 (8) driverName = "ibm.sql.DB2Driver"; (9) jdbcURL = "jdbc:db2os390:DBA1"; (10) } else if (environment.startsWith("Win")) { (11) // Windows (mit DB2Connect) (12) driverName = "COM.ibm.db2.jdbc.app.DB2Driver"; (13) jdbcURL = "jdbc:db2:DBA1"; (14) } (15) try { (16) driver = (Driver) Class.forName(driverName).newInstance(); (17) } catch (Exception e) { (18) throw new ServletException( (19) "Konnte DB Treiber nicht laden: " + e.getMessage()); (20) } (21) // Benutzername und Passwort für den JDBC Zugriff (22) connectionProperties.put("user", "stefanm"); (23) connectionProperties.put("password", "sorrynopwdhere"); (24) } Abbildung 36 - Dynamische Auswahl des JDBC Treibers an Hand des Betriebssystems /java/GuestBookServlet.java Zusammenfassung und Ausblick 50 8.Zusammenfassung und Ausblick Bei der Programmierung des Gästebuchservlets hat sich gezeigt, dass auch komplexe Anwendungen, die auf der Workstation programmiert werden, auf dem OS/390 Server problemlos und ohne Änderungen funktionieren. Natürlich können auf dem OS/390 Betriebssystem auch Laufzeitprobleme auftreten, die auf der Workstation nicht vorhanden sind, z.B. hervorgerufen durch die ASCII/EBCDIC Problematik [ SP2 ]. In diesem Zusammenhang existieren in der OS/390 Umgebung umfangreiche Möglichkeiten für automatische Tests. Zusätzlich ermöglicht die relativ leichte und plattformunabhängige Integration von Backendsystemen mit Hilfe von Connectoren gute Möglichkeiten, bestehende OS/390 Anwendungen und Daten an das Internet anzubinden. Außerdem hat sich bei der Entwicklung auf der Workstation vor allem der Debugger positiv bemerkbar gemacht. Mit dem Debugger konnte bei technischen Problemen auf dem OS/390 Server schnell und sicher mit Hilfe der DB2 bzw. Websphere Dokumentation die Ursache gefunden werden. Ab einer gewissen Größe eines Projekts ist schon alleine die Darstellung und leichte Navigation in einer modernen Entwicklungsumgebung eine wesentliche Arbeitserleichterung. IBM bietet noch zwei weitere Tools an, die für große Projekte eine Arbeitserleichterung versprechen. Die Installation und Konfiguration war in dieser Diplomarbeit leider nicht mehr möglich. Diese sind: Mit dem Distributed Debugger für Visual Age for Java von IBM kann ein Javaprogramm während der Ausführung auf dem OS/390 Server von einer Workstation aus debuggt werden. Dabei ist es möglich Laufzeitfehler, die bei der Ausführung auf der Workstation noch nicht auftraten, nachzuvollziehen. Dies ist eine gute Möglichkeit, um die oben beschriebenen Probleme mit den ASCII/EBCDIC Formaten aufzuspüren. Mit dem Performanceanalyzer kann eine Anwendung auf das Laufzeitverhalten unter vorgegebener Last untersucht werden. Dies ist zum Test einer fertigen Anwendung ebenso nützlich wie zu einem Vorabtest, ob eine bestimmte Funktionalität unter hoher Last überhaupt verwendbar ist. Gerade bei JDBC kann, vor allem bei schlechter Programmierung, das Laufzeitverhalten sehr ungünstig ausfallen. Wenn bereits vor dem Projektbeginn klar ist, welche Technologie (nicht) funktioniert, kann wertvolle Entwicklungszeit gespart werden. Während der Entwicklung können mit dem Performanceanalyzer potentielle Flaschenhälse aufgespürt, im Laufzeitverhalten überprüft und evtl. verbessert werden. Der Einsatz dieser Werkzeuge wäre eine interessante Fortsetzung dieser Arbeit. Literaturverzeichnis 51 9. Literaturverzeichnis 9.1 Referenzen aus Zeitschriften und Büchern [ ALM ] Maria Sueli Almeida, Charles E. Lewis, Uwe Sager, Pilar Sandoval: Accessing DB2 for OS/390 Data from the World Wide Web. IBM International Technical Support Organization, November 1998. SG24-5273-00. [ HER ] Dr.rer.nat. Paul Herrmann, Prof. Dr.rer.nat. Udo Kebschull, Prof. Dr.-Ing. Wilhelm G. Spruth: Einführung in z/OS und OS/390. Oldenbourg-Verlag, Oktober 2002, ISBN 3-48627214-4. [ KEB ] Dr.rer.nat. Udo Kebschull, Prof. Dr.-Ing. Wilhelm G. Spruth: Kommerzielle Großrechner als Ausbildungsaufgabe an Universitäten und Fachhochschulen. SpringerVerlag, Informatik Spektrum, Band 24, Heft 3, Juni 2001. [ KO1 ] Alex Louwe Kooijmans, Sonia Armengol, Montse Batalla, Dr. Abbas Birjandi, Vaughn Burton, Patricia Lobao Pettersson, Thomas Nolting, Mats Pettersson: Java Programming Guide for OS/390. IBM International Technical Support Organization, Dezember 1999. SG24-5619-00. [ KO2 ] Alex Louwe Kooijmans, Egide Van Aerschot, Mark Cathcart, Antonio Lopriore, Frederic Mora, Elba van Zyl: Integrating Java with Existing Data and Applications on OS/390. IBM International Technical Support Organization, Juli 1998. SG24-5142-00. [ KO3 ] Alex Louwe Kooijmans, Kjell Andersen, Amr Khafagy, Simon McNab, Patrick Ryan, Neil Shah: e-business Enablement Cookbook for OS/390 Volume II: Infrastructure for Javabased Solutions. IBM International Technical Support Organization, Dezember 2000. SG245981-00. [ KO4 ] Alex Louwe Kooijmans, Felipe Liberman, Georg Nozicka: e-business Enablement Cookbook for OS/390 Volume III: Java Development. IBM International Technical Support Organization, Dezember 2000. SG24-5980-00 [ SLO ] Susan Sloan, Kilty Hernandez: An Introduction to DB2 for OS/390 Version 7. Prentice Hall, 2001. [ TUR ] Volker Turau, Krister Saleck, Marc Schmidt: Java Server Pages undJ2EE. dpunkt.verlag, 2001. [ VIS ] Susan Visser: DB2 Universal Database. SAMS Macmillan Computer Publishing, April 1998. 9.2 Internet Referenzen Da bei den Internet Referenzen nicht sichergestellt werden kann, dass sie auch weiterhin unter den angegebenen Links existieren, enthält die beigefügte CD Spiegelungen aller referenzierten Internet Dokumente. Außerdem können die Dokumente über die Homepage: http://www-ti.informatik.uni-tuebingen.de/~csp/diplom/munz Literaturverzeichnis abgerufen werden. [ AND ] Glenn Anderson: Migration Strategies for WebSphere on OS/390 and z/OS. http://www.share.org/proceedings/sh97/data/S2962.PDF [ CAL ] IBM: Call Level Interface Guide and Reference. ftp://ftp.software.ibm.com/software/db2storedprocedure/db2zos390/v5books/Dsncl0f6.pdf [ CIC ] IBM: CICS – Powering 20 billion transactions a day across the world. 2000. http://www.hursley.ibm.com/infopack/A33578.pdf [ ECL ] Eclipse Homepage. http://www.eclipse.org [ GRA ] Jim Gray: How High is High Performance Transaction Processing? Oktober 1999. http://research.Microsoft.com/~Gray/Talks/HPTS99.ppt [ JA1 ] Sun: The Java Tutorial. http://java.sun.com/docs/books/tutorial/index.html [ JA2 ] Sun: Java Servlet API - Story of a Servlet: An instant tutorial http://java.sun.com/products/servlet/articles/tutorial/ [ JUN ] JUnit Homepage. http://www.junit.org [ OLI ] M.F. Oliver: Java Positioning Paper. März 2000. http://www-1.ibm.com/servers/eserver/zseries/software/java/position.html [ SCH ] Stefan Schäffer, Walter Schilder: Im Blickpunkt: VisualAge for Java 4.0 und sein Nachfolgeprodukt. JavaMagazin - Sonderdruck, Ausgabe 12.2001. http://www.ars.de/ars/ars.nsf/files/pdf-artikel/$file/javamagazin-wsad.pdf [ SP1 ] Prof. Dr.-Ing. Wilhelm G. Spruth :Client Server Systeme – Internetanwendungen unter OS/390. http://www-ti.informatik.uni-tuebingen.de/os390/foils/intro01.pdf [ SP2 ] Prof. Dr.-Ing. Wilhelm G. Spruth: Client Server Systeme. http://www-ti.informatik.uni-tuebingen.de/os390/foils/uss01.pdf [ TU1 ] Tutorial 4 DB2. http://jedi.informatik.uni-leipzig.de/nils/tutor4.pdf [ TU2 ] Tutorial 8 Installation von DB2Connect. http://jedi.informatik.uni-leipzig.de/degner/tutor8.pdf [ TU3 ] Tutorial 9 Zugriff auf eine DB2 Datenbank über DB2Connect mittels Java unter Verwendung von JDBC. http://jedi.informatik.uni-leipzig.de/degner/tutor9.pdf [ TU4 ] Tutorial 10 Zugriff auf DB2 mittels eines OS/390 Rechners. http://jedi.informatik.uni-leipzig.de/degner/tutor10.pdf 52 Literaturverzeichnis [ WE1 ] IBM: WebSphere Application Server for OS/390: Requirements for using the Application Server with DB2. http://www-3.ibm.com/software/webservers/appserv/doc/os390/wasdb2.pdf oder http://www-3.ibm.com/software/webservers/appserv/doc/os390/wasdb2.htm [ WE2 ] IBM: Websphere Studio Workbench Homepage http://www-3.ibm.com/software/ad/workbench/about/ [ WES ] Frank Westphal: Unit Testing mit JUnit. Oktober 2002. http://www.frankwestphal.de/UnitTestingmitJUnit.html 53 Anhang 54 10. Anhang Der gesamte Anhang sowie die Diplomarbeit selbst ist auf der beigelegten CD im HTMLbzw. PDF-Format gespeichert. Auf einem Windows PC sollte nach dem Einlegen der CD der Standardbrowser automatisch mit dem Inhaltsverzeichnis als HTML Datei geöffnet werden. Das Inhaltsverzeichnis kann auch von Hand aufgerufen werden, indem die Datei index.html im Hauptverzeichnis der CD gestartet wird. Der CD Inhalt ist außerdem auf folgender Internetseite gespeichert: http://www-ti.informatik.uni-tuebingen.de/~csp/diplom/munz/ 10.1 Inhaltsverzeichnis der CD Der folgende Überblick enthält die Verzeichnis- und Dateistruktur der CD. Es werden nur die Dateien bzw. Verzeichnisse aufgelistet, die ein Benutzer direkt anwählen muss. Am einfachsten können alle Dateien aber über das bereits erwähnte Menü geöffnet werden. Verzeichnisse sind in der Form /Verzeichnisname relativ zum Hauptverzeichnis der CD angegeben. Unterverzeichnisse und Dokumentnamen sind eingerückt dargestellt. /java GuestBookServlet.java sample01.java SMJDBCTestPrg.java SMJDBCTestServlet.java TestInstall.java /konfig .profile db2jdbc.cursors dsnaoini httpd.envvars_X was.conf wasStartskript.txt /literaturverzeichnis /AND/S2962.PDF /CAL/Dsncl0f6.pdf /CIC/A33578.pdf /ECL/index.html /GRA/HPTS99.ppt /JA1/index.html /JA2/index.html /JUN/index.html /OLI/index.html /SCH/javamagazin-wsad.pdf /SP1/intro01.pdf Quellcode aller Java Programme bzw. Servlets Gästebuchservlet Beispielprogramm für einen JDBC Zugriff auf DB2 von IBM Test Programm für JDBC Zugriff Test Servlet für JDBC Zugriff Testklasse zum Überprüfen der JDBC Connectoren Konfigurationsdateien auf dem OS/390 Server Konfigurationsdatei für die JDBC Cursor CLI Konfigurationsdatei Konfigurationsdatei für die Umgebungsvariablen des Webservers Websphere Konfigurationsdatei Websphere Startskript Internet Referenzen. Es befindet sich jeweils eine Referenz in einem Verzeichnis. Die Namensgebung orientiert sich an den Abkürzungen in Kapitel 9.2 Anhang /SP2/uss01.pdf /TU1/tutor4.pdf /TU2/tutor8.pdf /TU3/tutor9.pdf /TU4/tutor10.pdf /WE1/wasdb2.pdf /WE2/index.html /WES/index.html 55 Glossar 56 11. Glossar ASCII American Standard Code for Information Interchange Code zur Darstellung von Zeichen als Zahlen, wird vor allem auf Computern mit Windows, Mac oder UNIX Betriebssystemen verwendet. CLI Call Level Interface Beim DB2 CLI handelt es sich um eine C/C++ API die Funktionen zur Verarbeitung von dynamischen SQL Statements zur Verfügung stellt CCF Common Connector Framework DLL Dynamic Link Library EBCDIC Extended Binary Coded Decimal Interchange Code IBM Code zur Darstellung von Zeichen als Zahlen, wird auf dem OS/390 Betriebssystem verwendet. GUI Grafische Benutzeroberfläche, engl.:Graphical User Interface HPCJ High Performance Compiler for Java IDE Integrated Development Environment ISPF Interactive System Productivity Facility OS/390 Subsystem, arbeitet im Fullscreen Modus, d.h. es können Änderungen an verschiedenen Stellen des Bildschirms mit nur einer Kommunikation zum System durchgeführt werden. Außerdem bietet die ISPF dem Benutzer zahlreiche Utilities und Programmierunterstützungen. JDBC Java Database Connectivity JSP Java Server Page RDBM Relationales Datenbanksystem, engl.: Relational Database Management System SSID Subsystem Identifier USS Unix System Services Ein in das OS/390 Betriebssystem integriertes, vollständiges UNIX Betriebssystem. Unter den USS läuft z.B. der in der Diplomarbeit verwendete Websphere Application Server.