Einführung in Verteilte Systeme Wintersemester 2005 / 2006 Prof. Dr. Odej Kao Dipl.-Inf. Ulf Rerrer Übungsblatt Nr. 1 Aufgabe 0: [Entwicklungsumgebung einrichten] 1. Laden Sie zunächst TOMCAT von der Webseite http://tomcat.apache.org herunter (Version 5.5.12, Core Distribution) und entpacken Sie das Programm in ihrem Home Verzeichnis. 2. Setzen Sie die Umgebungsvariablen JAVA_HOME, JRE_HOME und CATALINA_HOME korrekt. Dies ist beispielsweise durch Einfügen folgender Zeilen in die .cshrc Datei möglich: ... setenv JAVA_HOME /usr/java/jdk1.5.0_05 setenv JRE_HOME /usr/java/jdk1.5.0_05/jre setenv CATALINA_HOME ~/apache-tomcat-5.5.12 3. Wechseln Sie in das apache-tomcat-5.5.12/bin Verzeichnis und führen Sie den Befehl chmod +x *.sh aus. 4. Laden Sie AXIS von der Webseite http://ws.apache.org/axis herunter (Version 1.3) und entpacken Sie das Programm in ihrem Home Verzeichnis. 5. Verschieben Sie den Ordner axis-1_3/webapps/axis in das Verzeichnis apache-tomcat-5.5.12/webapps. 6. Starten Sie den TOMCAT Server, indem Sie im apache-tomcat-5.5.12/bin Verzeichnis den Befehl ./startup.sh ausführen. Überprüfen Sie die korrekte Installation durch Aufrufen der Webseite http://localhost:8080. 7. Rufen Sie die Webseite http://localhost:8080/axis auf und öffnen Sie die Validierungsseite, um die korrekte Installation von AXIS zu überprüfen. 8. Der TOMCAT Server kann durch ./shutdown.sh im apache-tomcat5.5.12/bin/ Verzeichnis wieder gestoppt werden. Aufgabe 1: [Magic-8-Ball] Schreiben Sie einen einfachen AXIS Web Service, der die Funktion eines Magic-8Balls wiedergibt (siehe http://de.wikipedia.org/wiki/Magic_8_Ball). Programmieren Sie hierzu ein JAVA Client Programm, welches die axis.client.Call Methode benutzt, um einen Web Service aufzurufen. Diesem soll eine über die Kommandozeile eingegebene Frage als String übergeben werden und die Antwort des Web Services (auch ein String) auf der Konsole ausgegeben werden. Der Web Service liefert dabei zufällig eine der 20 vorgefertigten Antworten des Magic-8-Balls aus. Zum "Ausführen" eines AXIS Web Services muss die .java Datei in .jws umbenannt werden und ins Verzeichnis apache-tomcat-5.5.12/webapps/axis verschoben werden. Aufgabe 2: [Eigene SOAP Nachricht] Implementieren Sie das in der Übung vorgestellte Beispiel eines einfachen AXIS Web Services zum Addieren zweier Zahlen. Schreiben Sie nun ein JAVA Client Programm, welches eine SOAP Nachricht erzeugt, die diesen Web Service aufruft. Verwenden Sie hierfür folgenden Programmrumpf: import java.net.*; import java.io.*; public class SOAPClient { public String server = "http://localhost:8080/axis/add.jws"; public String SOAP_ACTION = "http://localhost:8080/axis/add.jws"; public static void main(String[] args) { if (args.length == 0) { System.out.println("Usage: java UlfSOAPClient zahl1 zahl2"); return; } int inta = new Integer(args[0]); int intb = new Integer(args[1]); try { URL u = new URL(server); URLConnection uc = u.openConnection(); HttpURLConnection connection = (HttpURLConnection) uc; connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestMethod("POST"); connection.setRequestProperty("SOAPAction", SOAP_ACTION); OutputStream out = connection.getOutputStream(); Writer wout = new OutputStreamWriter(out); wout.write("HIER SOAP NACHRICHT EINSETZEN"); wout.flush(); wout.close(); InputStream in = connection.getInputStream(); int length; byte[] bytearray = new byte[1000]; while ((length = in.read(bytearray)) != -1) { System.out.write(bytearray, 0, length); } in.close(); } catch (IOException e) { System.err.println(e); } } An der gekennzeichneten Stelle ist eine vollständige und gültige SOAP Nachricht einzufügen. Diese soll dem Web Service zwei Zahlen zum Addieren übermitteln und die empfangene SOAP Antwort ausgeben. Aufgabe 3: [Urlaubsbuchung] Schreiben Sie mehrere AXIS Web Services, die beispielhaft das typische Urlaubsbuchungsbeispiel einer Web Service Komposition implementieren. Ein FlugAbPB Web Service verwaltet die noch freien Plätze für die Flüge PB<->FRA, PB<->MUC und PB<->BER. Die Web Services HotelHilton, HotelHolidayInn und HotelMecure verwalten die noch freien Zimmer der eigenen Hotelkette in einer oder mehrerer der Städte Frankfurt, München und Berlin. Die Web Services Sixt und Europcar geben Auskunft über die noch verfügbaren Autos in einer oder mehrerer der genannten Städte. Ein Web Service HotelAuto kombiniert die Angebote für freie Autos und Hotels in einer Stadt. Ein Web Service FlugHotelAuto kombiniert die Angebote von FlugAbPB mit dem Angebot von HotelAuto für eine Stadt. Programmieren Sie ein Java Client Programm, welches die folgende Web Service Kette aufruft: Client FlugHotelAuto HotelAuto FlugAbPB HotelHilton HotelHolidayInn HotelMercure Sixt Europcar Hierbei rufen Web Services ihrerseits Web Services auf. Das Clientprogramm soll nur den Web Service FlugHotelAuto aufrufen, etwa durch einen Aufruf wie "java Urlaubclient Frankfurt", und eine Antwort in der Form "Flug PB-BER, Hotel Mercure, Auto Sixt" erhalten. Die freien Flüge, Zimmer und Autos können zum Beispiel durch Einlesen und Schreiben in Textdateien, oder durch festes Einkodieren in den Sourcecode festgelegt werden. Hinweise: • Auf der AXIS Validierungsseite (Axis Happiness Page) werden nicht gefunden. Diese werden in dieser Übung nicht benötigt. • Für die fehlerfreie Kompilierung eines AXIS Web Services, Dateien aus dem axis-1_3/lib Verzeichnis in den eingebunden werden. • Methoden in einem Web Service müssen public sein, aufgerufen werden können. einige Bibliotheken müssen die .jar JAVA CLASSPATH damit sie korrekt Übungsablauf und -bewertung: • Benutzen Sie die auf den Pool-Rechnern installierten JAVA Versionen. Eigene Laptops sind zugelassen, müssen aber eigenständig konfiguriert werden. • Die Programme müssen an essentiellen bzw. schwierigen Stellen ausreichend kommentiert sein. • Die Programme sollen weitestgehend vor der Übung in Gruppen erstellt werden. Die Übung dient zum Beantworten von Fragen und zur Vorführung/Abgabe der Programme. • Der Übungszettel gilt als Bestanden, sofern die Aufgaben 1, 2 und 3 in der Übung erfolgreich vorgeführt und zufrieden stellend erklärt werden konnten.