Tutorial 8 mit Tomcat
Transcription
Tutorial 8 mit Tomcat
Tutorial 8 – v03 Tutorial 8 Eclipse, Tomcat, JDBC, SQLJ, DB2Connect Copyright © Abt. Computersysteme, Institut für Informatik, Universität Leipzig 1. Einführung 1.1 Übersicht 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 denen neue Anwendungen entstehen, und dem/den Rechner(n) einer Produktionsumgebung, auf denen die Anwendung später einmal laufen sollen. Entwicklungen erfolgen meistens im Team. Die Entwickler haben jeder einen eigenen 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 wird. Auf dem Repository-Rechner laufen Funktionen wie die zentrale Steuerung des Entwicklungsprojektes, Versionsverwaltung, 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. (Wir vernachlässigen an dieser Stelle die Tatsache, dass in der Regel nicht in die Produktionsumgebung, sondern in eine Testumgebung exportiert wird, die in Bezug auf Hard- und Software der Produktionsumgebung möglichst ähnlich ist). Die Software der Entwicklungsumgebung sieht ganz anders aus als die Software der Produktionsumgebung. Als Entwicklungsrechner werden Windows XP/Vista-Rechner oder LinuxRechner eingesetzt. Das Repository befindet sich in der Regel auf einem getrennten Unix, Linux oder Windows XP/Vista Rechner. Bei der Produktionsumgebung unterscheiden wir zwischen einer 2-Tier- und einer 3-TierKonfiguration. Bei der 2-Tier-Konfiguration laufen alle Anwendungen auf dem zentralen z/OSRechner. Bei der 3-Tier-Konfiguration läuft ein Teil der Anwendungen (Business Logik) auf einem getrennten Unix- oder Windows XP Rechner/Server; auf dem z/OS-Rechner befindet sich die zentrale Datenhaltung (z.B. DB2) und evtl. ein Teil der Anwendungen (z.B. 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. Abbildung 1 zeigt diese Zusammenhänge. Wir wollen diesen Entwicklungsprozess nachvollziehen. Es soll ein Java-Programm erstellt werden, welche als Servlet auf eine z/OS DB2-Datenbank zugreifen. Dieses Java-Programm wird in einer Windows XP/Vista-Entwicklungsumgebung erstellt und soll entweder unter z/OS oder auf einem Middle Tier-Rechner ausgeführt werden. Im letzteren Fall greifen sie über das Netz auf die z/OS DB2Datenbank zu. Im Falle dieses Tutorials werden wir eine simulierte 3-Tier Umgebung einsetzten (s. Abbildung 2). Für den Datenbank-Zugriff existieren vorgefertigte Java-Klassen, die als „Connectoren“ bezeichnet werden. Wir verwenden zwei unterschiedliche Connectoren: JDBC und DB2Connect. JDBC ist ein universeller Connector für den Zugriff auf beliebige relationale Datenbanken. Die Universalität hat ihren Preis; das Leistungsverhalten kann unzureichend sein. DB2Connect ist für die DB2-Datenbank optimiert und in Produktionsumgebungen häufig die bessere Alternative. 1 Tutorial 8 – v03 Abbildung 1 Als Entwicklungsumgebung (auch als Workbench oder als IDE – Integrated Development Environment - bezeichnet) verwenden wir das Open Source-Produkt Eclipse . Vergleichbare Entwicklungsumgebungen existieren von vielen anderen Herstellern. Eclipse hat den Vorteil, dass es vergleichbar mit Apache – sehr weit verbreitet ist.. In einem späteren Tutorial werden wir eine als WDz (WebSpere Studio for System z) bezeichnete Eclipse Erweiterung (ein sog. Eclipse Plug-in) einsetzen. Das vorliegende Tutorial behandelt einen JDBC/SQLJ-Zugriff auf die DB2-Datenbank des z/OSRechners 134.2.205.54 mit Hilfe eines JDBC Connectors. Wir erzeugen eine .class Datei (ein Servlet), die in einer normalen Java Virtual Maschine (JVM) läuft. Unser Servlet benötigt eine ServletLaufzeitumgebung (Servlet Engine). Wir verwenden hierfür den public Domain Tomcat Web Application Server. Das vorliegende Tutorial 8wird durch ein weiteres Tutorial 9 ergänzt, welches WebSphere anstatt Tomcat als Applikationsserver benutzt. Aufgabe: Arbeiten Sie das nachfolgende Tutorial durch. Installieren Sie, wie in diesem Tutorial beschrieben, alle zusätzlichen notwendigen Softwarekomponenten. Diese befinden sich im AFS unter /afs/informatik.uni-tuebingen.de/ti/client-server/stuff/aufgabe5. Zum Entpacken der Archive kann zum Beispiel 7-Zip benutzt werden. Das Passwort zum Entpacken der Archive erhalten Sie vorab von Ihren Tutoren. Für den externen Download eignet sich unter Windows am Besten WinSCP. 2 Tutorial 8 – v03 1.2 Aufgabenstellung Die beiden vorliegenden Tutorials (Tutorials 8 und 9) ermöglichen es, die Infrastruktur für eine eBusiness Anwendungsumgebung einzurichten. Die Präsentationslogik und Businesslogik ist in einem Servlet enthalten. Das Servlet greift über Konnektoren und das Internet auf eine DB2-Datenbank zu, die auf dem z/OS-Rechner 134.2.205.54 bereits installiert ist. Abbildung 2 Die oberste der drei Komponenten von Abbildung 2 zeigt die Testumgebung, die in diesem und dem nächsten Tutorial entwickelt wird. Hierbei greift das Servlet über einen JDBC-Konnektor auf die DB2Datenbank zu. Diese Konfiguration ist leicht zu einer echten 3-Tier-Konfiguration erweiterbar, bei der unser Windows XP/Vista-Entwicklungsrechner die Aufgabe des Middle-Tiers übernimmt (mittlere der drei Abbildungen). 3 Tutorial 8 – v03 1.3 Theorie der eingesetzten Technologien In diesem Kapitel werden wir uns mit der eingesetzten Technologie beschäftigen. Dieses Kapitel wird wie folgt aufgegliedert: 1. JDBC & SQLJ 2. JDBC-Treiberarchitektur 3. DB2Connect 1.3.1 JDBC & SQLJ JDBC und SQLJ sind eine Sammlung von Schnittstellen die es Java Programmen ermöglichen mit relationalen Datenbanken zu Kommunizieren. Die Besonderheit dieser Schnittstellen ist allerdings der hohe Abstraktionsgrad. Gemeint ist hiermit, dass der Anwendungsentwickler, unabhängig welche Datenbank am anderen Ende steht, seine Anwendung entwickeln kann. Hierbei realisiert JDBC einen dynamischen und SQLJ einen statischen Zugriff. Weitere Infos zu dem Thema JDBC & SQLJ bekommen sie aus dem Redbook: „DB2 for z/OS and z/OS: Ready for Java“, download at http://www.redbooks.ibm.com/abstracts/sg246435.html 1.3.2 JDBC-Treiberarchitektur In der JDBC-Spezifikation werden 4 Arten von Treibern ermöglicht (Quelle: DB2 for z/OS and z/OS: Ready for Java, IBM.com/redbooks) Typ-1-Treiber Ein JDBC-Typ-1-Treiber kommuniziert ausschließlich über einen JDBC-ODBC-Bridge-Treiber. Die bekannteste JDBC-ODBC-Bridge ist die von Sun vertriebene. Damit ist ein Typ-1-Treiber abhängig von einem installierten ODBC-Treiber. Der JDBC-ODBC-Bridge-Treiber wandelt JDBC- in ODBCAnfragen um. 4 Tutorial 8 – v03 Typ-2-Treiber Ein Typ-2-Treiber kommuniziert über eine plattformspezifische Programmbibliothek auf dem Client mit dem Datenbankserver. Das bedeutet, dass für jede Betriebssystem-Plattform zu dem Typ-2-Treiber eine zusätzliche Programmbibliothek benötigt wird. Typ-3-Treiber Mittels des Typ-3-Treibers werden die JDBC-API-Befehle in generische DBMS-Befehle übersetzt und (über ein Netzwerkprotokoll) an einen Middleware-Treiber auf einem Anwendungsserver übertragen. Erst dieser Anwendungsserver transformiert die Befehle für die spezifischen Datenbankserver und leitet sie an diese weiter. Ein Typ-3-Treiber benötigt damit keine plattformspezifischen Bibliotheken und muss auch nichts über den verwendeten Datenbankserver wissen. Typ-4-Treiber Beim Typ-4-Treiber werden die JDBC-API-Befehle direkt in DBMS-Befehle des jeweiligen Datenbankservers übersetzt und (über ein Netzwerkprotokoll) an diesen übertragen. Ein MiddlewareTreiber wird dabei nicht verwendet. Damit kann ein Typ-4-Treiber schneller als ein Typ-3-Treiber sein, ist aber weniger flexibel. Innerhalb von Tutorial 8 und 9 werden wir uns mit den Typ-4 Treiber von DB2Connect beschäftigen. 1.3.3 DB2Connect DB2Connect ist das IBM-Produkt, für Datenbankanbindungen an eine DB2-Datenbank. Es ist kein geschlossenes Produkt, sondern als eine riesige Bibliothek zu verstehen, mit deren Hilfe alle wichtigen Programmiersprachen Zugriff auf eine DB2-Datenbank bekommen. DB2Connect realisiert alle Treiber die in Abschnitt 1.3.2 genannt worden sind mit einer Ausnahme, und zwar Typ1. Der Grund hierfür ist dass dieser Treiber als veraltet gilt und nicht mehr in Gebrauch ist. Spezifisch liefert DB2Connect die folgenden Treiber aus: API Driver Embedded SQL Language specific pre-compiler DB2 CLI DB2 CLI driver ODBC DB2 CLI driver OLE DB DB2 OLE DB provider ADO DB2 OLE DB provider ADO.NET DB2 NET Data provider JDBC DB2 JDBC driver (several types are offered) SQLJ DB2 JDBC driver (several types are offered) 5 Tutorial 8 – v03 1.4 Installations-Voraussetzungen und Vorbereitung Diese Installation nimmt an, dass sich auf einem (möglicherweise Multiboot-) Rechner eine Partition H: befindet, auf der eine frische Kopie von Windows XP installiert ist. Wird eine andere Partition benutzt, muss der entsprechende Buchstabe anstelle von H: benutzt werden. Dieser Rechner soll als Klient für den z/OS-Server 134.2.205.54 dienen. Einloggen auf dem Windows Rechner erfolgt für den Benutzer administrator mit Administrator-Rechten (wichtig!) Ihr Administrator besitzt eine DVD, auf der sich alle für dieses und die beiden folgenden Tutorials benötigten Programme befinden. Legen Sie auf Ihrem Rechner ein temporäres Verzeichnis an, und Kopieren Sie die folgenden Verzeichnisse von der DVD: DB2Connect DB2Connect Driver only Eclipse jdk Tomcat Websphere Das Tutorial besteht aus den folgenden 6 Abschnitten: 1. Einführung (dieser Abschnitt) 2. JDK-Installation 3. Eclipse-Installation 4. Tomcat installieren 5. Projekt erstellen mit Tomcat 6. Projekt ausführen Die Abschnitte 2 – 4 beschäftigen sich mit der Installation unserer Umgebung. Eclipse ist die von uns benutzte Entwicklungsumgebung. Tomcat ist ein von Eclipse unabhängiger Web Application Server, der eine Servlet Engine beinhaltet und damit eine Laufzeitumgebung für die Ausführung von Servlets zur Verfügung stellt. In Abschnitt 5 und 6 wird unter Eclipse Servlet-Anwendung erstellt. Diese wird nach Tomcat exportiert und dort ausgeführt. Das Servlet bewirkt einen Zugriff auf eine DB2 Datenbank, die sich auf dem z/OS V 1.8 Rechner 134.2.205.54 befindet. Es wird unterstellt, dass sie vor Ausführung dieses Tutorials das Tutorial Nr. 4 durchgeführt und dort eine kleine DB2 Datenbank angelegt haben. Auf diese Datenbank wird mit 2 unterschiedlichen Servlets einmal mit JDBC und einmal mit SQLJ zugegriffen. Eclipse Servlet Tomcat Internet Z/OS DB2 Eclipse enthält ein Plugin, welches automatisch das unter Eclipse erstellte Servlet für die dortige Ausführung nach Tomcat exportiert. Es werden die folgenden Abkürzungen verwendet: 1k 2k 1kr 2kr bedeutet einmal klicken mit der linken Maustaste bedeutet zweimal klicken mit der linken Maustaste (Doppelklick) bedeutet einmal klicken mit der rechten Maustaste bedeutet zweimal klicken mit der rechten Maustaste (Doppelklick) 6 Tutorial 8 – v03 2. JDK-Installation In diesem Abschnitt wird die Installation des JDK beschrieben. Falls Sie schon eine Version des JDK auf ihrem PC installiert haben (z.B. wegen der früheren Durchführung eines anderen Tutorials), können Sie versuchen, dieses Tutorial mit dieser durchzuführen. Allerdings wäre dann nicht jedes Detail in diesem Tutorial beschrieben. Manches müssten Sie dann eigenständig - abweichend von diesem Tutorial - tun, dies betrifft vor allem das Eintragen von Pfaden von JDK-Bibliotheken. Sie können aber auch ihre bisher installierte JDK-Version sauber deinstallieren und anschließend, wie hier beschrieben, die zu diesem Tutorial dazugehörige Version installieren. Sie benötigen eine Reihe von Programmen, die Sie auf Ihrem Rechner installieren müssen. Bitte wenden Sie sich an Ihren Administrator, der Ihnen die Programme verfügbar machen wird. Das Erste dieser Programme ist der Java Development Kit (JDK). Diese Anweisung nimmt an, dass der JDK auf Partition H: installiert wird. Gegebenenfalls H: durch den korrekten Laufwerksbuchstaben ersetzen. Das hier verwendete Software Paket besteht aus der Datei jdk-6u3-windows-i586-p.exe. Begriffe: J2SE - Java 2 Standard Edition Die Java 2 Standard Edition kann entweder als reine Laufzeitumgebung (JRE) oder als Entwicklungspaket (J2SDK, JDK) heruntergeladen werden. J2EE - Java 2 Enterprise Edition Die Java 2 Enterprise Edition erweitert die Standard Edition um zusätzliche Funktionalitäten, vorallem für Web-Applikation. J2ME - Java 2 Mobile Edition Die Java 2 Mobile Edition ist eine abgespekte Variante für mobile Geräte und existiert in verschiedenen Untervarianten, die Profile genannt werden. Viele Funktionalitäten für DesktopAnwendungen fehlen, dafür gibt es abhängig vom Profil spezielle APIs für mobile Anwendungen. J2SDK - Java 2 Software Development Kit Das Software Development Kit enthält neben der Laufzeitumgebung (JRE) die wichtigsten Kommandozeilen-Entwicklungswerkzeuge wie Compiler, Debugger und Archiver. Ist auf dem Rechner das J2SDK installiert, muss keine separate JRE installiert werden, um JavaProgramme ausführen zu können. JDK - Java Development Kit JDK ist der alte Name für das Software Development Kit. JRE - Java Runtime Environment Die JRE ist die Laufzeitumgebung. Sie ist erforderlich, um Java-Programme ausführen zu können. JavaVM - Java Virtual Machine JavaVM ist das Kernstück der Laufzeitumgebung. Dient zum Ausführen von Java-Bytecode. JRE = JVM + einige Standard Libraries (Klassen wie z.B. awt,swing...). JVM ist eigentlich nur eine Specification für die Ausführung von Bytecode + Sicherheitseinrichtungen. Ausgeliefert und installiert wird jre für unterschiedliche Plattformen (Betriebssystem, Hardware wie System z, Pentium etc.). 7 Tutorial 8 – v03 Unter H:\programme das Unterverzeichnis H:\programme\jdk anlegen. In dieses Verzeichnis die Datei jdk-6u3-windows-i586-p.exe kopieren. Windows Explorer aufrufen. In das Verzeichnis H:\programme\jdk wechseln. Mit der linken Maustaste Doppelklick auf jdk-6u3-windows-i586-p.exe accept Abbildung 3 Keine Änderung Next 1k yes 1k Next 1k finish 8 Tutorial 8 – v03 Im Verzeichnis h:\programme\java sollten sich jetzt die beiden folgenden Unterverzeichnisse befinden: jdk1.6.0_03 jre1.6.0_03 H:\Programme\Java>dir jdk1.6.0_03 Volume in Laufwerk H: hat keine Bezeichnung. Volumeseriennummer: 5CC1-ED06 Verzeichnis von H:\Programme\Java\jdk1.6.0_03 15.10.2007 15.10.2007 15.10.2007 25.09.2007 15.10.2007 15.10.2007 15.10.2007 15.10.2007 15.10.2007 15.10.2007 15.10.2007 24.09.2007 24.09.2007 24.09.2007 15.10.2007 24.09.2007 24.09.2007 20:39 <DIR> . 20:39 <DIR> .. 20:39 <DIR> bin 01:33 2.539 COPYRIGHT 20:39 <DIR> db 20:39 <DIR> demo 20:38 <DIR> include 20:39 <DIR> jre 20:39 <DIR> lib 20:38 13.471 LICENSE 20:38 19.780 LICENSE.rtf 23:20 26.650 README.html 23:20 24.572 README_ja.html 23:20 18.764 README_zh_CN.html 20:39 <DIR> sample 23:19 19.267.359 src.zip 23:20 180.676 THIRDPARTYLICENSEREADME.txt 8 Datei(en) 19.553.811 Bytes 9 Verzeichnis(se), 44.591.079.424 Bytes frei H:\Programme\Java>dir jre1.6.0_03 Volume in Laufwerk H: hat keine Bezeichnung. Volumeseriennummer: 5CC1-ED06 Verzeichnis von H:\Programme\Java\jre1.6.0_03 15.10.2007 15.10.2007 15.10.2007 25.09.2007 15.10.2007 15.10.2007 15.10.2007 24.09.2007 24.09.2007 24.09.2007 24.09.2007 15.10.2007 24.09.2007 24.09.2007 24.09.2007 15.10.2007 24.09.2007 24.09.2007 24.09.2007 20:40 <DIR> . 20:40 <DIR> .. 20:40 <DIR> bin 01:25 2.539 COPYRIGHT 20:40 <DIR> lib 20:40 11.384 LICENSE 20:40 14.925 LICENSE.rtf 23:12 17.262 LICENSE_de.rtf 23:12 16.338 LICENSE_es.rtf 23:12 16.060 LICENSE_fr.rtf 23:12 15.481 LICENSE_it.rtf 20:40 142.208 LICENSE_ja.rtf 23:12 37.867 LICENSE_ko.rtf 23:12 15.511 LICENSE_sv.rtf 23:12 27.330 LICENSE_zh_CN.rtf 20:40 215.633 LICENSE_zh_TW.rtf 23:12 14.340 README.txt 23:12 180.676 THIRDPARTYLICENSEREADME.txt 23:12 994 Welcome.html 15 Datei(en) 728.548 Bytes 4 Verzeichnis(se), 44.591.079.424 Bytes frei G:\Programme\Java> 9 Tutorial 8 – v03 Start 1k Einstellungen auswählen Systemsteuerung 1k System 2k Erweitert 1k Umgebungsvariablen 1k Abbildung 4 Im Fenster Systemvariablen mit dem Cursor auf die Zeile Path 2k (oder alternativ 1k auf die Zeile Path und 1k auf Bearbeiten im Fenster Systemvariablen). 10 Tutorial 8 – v03 Abbildung 5 Das Fenster Systemvariable bearbeiten erscheint (s. Abbildung 5). Mit dem Cursor in das Feld Wert der Variablen gehen, 1k. Mit der Pfeiltaste " nach links scrollen (oder alternativ die Taste Pos1 drücken). Vor %SystemRoot... den Wert H:\Programme\Java\jdk1.6.0_03\bin; 1k auf OK im Fenster Systemvariable bearbeiten. 11 eingeben; " ganz Tutorial 8 – v03 Abbildung 6 Im Fenster Benutzervariablen für Administrator 1k auf Neu...; 12 Tutorial 8 – v03 Abbildung 7 Jetzt folgendes eingeben (s. Abbildung 7): Ins Feld Name der Variablen: Ins Feld Wert der Variablen: classpath H:\example Klick auf OK schließt das Fenster Neue Benutzervariable. Ein weiterer Klick auf den Button OK des Fensters Umgebungsvariablen schließt auch dieses Fenster. Ein dritter Klick auf den Button OK des Fensters Systemeigenschaften schließt auch dieses dritte Fenster. Schließen Sie alle restlichen Fenster, die noch offen sind und starten Sie den Rechner neu. Hiermit werden die neuen Umgebungsvariablen wirksam. Legen Sie jetzt ein neues Verzeichnis H:\example an. Mit einem beliebigen Editor (1k auf Start Programme auswählen Zubehör auswählen 1k auf Editor) das Programm lt. Abbildung 8 erzeugen. 13 Tutorial 8 – v03 class hallo { public static void main(String[] args) { System.out.println("Hallo Welt really"); } } Abbildung 8 Dieses Programm als Datei hallo.java im Verzeichnis H:\example speichern (1k auf Datei im EditorFenster 1k auf Speichern unter... im Feld Speichern in: in das Verzeichnis H:\example gehen den Dateityp auf Alle Dateien einstellen. Dies ist sehr wichtig, damit der Editor nicht noch ein Suffix .txt unbemerkt anhängt den Programmnamen hallo.java ins Feld Dateiname: eintippen 1k auf Speichern). In einem DOS-Fenster in das Verzeichnis h:\example wechseln. Wir übersetzen das Programm mit dem Befehl javac hallo.java und gedulden uns ein paar Sekunden. Wenn keine Rückmeldung erfolgt (mit Ausnahme des Promptes), war die Übersetzung erfolgreich. Im Verzeichnis H:\example steht jetzt die Datei hallo.class. Jetzt java hallo eingeben. Sie sollten nach ein paar Sekunden die Meldung Hallo Welt really sehen. Damit wurde der JDK erfolgreich installiert. Im Verzeichnis h:\programme\java sollten sich jetzt die beiden folgenden Unterverzeichnisse befinden: jdk1.6.0_03 jre1.6.0_03 3. Eclipse-Installation Gehen sie in das in Abschnitt 1.5 angelegte Verzeichnis Eclipse. Dort finden Sie die Datei wtp-all-in-one-sdk-R-2.0-200706260303-win32.zip. Hierbei handelt es sich um die „WEB TOOLS PLATFORM“ von Eclipse die den Kern von Eclipse und einige Plugins besitzt um eine bessere Entwicklung von Web-Technologien zu gewährleisten, und natürlich auch JAVA. Das Entpacken von wtp-all-in-one-sdk-R-2.0-200706260303-win32.zip kann mittels WinZip oder WinAce geschehen. Wenn noch nicht auf ihrem PC vorhanden, laden Sie Winzip von www.winzip.com oder WinAce von www.winace.de herunter und installieren Sie es. Windows Explorer aufrufen. In das in Abschnitt 1.5 angelegte Verzeichnis Eclipe gehen. 2k auf das Symbol -all-in-one-sdk-R-2.0-200706260303-win32.zip. 14 Tutorial 8 – v03 Die gezippten files werden von Winzip angezeigt. Jetzt extrahieren – 1k on Extract H:\programme auswählen (angenommen, hierhin wollen sie Eclipse installieren) Extract in das Verzeichnis H:\programme – dauert einige Minuten 15 Tutorial 8 – v03 Schritt 1: Eclipse starten. Mit dem Windows Explorer in das Verzeichnis H:\programme\eclipse gehen. 2k auf das folgende Symbol: Sie müssen einen Workspace auswählen. Benutzen Sie den vorgeschlagenen Wert. 16 Tutorial 8 – v03 Nun sollte sie Eclipse mit folgendem Bildschirm begrüßen: Damit ist Eclipse installiert. Schließen sie wieder Eclipse, indem sie rechts oben auf das Kreuzchen klicken. Damit ist Eclipse installiert. 17 Tutorial 8 – v03 4. Tomcat installieren Öffnen sie den Windows Explorer und gehen sie in den Abschnitt 1.5 angelegte Verzeichnis, in welches Sie Tomcat runtergeladen haben. 2k auf apache-tomcat-5.5.23.exe 1k auf Next 1k auf I Agree 18 Tutorial 8 – v03 Keine Änderung. 1k auf Next Nun geben sie an in welches Verzeichnis Tomcat installiert werden soll, normalerweise können sie das empfohlene ohne weiteres akzeptieren. Installation erfolgt in H:\Programme\Apache Software Foundation\Tomcat 5.5 . 1k auf Next Passwort ein geben; 1k auf Next 19 Tutorial 8 – v03 Hier fragt Tomcat nun nach der Java Runtime Edition, er findet sie automatisch während der Installation. 1k auf Next. Nun installiert sich Tomcat. Nachdem die Installation abgeschlossen ist kommen sie zu folgendem Bildschirm: Machen sie die Häkchen weg 20 Tutorial 8 – v03 1k auf Finish 5. Projekt erstellen mit Tomcat Eclipse starten. Mit dem Windows Explorer in das Verzeichnis H:\programme\eclipse gehen. 2k auf das folgende Symbol: 21 Tutorial 8 – v03 Das Welcome Fenster schließen Das Eclipse Hauptfenster (Eclipse Workbench) erscheint.in jungfräulichem Zustand. File new Project 22 Tutorial 8 – v03 1k auf File, 1k New, 1k auf Project, Jetzt sollten sie auf folgende Maske gekommen sein. Hier wählen sie dann WEB und dann Dynamic Web Project. 23 Tutorial 8 – v03 1k auf Next. Hier wird als Erstes ein «TARGET» definiert. Es muss angegeben werden auf welcher Plattform es laufen soll. In unserem Fall ist das Tomcat Nun 1k auf New bei Target Runtime 24 Tutorial 8 – v03 Nun 2k auf Apache, dann 1k auf Tomcat 5.5, dann 1k auf Next 25 Tutorial 8 – v03 Nun 1k auf Browse In diesem Fenster müssen sie das Installationsverzeichnis von Tomcat angeben, danach 1k auf OK 26 Tutorial 8 – v03 Nun einfach nur noch 1k auf Finish Sie kommen auf dieses Fenster zurück. Nur noch den Projektnamen „JDBC“ angeben 1k auf Finish 27 Tutorial 8 – v03 Die Eclipse Workbench wird sie nun Fragen ob sie die Perspektive umschalten wollen. 1k auf YES Nun sollte ihre Ansicht so aussehen Nun kommen wir zum Anlegen der Sources (die Dateien befinden sich am Ende des Tutorials als Anhang) 1kr auf JDBC im Project Explorer Fenster 28 Tutorial 8 – v03 New Servlet 1k Hier geben sie nun den Klassennamen als „JDBC“ an. 1k auf Finish 29 Tutorial 8 – v03 Eclipse erstellt automatisch einen Servlet Prototyp und gibt ihn in dem mittleren Editor Fenster wieder. 30 Tutorial 8 – v03 Drücken sie nun gleichzeitig die STRG und A Tasten um den ganzen Prototyp Code zu markieren, und danach die Entf-/Delete-Taste um damit den von Eclipse automatisch erstellten Code zu löschen. Im Anhang zu diesem Tutorial befindet sich der Quelltext von JDBC.java .Verwenden Sie den Eclipse Editor, um in dem mittleren Fenster genau diesen Code einzutragen. Sie können sich das Leben aber auch einfach machen, indem sie den Quelltext einfach mit Copy and paste in das Editor Fenster kopieren. 31 Tutorial 8 – v03 Schauen Sie sich den Code einmal an: Der Code enthält die üblichen import Statements und startet mit public class JDBC extends HttpServlet { Das Servlet hat 3 Methoden: public void init() throws ServletException { public void destroy() { try { db.close();. public void doGet (HttpServletRequest req, HttpServletResponse res) Die beiden ersten Methoden sind Standard für ein Servlet. Die dritte Methode leistet die eigentliche Arbeit. Hier sehen Sie das Statement try { Class.forName("com.ibm.db2.jcc.DB2Driver"); db = DriverManager.getConnection ("jdbc:db2://134.2.205.54:4019/S1D931","<USERID>","<PASSWORD>"); Es wird eine Verbindung zu dem z/OS Rechner 134.2.205.54 in Tübingen mit Ihrer User ID und Ihrem Passwort hergestellt. Sie müssen in dem Code Ihre eigene User ID und Ihr eigenes Passwort eingeben. In dem hier benutzten Java-Programm wird das Passwort unverschlüsselt wiedergegeben, Ob dies eine gute Idee ist, soll hier nicht diskutiert werden. Etwas weiter unten finden wir das Statement ResultSet RS = Stmt.executeQuery("SELECT * from <USERID>.<TABLEID>"); Es wird unterstellt, dass sie vor Ausführung dieses Tutorials das Tutorial Nr. 4 durchgeführt und dort eine kleine DB2 Datenbank angelegt haben. Auf diese Datenbank wird mit dem Query Statement zugegriffen. Das Statement out.println(RS.getString(1)+ "\t" +RS.getString(2)); bewirkt die Ausgabe des Inhalts Ihrer Datenbank. Die Statements out.println("<h1>JDBCTest</h1>"); out.println("</body></html>"); generieren den Rest der Ausgabe. Es wird vorgeschlagen, dass Sie die letzte geschweifte Klammer entfernen. Dies wird einen Fehler verursachen, den wir anschließend korrigieren werden. 32 Tutorial 8 – v03 Nun kommen wir zum Import der Treiberklassen für die JBDC-Verbindung 33 Tutorial 8 – v03 1k auf JDBC im Project Explorer, dann 1k auf Properties 1k auf Java Build Path 34 Tutorial 8 – v03 1k auf den Reiter Libraries 1k auf Add External JARs 35 Tutorial 8 – v03 Hier müssen sie nun den Pfad angeben an dem sie die Treiber entpackt haben, danach markieren sie alle 3 Dateien und dann 1k auf Open. Es kann auch sein, dass sie an Stelle des obigen Screens den Folgenden bekommen. 36 Tutorial 8 – v03 Gehen Sie zu dem Verzeichnis, in dem sich die drei Dateien Mit gedrückter Strg (bzw. ctrl) Taste alle drei Dateien markieren, und dann Öffnen 37 Tutorial 8 – v03 Jetzt sollten sie diesen Screen sehen. 1k auf OK. Danach sollten sie auf den Eclipse Bildschirm zurückkommen. So sieht das Explorer Fenster aus. ----------------------------------------------------------------------------------------------------------------------------- -------Wir haben Eclipse nun clientseitig die Treiber verfügbar gemacht, damit Eclipse die Java-Datei kompilieren kann. Nun muss aber Tomcat noch die Treiber bekommen, da wir mit Servlets eine serverseitige Ausführung haben. 38 Tutorial 8 – v03 1k unten auf den Reiter Servers, und dann 2k auf Tomcat v5.5 ….. 39 Tutorial 8 – v03 1k auf Open launch configuration 1k auf den Reiter Classpath 40 Tutorial 8 – v03 41 Tutorial 8 – v03 1k auf User entries danach 1k auf Add External JARs Wieder alle 3 Dateien markieren und dann 1k auf Open Es kann die gleiche alternative Bildsequenz erscheinen wie zuvor. 42 Tutorial 8 – v03 1k auf OK Sie sind wieder zurück im Eclipse Hauptbildschirm 43 Tutorial 8 – v03 Nun wollen wir unser Projekt noch um SQLJ erweitern. Dazu muss zuerst das mitgelieferte SQLJ Source File sample02.sqlj mit dem DB2 Precompiler übersetzt werden. Öffnen Sie dazu die Datei sample02.sql und ersetzen Sie die Blöcke <USERID>, <PASSWORD> und <TABLEID> durch Ihre eigenen jeweiligen Werte. Überprüfen Sie außerdem, ob die richtige IPAdresse angegeben ist (134.2.205.54) und ändern Sie sie gegebenenfalls. DB2 Express installieren 44 Tutorial 8 – v03 Öffnen Sie den Windows Explorer und gehen sie in das Verzeichnis, in welches Sie DB2 Express runtergeladen haben. Klicken Sie doppelt auf setup.exe. Es öffnet sich ein Browserfenster mit folgendem Inhalt: Klicken Sie hier im Menü links auf „Installieren eines Produkts“ 45 Tutorial 8 – v03 Klicken Sie auf „Neue Installation“ Klicken Sie auf „weiter“. 46 Tutorial 8 – v03 Akzeptieren Sie die Lizenzvereinbarung und klicken Sie auf „weiter“. Wählen Sie eine „typische Installation“ aus. 47 Tutorial 8 – v03 Übernehmen Sie den Standardwert und klicken Sie auf „weiter“. Klicken Sie auf „weiter“. 48 Tutorial 8 – v03 Wählen Sie „konto für lokales System“ aus und klicken Sie auf weiter. Klicken Sie auf „weiter“. 49 Tutorial 8 – v03 Klicken Sie auf „Fertig stellen“. Der Installationsvorgang wird gestartet. Am Ende erhält man folgenden Screen: 50 Tutorial 8 – v03 “Fertig stellen“ anklicken. Im Ordner C:\Programme\IBM\SQLLIB\BIN befindet sich nun eine Datei sqlj.exe. Sie ist ein Precompiler für das sqlj-Source-File. Öffnen sie eine Konsole und übersetzen Sie nun das abgeänderte SQLJ Source File mit dem DB2 SQLJ Precompiler mit dem Befehl „sqlj sample02.sqlj“. Ihr Ergebnis sollte dann identisch mit obigem Screenshot sein. Sie haben nun das Java Source File sample02.java und das DB2 Serialized Profile sample02.SJProfile0.ser erhalten. Wechseln Sie bitte nun wieder zurück zu Ihrer Eclipse Oberfläche. 51 Tutorial 8 – v03 1kr auf JDBC, dann 1k auf Import, dann 1k auf das nächste Import 52 Tutorial 8 – v03 2k auf General, 1k auf File System 1k auf Next 1k auf Browse von From Directory 53 Tutorial 8 – v03 Wechseln Sie in das Verzeichnis, in welchem Sie das SQLJ Source File mit dem DB2 SQLJ Precompiler übersetzt haben. 1k auf ok 54 Tutorial 8 – v03 Jetzt ein Häkchen machen bei sample02.java und sample02_SJProfile0.ser 1k auf Browse von Input Folder 55 Tutorial 8 – v03 2k auf JDBC, dann 1k auf src , und dann 1k auf OK 56 Tutorial 8 – v03 57 Tutorial 8 – v03 1k auf Finish Eclipse kehrt nun zum Hauptbildschirm zurück 58 Tutorial 8 – v03 1kr auf JDBC im Project Explorer, 1k auf New, 1k auf Servlet 59 Tutorial 8 – v03 Hier als Class Name SQLJ eintragen danach 1k auf Finish Eclipse kehrt nun zum Hauptbildschirm zurück und öffnet die neu erstellte Datei 60 Tutorial 8 – v03 Drücken sie nun gleichzeitig die STRG und A Tasten um den ganzen Prototyp Code zu maktieren, und danach die Entf-/Delete-Taste um damit den von Eclipse automatisch erstellten Code zu löschen. Danach den Code SQLJ.java aus dem Anhang rein kopieren 61 Tutorial 8 – v03 62 Tutorial 8 – v03 6. Projekt ausführen Nun sind sie soweit, alles ist eingestellt und es kann nun ausgeführt werden. 1kr auf JDBC im Project Explorer, dann 1k auf Run As, dann 1k auf Run on Server 1k auf ok 63 Tutorial 8 – v03 1k auf Finish Nun fährt Eclipse Tomcat hoch und startet diesen mit dem Servlet (Die 404 Meldung ist erwartet) 64 Tutorial 8 – v03 Geben sie nun in der Adressleiste hinten einfach noch JDBC ein. Und dann auf Enter drücken 65 Tutorial 8 – v03 Wir erhalten diese oder eine ähnliche schwerwiegende Fehlermeldung. Scroll down in der Console gibt uns den folgenden Hinweis: INFO: Marking servlet JDBC as unavailable 18.10.2007 20:53:21 org.apache.catalina.core.StandardWrapperValve invoke SCHWERWIEGEND: Allocate exception for servlet JDBC java.lang.Error: Unresolved compilation problem: Syntax error, insert "}" to complete ClassBody Erinnern Sie sich? Wir hatten bei der Erstellung des Servlet Codes die letzte geschweifte Klammer gelöscht. Im Explorer Fenster 2k auf JDBC.Java. Dies öffnet den Servlet Code im Editor Fenster. 66 Tutorial 8 – v03 Die rote Markierung gibt uns einen Hinweis auf die fehlende rechte geschweifte Klammer. Wir fügen die fehlende Klammer ein, und speichern das Ergebnis mit gleichzeitiger Betätigung der CTRL und S Tasten ab. Alternativ können wir hierfür auch das Save Icon benutzen. 1kr auf JDBC im Project Explorer, dann 1k auf Run As, dann 1k auf Run on Server Wieder JDBC an die URL anhängen. Nun sollte die folgende Ausgabe erscheinen: 67 Tutorial 8 – v03 Schauen sie sich nochmals den Servlet Code in der Datei JDBC.java an. Was Sie sehen, ist das Ergebnis der beiden Statements try { Statement Stmt = db.createStatement(); ResultSet RS = Stmt.executeQuery("SELECT * from prak004.tab004"); while (RS.next()) { out.println(RS.getString(1)+ "\t" +RS.getString(2)); } RS.close(); Stmt.close(); } catch (SQLException E) { out.println("SQLException: " + E.getMessage()); out.println("SQLState: " + E.getSQLState()); out.println("VendorError: " + E.getErrorCode()); } out.println("<h1>JDBCTest</h1>"); out.println("</body></html>"); 1 2 } Das erste println Statement gibt den Inhalt der DB2 Datenbank wieder. Hier sollten jetzt Ihre Namen stehen. Das zweite println Statement gibt den statischen Text „JDBCTest“ aus . 68 Tutorial 8 – v03 Nun noch zum Testen des SQLJ Programms, anstatt vorher JDBC, einfach SQLJ hinten eingeben. Nun sollte die Ausgabe folgendes liefern Herzlichen Glückwunsch. Sie haben erfolgreich Eclipse und Tomcat installiert, ein Servlet mit Eclipse entwickelt, nach Tomcat exportiert und damit auf die von Ihnen in Tutorial 4 erzeugte Datenbank zugegriffen. Das beendet Tutorial 8. 69 Tutorial 8 – v03 Anhang Quelltext von JDBC.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; @SuppressWarnings("serial") public class JDBC extends HttpServlet { Connection db; String error = ""; public void init() throws ServletException { } public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); ServletOutputStream out = res.getOutputStream(); out.println("<html>"); out.println("<head><title>JDBC</title></head>"); out.println("<body>"); out.println("<br><hr>"); out.println(error); try { Class.forName("com.ibm.db2.jcc.DB2Driver"); db = DriverManager.getConnection("jdbc:db2://134.2.205.54:4019/S1D931","<USERID> ","<PASSWORD>"); } catch (Exception e) { log("Kann keine DB-Verbindung herstellen", e); throw new ServletException("Abfrage: Kann nicht initialisieren: " + e.getMessage(), e); } try { Statement Stmt = db.createStatement(); ResultSet RS = Stmt.executeQuery("SELECT * from <USERID>.<TABLENAME>"); while (RS.next()) { out.println(RS.getString(1)+ "\t" +RS.getString(2)); } RS.close(); Stmt.close(); } catch (SQLException E) { out.println("SQLException: " + E.getMessage()); out.println("SQLState: " + E.getSQLState()); out.println("VendorError: " + E.getErrorCode()); 70 Tutorial 8 – v03 } out.println("<h1>JDBCTest</h1>"); out.println("</body></html>"); } public void destroy() { try { db.close(); } catch (SQLException e) {} } } 71 Tutorial 8 – v03 Quelltext von SQLJ.java import java.io.IOException; import java.sql.SQLException; import import import import javax.servlet.ServletException; javax.servlet.ServletOutputStream; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; @SuppressWarnings("serial") public class SQLJ extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { String x; public SQLJ() { super(); } public String callsqljroutines() throws SQLException, InterruptedException{ sample02 test= new sample02(); return test.result; } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); ServletOutputStream out = response.getOutputStream(); out.println("<html>"); out.println("<head><title>SQLJ</title></head>"); out.println("<body>"); out.println("<br><hr>"); out.println("<h1>SQLJTest</h1>"); out.println(x); out.println("</body></html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void init() throws ServletException { try { x="<h2>"+ callsqljroutines()+"</h2>"; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 72