Prof. Dr . Frank Leymann / Thorsten Scheibler Institut für Architektur von Anwendungssystemen Universität Stuttgart Übungen „Message-basierte Anwendungen“ WS 05/06 Blatt 1 – 12.12.2005 Ablauf der Übung Raum und Zeit: Termine: 0.363, Übung Übung Übung Übung montags 11:30 1 – 12.12. 2 – 19.12. 3 – 09.01.06 4 – 16.01. Uhr bis 13:00 Uhr Übung 5 – 23.01. Übung 6 – 30.01. Übung 7 – 06.02. Übung 8 – 13.02. Einführung IDL Eine Interface Definition Language (kurz: IDL) ist eine Sprachsyntax zur Beschreibung von Schnittstellen einer Software-Komponente. Es ist im Wesentlichen eine allgemeine Sprache, um eine Anleitung zu schreiben, wie ein „Stück Software“ von einem anderen „Stück Software“ verwendet werden muss. Dieses Vorgehen ist vergleichbar mit einem Benutzerhandbuch, welches dem Benutzer den Gebrauch einer Anwendung erklären soll. Mit Hilfe der IDL lassen sich Objekte und die auf sie anwendbaren Methoden mitsamt den möglichen Parametern und Datentypen beschreiben, ohne dabei die Eigenschaften einer bestimmten Programmiersprache zu verwenden. Daten können nur über Datentypen ausgetauscht werden, die in einer IDL definiert sind. Die IDL dient rein der Beschreibung, nicht jedoch der Formulierung von Algorithmen. Ausgehend von einer IDL kann ein spezieller Compiler die IDL Definitionen in eine bestimmte Programmiersprache und Rechnerarchitektur umsetzen. So sind beispielsweise IDL-Spezifikationen analog zu Java-Interfaces. Eine IDL findet sich meist in verteilten Systemen (z.B. CORBA), bei denen ein Client auf einem anderen Rechner Methoden ausführen kann (Remote Procedure Call). Für dieses Übungsblatt werden nur bestimmte Teile der IDL Syntax benötigt. Bei der Bearbeitung wird nicht darauf Wert gelegt, dass die Syntax hundertprozentig richtig ist. Vielmehr steht das Verständnis der Bedeutung und Verwendung einer IDL im Vordergrund. Eine IDL-Definition hat folgenden Aufbau: module ModulName { typedef unsigned long SpecialTypeDeclaration; struct SpecicalStructure { SepecialTypeDeclaration aVarName; string anotherVarName; }; exception InvalidValue { string errorCode; } interface InterfaceName { void anOperation ( in double inValue, out string outValue); string aMethod (in string aValue) raises (InvalidValue); } } Grundlegende Datentypen der IDL: short = 16 Bit long = 32 Bit float = 32 Bit double = 64 Bit char 8-Bit ASCII-Zeichen wchar 16-Bit Unicode-Zeichen string Zeichenketten boolean TRUE oder FALSE Typendefinition: Mit typedef können neue Typen erzeugt werden, z.B.: typeDef unsigned long AgeType; typedef string<20> Name; Aufgabe 1.1 - IDL Für einen einfachen Online-Shop wird das Modul shop mit drei darin enthaltenden Schnittstellenbeschreibungen benötigt: - Die Kunden bzw. Anbieter des Shops werden durch die Schnittstelle Buyer bzw. Supplier beschrieben. Die Artefakte sollen Methoden besitzen, um Kunden/Anbieter zu erstellen, zu aktualisieren und zu entfernen. - Die angebotenen Artikel des Shops werden durch die Schnittstelle Article definiert. Ein Artikel soll folgende Methoden anbieten: o Preis abfragen bzw. setzen o Vorrätige Stückzahl abfragen bzw. setzen o Ein Stück verkaufen bzw. kaufen o Mehrere Stücke verkaufen bzw. kaufen. - Der eigentliche Laden wird mit Hilfe der Schnittstelle Store beschrieben. Eine solche Schnittstelle soll folgende Methoden anbieten: o Mehrere Möglichkeiten, um nach Artikeln zu suchen (z.B. über Name oder ID oder nach Artikeln, deren Vorrat zur Neige geht,…) o Neue Artikel hinzufügen bzw. Artikel aus dem Shop entfernen o Mehrere Möglichkeiten, um nach Kunden bzw. Anbietern zu suchen (über Name oder ID,…) o Preise ganzer Artikelserien um einen bestimmten Prozentsatz erhöhen bzw. zu erniedrigen o Mehrwertsteuersatz für gesamten Shop setzen1 o Käufer dem Store hinzufügen Ihre Aufgabe besteht nun darin, die verschiedenen Schnittstellen samt ihrer Methoden mit Hilfe der oben erwähnten Syntax einer IDL zu definieren. Bei einigen Methoden ist es unter Umständen nötig, eine Fehlerbehandlung vorzusehen. Entwickeln Sie daher geeignete Ausnahmen und beschreiben Sie diese ebenfalls mit Hilfe der IDL. Neben den Schnittstellen werden besondere Strukturen zur Modellierung des Shopsystems benötigt. Entwickeln Sie daher für Kunden bzw. Anbieter die Struktur Buyer- bzw. SupplierStruct und für Artikel die Struktur ArticleStruct. Die Strukturen sollen dabei Felder besitzen wie Name, ID, Anzahl, Beschreibung usw. Aufgabe 1.2 – Java IDL Erstellen Sie aus der oben entworfenen IDL-Beschreibung Store jeweils Java Schnittstellen für Client und Server (falls ein Unterschied vorhanden ist). Setzten Sie außerdem die Struktur BuyerStruct in Java um. Aufgabe 1.3 a – LDAP Verzeichnis Auf dem Server, der den zugehörigen Shop der oben erstellten Schnittstelle anbietet, soll ein LDAP Verzeichnis aufgebaut werden, in welches die Daten von Kunden, Anbietern und Artikeln abgelegt werden. Entwickeln Sie zunächst eine geeignete (hierarchische) Struktur, mit deren Hilfe diese Daten am geeignetsten abgebildet werden können. Achten Sie darauf, dass der Shop neben Deutschland auch in Frankreich und Großbritannien angeboten wird. Konzipieren Sie auf Grundlage dieser Vorgaben internationalisierbare Kunden, Anbieter bzw. Artikel. Aus organisatorischen Gründen kann ein Kunde allerdings nur in einem Land eine Kundenkennung besitzen. Möchte ein Kunde in zwei Ländern den Shop bedienen können, so benötigt er jeweils eine Kennung pro Shop. Artikel und Anbieter sind im Gegensatz dazu länderübergreifend. Sie können z.B. Attribute besitzen, um zu zeigen, in welchen Ländershops sie vertreten sind. Aufgabe 1.3 b – Java Naming and Directory (JNDI) Entwickeln Sie mit Hilfe von JNDI ein Programm in Java (evtl. Pseudo-Code), welches folgende Arbeitsschritte durchläuft: 1. Erstellen eines initialen Kontextes shop. 2. Erstellen eines Subkontextes store, sowie die Subkontexte für den deutschen, englischen und französischen Shop. 3. Anlegen eines Kunden „Karl Klos“ aus Deutschland, der eine Benutzerkennung im deutschen Shop erhält. 4. Anlegen eines Kunden „Collin McGommery“, wohnhaft in England, der sowohl für den englischen als auch für den französischen Shop eine Benutzerkennung erhält. 5. Suche nach allen Kunden des französischen Shops. 6. Suche nach dem Anbieter „Spielzeug Müller“ und Ausgabe der Shops, in denen er Waren anbietet. 7. Suche nach allen Artikeln, die von „Spielzeug Müller“ im deutschen und englischen Shop angeboten werden. 8. Aktualisierung der Kundenkennung von „Collin McGommery“ auf 0047110815. 9. Löschen des Kunden mit der Kennung 0815471100. 1 Dieser Satz ist in verschiedenen Ländern unterschiedlich