Fakultät IV – Elektrotechnik und Informatik Kommunikations- und Betriebssysteme (KBS) Dr. G. Mühl, S. Bissell E-Mail: WWW: [email protected] [email protected] http://www.kbs.tu-berlin.de Übung zur Vorlesung „Middleware-Konzepte“ – WS 08/09 Blatt 5 Ausgabe: 27.1.2009 (Besprechung: 10./11.2.2009) Aufgabe 5.1 In verteilten System ist es oft eine Schwierigkeit global eindeutige Identifier (IDs) zu erhalten, ohne das sich die einzelnen Komponenten des Systems vorher auf ein Vergabeschema einigen. Unter dem Einsatz von JavaSpaces Technologie soll ein Dienst für eindeutige IDs in verteilten Systemen realisiert werden. Eine Menge von Clients kann Pakete von eindeutigen IDs anfordern und einer (oder mehrere) ID-Erzeuger stellen dann passende Pakete mit eindeutigen IDs zur Verfügung. Benutzen Sie zur Programmierung das Jini Framework der Firma Sun mit der dazugehörigen JavaSpaces Implementierung und den entsprechenden Lookup and Discovery Services. Ein ID-Erzeuger beobachtet alle in seiner Reichweite existierenden oder neu hinzukommenden JavaSpaces, während einem Client ein beliebiger Space genügt. Die Clients fordern Pakete mit IDs über Einträge an: public class IDRequest extends AbstractEntry { public Integer amount = null; public IDRequest() {} public IDRequest(Integer amount) { this.amount = amount; } } 1 Der (oder die) ID-Erzeuger stellen Pakete von IDs mit folgenden Einträgen zur Verfügung: public class IDList extends AbstractEntry { public Integer amount = null; public ArrayList ids = null; // roughSize can be SIZE_S, SIZE_M or SIZE_L public String roughSize = null; public final static String SIZE_S = "small"; // 1-5 public final static String SIZE_M = "medium"; // 5-10 public final static String SIZE_L = "large"; // 10+ public IDList() {} public IDList(ArrayList ids) { // TODO sinnvolle Implementierung } public ArrayList removeIDs(int num) { // TODO sinnvolle Implementierung } } 2 1. Implementieren Sie die ID-Erzeuger-Klasse IDProvider, die auf Anforderungen wartet, die in allen erreichbaren JavaSpaces abgelegt werden, diese dann entfernt und ein passendes ID-Paket in den JavaSpace legt. 2. Implementieren Sie die Client-Klasse IDRequester, die ID-Anforderungen in den JavaSpace legt und dann nach passenden ID-Paketen sucht. 3. Da die gelieferten ID-Pakete nicht den Clients direkt zugeordnet werden, suchen diese nach ID-Paketen, die genügend IDs enthalten, entfernen aus diesen die benötigten IDs und legen sie wieder in den JavaSpace (falls das Paket nicht leer geworden ist). Vergessen Sie dabei nicht, die Felder amount und roughSize zu aktualisieren! 4. Warum kann es unvorteilhaft sein, über das Feld amount nach Paketen mit einer genügenden Anzahl an benötigten IDs zu suchen? Bzw. warum existiert das Feld roughSize? 5. (optional) Entwickeln Sie eine Methode, mit der das System auch mit mehreren IDErzeugern immer noch global eindeutige IDs liefert. Hinweise 1. Die Jini Implementierung der Firma Sun kann unter folgender Adresse bezogen werden: http://java.sun.com/developer/products/jini/index.jsp. Es wird empfohlen, die Version 1.2 einzusetzen. 2. Gibt es bereits Probleme mit dem LookupBrowser von Sun, so kann dies an einer fehlenden Multicast-Unterstützung des Betriebssystems liegen. Für Linux, siehe http://www.bablokb.de/jini/jini.html. 3. Einführungen und Tipps finden Sie unter anderem hier: o http://www.artima.com/jini/faq.html o http://jan.netcomp.monash.edu.au/java/jini/tutorial.2.08/Jini.html o http://www.enete.com/noel/nuggets_jini/index.html 3