FH-Aachen: Framework für Verteilte Systeme (VS)
May 19th, 2008
Jemand hier, der aktuell das Verteilte Systeme-Praktikum besucht oder es noch vor sich hat? Falls ja, kleiner Exkurs:
Wir kennen ja alle das altbewährte Framework inkl. Network Simulator, das innerhalb des Praktikums eingesetzt wird und tausende Fenster auf dem Bildschirm ungeordnen öffnet - so ziemlich für jedes Objekt zwei Stück. Grundsätzlich ist diese Lösung für wenige Komponenten und all diejenigen in Ordnung, die sich mehr in C als in Java beheimatet fühlen. Beim letzten Praktikum (vspra5) wird es allerdings ziemlich grausam, z.B. drei Clients, einen RegistryServer, drei Zeitserver und den Simulator zu überblicken - wohl auch aus dem Grund, dass man bei jedem Durchlauf alle Fenster neu positionieren muss und auch kaum die Übersicht behalten kann, welches Objekt mit welchem vs_comm etc. Objekt kommuniziert, welches Ausgabefenster verwendet und und und…
Habe mich der Problematik daher einmal angenommen und ein Framework speziell für den Einsatz im letzten Praktikum erstellt, da dieses ja ziemlich viel Freiraum lässt. Herausgekommen ist aus Studenten-Sicht ein einfaches Client-Server-Modell, das automatisch den integrierten Simulator nutzt und in einem einzigen Fenster mit strukturierten Tabs für Clients, Server und anderes (z.B. der Simulator selbst) läuft. Auf Basis des Frameworks ist es sowohl für diejenigen mit Java-Erfahrung als auch für nicht-C-Programmierer, die sich lieber mit Java als mit der reinen Aneinanderreihung von Funktionsaufrufen auseinandersetzen möchten, ein Leichtes, die entsprechenden Server und Client zu implementieren. Einen kleinen Screenshot hätte ich auch anzubieten:
Das Framework besteht aus drei kleinen Paketen:
vs.common beinhaltet den Simulator und alle übrigen notwendigen Klassen, mit denen man sich selbst bei der Implementierung nicht mehr herumschlagen muss - der Simulator bleibt vollständig im Hintergrund. Clients und Server implementieren eine abstrakte Komponente, die jeweils ein entsprechendes Tab im Hauptfenster anlegt und zusätzlich Funktionalitäten wie den Einfachen Zugriff aufs Ausgabefenster wie auch auf die Eingabezeile (für eigene Befehle) mit sich bringt - muss man sich aber auch nicht mit auseinandersetzen, ist einfach verfügbar direkt in den eigenen Objekten. Grundsätzlich ermöglicht das Ganze den Umgang mit dem Simulator, als wäre er ein echtes Netzwerk. Dazu erlaubt der Simulator ebenfalls die Umkonfiguration des Netzwerkes direkt über die entsprechende Befehlszeile (die Befehle werden beim Start entsprechend aufgelistet).
vs.client beinhaltet nur einen Client, der die Methoden println(String text), send(DatagramPacket packet), receive() und receive(int timeout) implementiert. Ein einfaches “TimeClient extends Client” und das Hinzufügen der entsprechenden knappen Logik genügen - die Beschäftigung mit Kommunikationsobjekten, das Zuweisen von Ausgabefenstern etc. entfällt vollständig, da alles automatisch vom Framework erstellt und zugewiesen wird.
vs.server beinhaltet analog einen abstrakten Server, der es erlaubt, die Methoden onReceive(DatagramPacket packet) und onTick() hinzuzufügen, um die entsprechende Programmlogik für einen TimeServer oder RegistryServer zu implementieren (RegistryServer extends Server etc.). Ebenfalls verfügbar sind Methoden zum einfachen Starten und Stoppen eines Servers sowohl die implementierbaren Methoden onStart() und onStop(), z.B. für die Registrierung der TimeServer beim RegistryServer, immer wenn ein Server startet.
Sowohl Clients als auch Server können zudem die Methode onCommand(String command, String[] args) überschreiben, um eigene Befehle aus der Befehlszeile abzugreifen - ist also vollständig modular, man braucht keine Knöpfe und regelt alles in einem einzigen Fenster.
Falls jemand Interesse hat, einfach melden…und wenn nicht, trotzdem viel Spaß ;-).
