Fakultät für Informatik TU München - Fakultät für Informatik
Lehrstuhl III: Datenbanksysteme
Technische Universität München
Home  |  Personen  |  Forschung  |  Lehre  |  Sonstiges  | 

UniVerwaltung - Beispiel-Web Service

Auf dieser Seite wird gezeigt, wie ein einfacher Web Service und ein dazu passender Client implementiert werden können. Als Beispiel wird ein Service entworfen, der auf dem bekannten relationalen Universitäts-Datenbankschema aufbaut. Der Dienst ermöglicht die Abfrage des Lehrumfangs von Professoren. Unter Lehrumfang ist die Summe der Semesterwochenstunden (SWS) der gehaltenen Vorlesungen zu verstehen. Hierzu delegiert der Web Service den Aufruf an eine Klasse, die eine JDBC-Verbindung zu einer Datenbank aufbaut und auf dieser die eigentliche Abfrage durchführt. In SQL lässt sich die Abfrage für einen Professor mit Namen 'ProfName' wie folgt formulieren:

SELECT SUM(v.SWS) AS LehrUmfang
FROM Vorlesungen v, Professoren p
WHERE v.gelesenVon = p.PersNr
AND p.Name ='ProfName'

Die Funktionalität und der Aufbau eines Web Services wird in einem zugehörigen WSDL-Dokument festgelegt. Da dies die Schnittstelle ist, die Anwender oder andere Programme verwenden, um auf den Dienst zuzugreifen, soll im Folgenden gezeigt werden, wie ein Web Service aus der Vorlage eines solchen WSDL-Dokuments semi-automatisch erstellt werden kann.

Der vorgestellte Service heißt UniVerwaltung und ist für Testzwecke unter der folgenden URL errreichbar

Das WSDL-Dokument, welches die Schnittstellen des Dienstes spezifiziert, ist abrufbar unter

Dateien

Das bereitgestellte zip-Archiv enhält folgende Dateien (Der Ordner, in welchen die Klassen erzeugt werden, wird im Folgenden mit $src abgekürzt):

Vorinstallierte Software

Neben einer aktuellen Java-Version wird benötigt:

Tomcat

Zum Testen des Beispiel-Web Services benötigt man einen Web Server. Hierfür empfehlen wir Apache Tomcat Version 4 oder 5 (http://jakarta.apache.org/tomcat). Der Installationspfad von Tomcat wird im Folgenden als <catalina_home> bezeichnet.

Ant

Um die Erstellung des Web Services und das Ausführen des Clients zu erleichtern, ist den Sourcen ein Apache Ant build-file (build.xml) beigefügt. Hierzu wird eine aktuelle Version von Ant benötigt. Zudem sollten die ausführbaren Skripten (im Verzeichnis <apache-ant.home>/bin, wenn <apache-ant.home> der Installationspfad von Ant ist) in die PATH-Umgebungsvariable mit aufgenommen werden, sowie die Bibliotheken (im Verzeichnis <apache-ant.home>/lib) zum CLASSPATH hinzugefügt werden.

Axis

Im Folgenden wird vorgestellt, wie aus einer WSDL-Beschreibung automatisch die Java-Klassen des Web Services generiert werden können (bzw. das "Gerüst" des Services). Dazu wird die Apache Axis Bibliothek benötigt, die auf der Seite http://ws.apache.org/axis heruntergeladen werden kann.
Der Axis-Web-Server muss in Tomcat eingebunden werden. Dazu muss das Verzeichnis <axis.home>/webapps/axis in das Tomcat-Verzeichnis kopiert werden (<catalina.home>/webapps). Siehe hierzu die Installationsdokumentation von Apache Axis selbst. Bevor mit dem Test des UniVerwaltung-Web Services begonnen wird, sollte die Installation von Axis erfolgreich getestet worden sein.
Apache Axis benötigt zur Ausführung einen XML Parser (Xerxes oder Crimson). Siehe hierzu den Users-Guide von Axis.

JDBC-Treiber

Der Zugriff auf die Datenbank erfolgt über JDBC. Der dafür notwendige Treiber ist Datenbankhersteller-abhängig, so dass wir ihn an dieser Stelle nicht genauer angeben können. SQL-Skripten zum Aufbau einer eigenen Beispiel-Datenbasis einer Universitätsverwaltung finden Sie hier. Der Treiber muss für die Ausführung im CLASSPATH aufgelistet sein. Kopieren Sie ihn dazu z.B. in das Tomcat-Verzeichnis <catalina.home>/common/lib. (Hinweis: endet der Treiber auf .zip, so sollten Sie ihn in eine .jar-Datei umbenennen. Andernfalls kann es vorkommen, dass der Treiber nicht geladen wird)

Installation des Beispiels

Zuerst muss das angegebene zip-Archiv heruntergeladen und entpackt werden.

Konfiguration der build-Datei

Als nächstes muss das Ant build.xml-File angepasst werden, d.h. Bibliothekspfade etc. müssen auf die lokale Installation angepasst werden.
Zu ändernde Properties:

Falls man sich an die Standardinstallation gehalten hat, so ist eigentlich nur der Pfad von Tomcat, d.h. catalina.home, anzupassen. Auf jeden Fall sollte man überprüfen, ob die Bibliotheken des <path>-Elements alle korrekt eingebunden sind.

Erzeugen der Java-Klassen

Dieses Beispiel soll zeigen, wie aus der Beschreibung eines Web Services mittels WSDL der eigentliche Dienst semi-automatisch erzeugt werden kann. Das Verhalten des Dienstes wird in der zugehörigen WSDL-Datei festgelegt. Ein WSDL-Dokument besteht aus einem abstrakten Abschnitt das prinzipiell types-, message- und portType- Definitionen umfasst. Abstrakt deshalb, weil die Definition unabhängig von Endpunktadressen (URLs) vorgenommen wird. Die geschieht in dem anschließenden konkreten Teil, der aus binding-, port- und service-Definitionen besteht. Unter anderem beinhaltet das WSDL-Dokument des Beispiel-Web Services:

Das vorgegebene WSDL-Dokument beschreibt insgesamt einen Dienst der das Abfragen des Lehrumfangs eines Professors ermöglicht. Der Dienst stellt den Port UniVerwaltungPortType und dieser die Operation getLehrUmfangVonProfessor bereit, der als Argument der Name des Professors übergeben wird. Der Rückgabewert ist die Summe der Vorlesungsstunden.

Apache Axis bietet die Möglichkeit aus der Beschreibung eines Dienstes mittels WSDL automatisch Java-Klassen zu erstellen, die das Gerüst des Services darstellen. Der Programmierer des Dienstes muss dann nur noch an einer Stelle die Funktionalität einfügen. Um die Java-Klassen zu erstellen ist folgender Aufruf notwendig:

ant wsdl2java

Folgende Dateien werden dadurch (im $src Ordner) erzeugt:

Einfügen der eigentlichen Programmlogik

Im Ordner /UniVerwaltung befindet sich zudem noch die Datei InquireDB.java. Die Klasse InquireDB enthält die eingentliche Programmlogik, d.h. sie dient zum Aufbau einer Verbindung zur Datenbank und zum stellen der Anfrage, wie groß der Lehrumfang für einen bestimmten Professor ist.

Notwendige Änderungen:

Installieren des Web Services

Um den Web Service tatsächlich zu installieren muss

ant deploy

aufgerufen werden. Dieser Aufruf bewirkt, dass der temporäre Ordner build erzeugt wird, in den die Sourcen kompilert werden. Anschließend werden die erzeugten Klassendateien in den classes-Ordner von Axis kopiert (mit Ausnahme von Client.class) und mittels deploy.wsdd die Installation des Services abgeschlossen. Wichtig: falls Änderungen an Java-Klassen durchgeführt werden, so muss ggf. der Web Server neu gestartet werden, um ein evtl. Caching des Web Servers zu umgehen. Damit ist die Installation abgeschlossen.

Testen des Web Services

Kopieren Sie die Klasse $src/Client.java in das Verzeichnis, in welchem sich auch die automatisch generierten Service-Klassen befinden ( da diese Testklasse die zuvor erstellten Service-Klassen verwendet) und passen Sie die Package-Definition an. Anschließend können Sie das Testprogramm übersetzen und mit

ant run-client

ausführen. Dabei wird als Parameter der Name des Professors, dessen Lehrumfang ermittelt werden soll, mit übergeben. Dieser Parameter lässt sich in build.xml über das Property Call.ProfName ändern.

Ein weiteres Client-Programm  (ClientUniVerwaltung.java) kann ohne zusätzliche Pakete übersetzt und ausgeführt werden. In dieser Klasse ist die SOAP-Kommunikation nachvollziehbar, die in dem zuvor vorgestellten Client-Programm verborgen ist.

Deinstallation des Web Services

Die Deinstallation des Web Services erfolgt mittels

ant undeploy

Zusätzlich sind in build.xml noch die Properties redeploy (Deinstallieren und erneutes Installieren) und clean (Löscht den Inhalt des build-Ordners) enthalten.


Lehrstuhl für Datenbanksysteme
Letzte Änderung: 15.07.2005 um 10:17:25