DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Einführung in die Programmierung Ausführbare Klassen
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Abstrakte Klassen.
Ein Beispiel in Java.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Assoziationen (Beziehungen). Zwischen Objekten kann es eine Beziehung geben.
Polymorphie (Vielgestaltigkeit)
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Einführung in Java1 Einführung in JAVA.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Einführung in die Programmierung Datensammlung
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Übungen zum Vortrag „Backtracking mit Heuristiken“
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Unterprogramme in JAVA
Objectives Verstehen was unterDelegate verstanden wird
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
Javelin Internet-based parallel computing using Java.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Wieland Schwinger Softwareentwicklung 2 Assertions.
Java Programme nur ein bisschen objektorientiert.
Konstruktoren.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Grundkurs Informatik mit Java
1. Die rekursive Datenstruktur Liste 1
Implementieren von Klassen
 Präsentation transkript:

DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java

DAJ Einführung in DAJ 2.Grundsätzlicher Aufbau von DAJ – Anwendungen 3.Beispielanwendung: Broadcast durch Fluten 4.Beispielanwendung: Token Ring 5.Zusammenfassung und Fazit Übersicht

DAJ Einführung in DAJ Einführung in DAJ 1.1 Der Autor

DAJ - 4 Einführung in DAJ – Wolfgang Schreiner Wolfgang Schreiner derzeit tätig am Institut für symbolisches Rechnen RISC – Johannes Kepler Universität, Linz, Österreich DAJ (1997) Distributed Maple ( ?) Brokering Distributed Mathematical Services ( )

DAJ - 5 Einführung in DAJ 1.2 Definition und Ziel

DAJ - 6 DAJ (1997): Definition und Ziel „DAJ is a toolkit for designing, implementing, testing, simulating, and visualizing distributed algorithms in Java.“ (Schreiner) „ The goal of the toolkit is to provide an universally accessible platform for research and education in the area of distributed algorithms.“ (Schreiner)

DAJ - 7 Merkmale: bestehend aus einer Java Bibliothek mit einfacher Schnittstelle Nachrichtenbasiertes System Kommunikation zwischen Knoten durch Punkt-zu-Punkt Nachrichten in Kanälen die Knoten verbinden Selbstdefinierte Knotenprogramme werden auf den Knoten ausgeführt lokale Zeitmessungen in den Knoten sowie für die gesamte Applikation DAJ - Anwendungen ausführbar als eigenständige Anwendung oder Java - Applet Definition und Ziel

DAJ - 8 Definition und Ziel Ziel: Problem der hohen Abstraktion bei verteilten Systemen praktische Umsetzung der in der Lehre vorgestellten Algorithmen erleichtern schwergewichtige Bibliotheken (z.B. PVM) in der Ausbildung ersetzen leichtgewichtige Variante schaffen Transparenz nach unten schaffen

DAJ - 9 Visualisierung 1.2Visualisierung

DAJ - 10 Oberfläche

DAJ - 11 gleiche Oberfläche bei Applets und eigenständigen Applikationen Darstellung durch gerichteten Graphen Verschiedene Farbkombinationen geben Status wieder 1 Zeitschritt in der Anwendung entspricht einer Sende/Empfangsoperation Tooltips geben ebenfalls Informationen über Status Oberfläche

DAJ - 12 Darstellung eines einzelnen Knotens Name des Knotens Aktuelle lokale Zeit Eingehender Kanal Ausgehender Kanal Knoten mit der Bezeichnung „Master“ im initialen Zustand zwei Kanäle zum Senden bzw. Empfangen

DAJ - 13 Darstellung eines einzelnen Knotens Knoten „2“ im initialen Zustand und bereit zur Ausführung seines internen Programms Knoten „1“ im Zustand des blockierenden Wartens auf eine Nachricht aus dem linken eingehenden Kanal. Knoten „1“ empfängt eine Nachricht, die über den eingehenden Kanal eintrifft. Knoten „1“ hat die Nachricht aus dem Kanal empfangen und setzt seine lokale Zeit auf 1 Knoten 1 hat die Ausführung seines internen Programms beendet

DAJ - 14 Kanal ist leer, und der Knoten auf der Empfängerseite wartet auf eine Nachricht. Der Kanal enthält mindestens eine Nachricht. Darstellung eines Kommunikationskanal

DAJ Aufbau von DAJ Aufbau von DAJ

DAJ - 16 Unterscheidung von 3 Programmteilen: 1.Anwendung oder Applikation 2.Knotenprogramm 3.Nachrichten Ein Knotenprogramm läuft in einer eigenen Ausprägung auf einem Knoten und kommuniziert mithilfe von Nachrichten mit anderen Knoten (besser: deren Knotenprogrammen). Die Anwendung ist die Zusammenfassung aller Knoten und deren Überwachung. Aufbau von DAJ

DAJ Beispielanwendung: Broadcast durch Fluten Broadcast durch Fluten

DAJ - 18 Definition des Flutens beliebige Verkettung von Knoten mithilfe von bidirektionalen Verbindungen Broadcast in das Netz mithilfe von Fluten Auslöser sendet an alle Ausgänge die Nachricht Knoten nehmen Nachricht entgegen und senden ebenfalls auf deren Ausgänge die Nachricht (mit Ausnahme an den Knoten der die Nachricht gesendet hat) mögliche Erweiterung durch Einschränken der maximalen Anzahl von Knotenschritten (Hops) Grundlage für den Echo-Algorithmus

DAJ - 19 Arbeitsschritte zur Realisierung Erforderliche Arbeitsschritte um die Anwendung zu realisieren: 1. Nachrichten definieren 2. Knotenprogramme implementieren 3. Anwendung / Applikation definieren

DAJ - 20 Nachrichten definieren 1.Schritt (Nachrichten definieren): Vorraussetzung: Jeder eigene Nachrichtentyp muss die Klasse Message erweitern. für diese Anwendung wird nur ein Nachrichtentyp benötigt public class FloodMessage extends Message { // Knoten der die Flutnachricht versendet hat private FloodNode oSender = null; /** * Konstruktor mit Parameter des Absenders oSender - Absender */ public FloodMessage(FloodNode oSender) { this.oSender = oSender; }

DAJ - 21 /** * Liefert den Absender der Nachricht - Absender */ public FloodNode getSender() { return this.oSender; } /** * Methode liefert den Text der in * der Visualisierung für die Nachricht * angezeigt werden soll */ public String getText() { return "Aufruf zum Fluten von " + this.oSender.getNodeName(); } Nachrichten definieren

DAJ - 22 Knotenprogramme definieren Schritt 2 (Knotenprogramme implementieren): Vorraussetzung: Jedes eigene Knotenprogramm muss die abstrakte Klasse Program erweitern und die Methode main() implementieren. Die main()-Methode muss folgendes leisten: ein ausgezeichneter Knoten muss das Fluten starten Knoten muss eingehende Nachrichten empfangen weiterleiten der Nachricht auf alle ausgehenden Kanäle nicht weiterleiten auf einen Kanal auf dessen Empfängerseite der Absender sitzt den Knoten als geflutet markieren

DAJ - 23 Knotenprogramme definieren Definition der main()-Methode: public class FloodNode extends Program { … public void main() { if(this.in().getSize() != 0) { // Überprüfen, ob der Knoten die Flut starten soll if(this.bStartFlood) { // an alle ausgehenden Kanäle senden this.out().send(new FloodMessage(this)); // Knotenflag auf true setzen this.bFlooded = true; } else { - hier Behandlung des ausgezeichneten Knotens zum Starten des Flutens

DAJ - 24 Knotenprogramme definieren // den Kanal der eingehenden Nachricht bestimmen int iIndex = this.in().select(); // Nachricht aus dem Kanal abrufen FloodMessage oMsg = (FloodMessage) this.in(iIndex).receive(); // Auf allen ausgehenden Kanälen die Nachricht versenden for(int i = 0; i < this.out().getSize(); i++) { // den Knoten bestimmen der hinter dem Kanal empfängt Node oReceiver = ((Channel) this.out(i)).getReceiver(); //... nur nicht auf den Kanal senden, der Sender war if(!oReceiver.getProgram().equals(oMsg.getSender())) { this.out(i).send(new FloodMessage(this)); } // Flag setzen das Knoten in Flut erfasst wurde this.bFlooded = true; - Teil im else-Zweig, der die Behandlung der normalen Knoten übernimmt

DAJ - 25 Anwendung / Applikation definieren Schritt 3 (Anwendung / Applikation definieren): Vorraussetzung: Jede DAJ-Anwendung muss die abstrakte Klasse Application erweitern und die Methode construct() implementieren. public class FloodApplication extends Application { public FloodApplication() { // Fenster erstellen mit Titel und Größe super("Fluten des Netzes",500,400); } public static void main(String[] args) { // eine Applikation erstellen und ausführen (new FloodApplication()).run(); }

DAJ - 26 Anwendung / Applikation definieren public void construct() { // Zufallsgenerator konstruieren Random oRand = new Random(); // Feld von Knoten erstellen Node[] aNodes = new Node[7]; // einzelne Knoten erzeugen aNodes[0] = this.node(new FloodNode("Master", true),"Master",300,50); … // zufällige Verbindungen zwischen den Knoten schaffen for(int i = 0; i < aNodes.length; i++) { for(int j = 0; j < aNodes.length; j++) { if(oRand.nextBoolean()) this.link(aNodes[i],aNodes[j]); }

DAJ - 27 Die Anwendung ist in diesem Zustand nun ausführbar. Demonstration Das Einbinden der Anwendung als Applet würde folgendermassen aussehen: <APPLET code="Flood.FloodApplication.class" width=200 height=25 archive="daj.jar, awt.jar"> Leider kannst Du das Netz nicht fluten ! Anwendung / Applikation definieren

DAJ Beispielanwendung: Token Ring Token Ring

DAJ - 29 Zusammenschluss von Knoten in eine Ringstruktur Verbindung der Knoten über unidirektionale Kommunikationskanäle Token symbolisiert Senderecht Besitzer des Tokens sendet seine Nachricht, wartet bis diese einmal durch den Ring gegangen ist und sendet dann den Token an seinen Nachfolger Jeder Knoten der nicht das Senderecht besitzt leitet einkommende Nachrichten an seinen Nachfolger weiter Definition eines Token Ring

DAJ - 30 Erforderliche Arbeitsschritte um die Anwendung zu realisieren: 1.Token und Nachrichten definieren 2.Knotenprogramme implementieren 3.Anwendung / Applikation definieren 4.Möglicherweise Zusicherungen integrieren Realisierung mithilfe von DAJ

DAJ - 31 Schritt 1 (Token und Nachricht definieren): Token und Nachrichten definieren Vorraussetzung: Jeder eigene Nachrichtentyp muss die Klasse Message erweitern. Token: Der Token ist ein Symbol, er enthält also keine wirklichen Nutzdaten. (ausser man realisiert Piggy-Backing) public class Token extends Message { /** * Diese Methode wird aufgerufen, wenn man den * Tooltip eines Kanals abruft */ public String getText() { return "Token"; }

DAJ - 32 (Ring-)Nachricht beinhaltet den Absender und die eigentliche Textnachricht In diesem Fall private Attribute, die über get()-Methoden abfragbar sind Token und Nachrichten definieren public class RingMessage extends Message { private SingleNode oSender = null;// Absender private String sMessage = null;// Nachricht /** * Methode liefert den Inhalt der Nachricht. Wird * beim Tooltip im Kanal aufgerufen. */ public String getText() { return this.oSender.getNodeName() + " " + sMessage; }

DAJ - 33 Knotenprogramme definieren Schritt 2 (Knotenprogramme implementieren): Vorraussetzung: Jedes eigene Knotenprogramm muss die abstrakte Klasse Program erweitern und die Methode main() implementieren. Die main()-Methode muss folgendes leisten: eine ausgezeichnete Station muss den Token erzeugen auf eingehende Nachrichten warten unterscheiden ob ein Token oder Nachricht erhalten wurde bei empfangenem Token eigene Nachricht senden bei eigener empfangener Nachricht Token weitersenden bei fremder Nachricht zwischenspeichern und weiterleiten

DAJ - 34 Knotenprogramme definieren public class SingleNode extends Program {... public void main() { // Überprüfen, ob dieser Knoten der Master ist if(bMaster) { // Knoten ist der Master, er darf seine Nachricht als // erster senden out(0).send(new RingMessage(this, "Hallo an alle.")); // nun auf die eigene Nachricht warten this.oMessage = (RingMessage) in(0).receive(); // nun den Token weiterschicken out(0).send(new Token()); } Definition der main()-Methode mit Sonderbehandlung eines ausgezeichneten Knotens:

DAJ - 35 Knotenprogramme definieren // Schleife wird von jedem Knoten durchlaufen while(true) { // der Knoten wartet auf eine Nachricht Message oMsg = in(0).receive(); if(oMsg.getClass().equals(Token.class)) { // Nachricht ist ein Token, das bedeutet eigene // Nachricht senden... out(0).send(new RingMessage(this, "Hallo an alle.")); //... auf die eigene Nachricht warten... this.oMessage = (RingMessage) in(0).receive(); //... und Token weitersenden out(0).send(new Token()); } else { // Nachricht speichern... this.oMessage = (RingMessage) oMsg; //... und weiterleiten out(0).send(this.oMessage); }

DAJ - 36 Anwendung / Applikation definieren Schritt 3 (Anwendung / Applikation definieren): Vorraussetzung: Jede DAJ-Anwendung muss die abstrakte Klasse Application erweitern und die Methode construct() implementieren. public class TokenApplication extends Application { public TokenApplication() { // Titel und Größe des Fensters setzen super("Token-Ring", 500, 400); } public static void main(String[] args) { (new TokenApplication()).run(); }

DAJ - 37 Anwendung / Applikation definieren public void construct() { // Knoten erzeugen Node oMaster = this.node(new SingleNode("Master",true), "Master",250,50); Node oNode1 = this.node(new SingleNode("Knoten 1", false), "Knoten 1",400,150); Node oNode2 = this.node(new SingleNode("Knoten 2", false), "Knoten 2",330,270); Node oNode3 = this.node(new SingleNode("Knoten 3", false), "Knoten 3", 170, 270); Node oNode4 = this.node(new SingleNode("Knoten 4",false), "Knoten 4", 100,150); // Verknüpfungen zwischen den Knoten erstellen this.link(oMaster,oNode1); this.link(oNode1, oNode2); this.link(oNode2, oNode3); this.link(oNode3, oNode4); this.link(oNode4,oMaster); }

DAJ - 38 Anwendung / Applikation definieren Die Anwendung ist in diesem Zustand nun ausführbar. Demonstration Das Einbinden der Anwendung als Applet würde folgendermassen aussehen: <APPLET code="TokenRing.TokenApplication.class" width=200 height=25 archive="daj.jar, awt.jar"> Leider kannst Du nicht mit dem Token-Ring spielen !

DAJ - 39 Zusicherungen integrieren Schritt 4 (Zusicherungen integrieren): Folgende Aussagen können (oder sollen) über den Token-Ring getroffen werden: es befindet sich zu jeder Zeit immer genau ein Token im Ring es sendet immer nur der Knoten der den Token besitzt es befindet sich stets nur eine Nachricht im Ring In Java können solche Zusicherungen durch Einsatz des Schlüsselwortes assert realisiert werden. The assertion statement has two forms. The first, simpler form is: assert Expression1 ; where Expression1 is a boolean expression. When the system runs the assertion, it evaluates Expression1 and if it is false throws an AssertionError with no detail messageAssertionError (Java 1.4 API – Keyword: assert)

DAJ - 40 Zusicherungen integrieren Problem: Mithilfe von assert können nur die Programme auf den Knoten lokal, Zusicherungen geben, in einem verteilten, nebenläufigen System muss aber eine Aussage über den Gesamtzustand getroffen werden. Lösung in DAJ: Aussagen über den Gesamtzustand mithilfe der abstrakten Klasse GlobalAssertion. Eine GlobalAssertion erhält den Überblick über den Gesamtzustand des verteilten Systems, in dem es die Knotenprogramme zur Betrachtung benutzt. abstract class GlobalAssertion { abstract boolean assert(Program program[]) String getText() static Message[] getMessages(InChannel c) static Message[] getMessages(OutChannel c) }

DAJ - 41 Zusicherungen integrieren Beispiel: Umsetzung der Zusicherung - es befindet sich zu jeder Zeit immer genau ein Token im Ring mithilfe von GlobalAssertions public class SingleTokenAssertion extends GlobalAssertion { // Anzahl der gezählten Tokens private int iTokenCount = 0; /** * Text, der bei einem Fehlverhalten der Applikation ausgegeben * wird */ public String getText() { return "Ungültige Anzahl von Token im Ring enthalten: " + iTokenCount; }

DAJ - 42 Zusicherungen integrieren public boolean assert(Program[] aPrograms) { this.iTokenCount = 0; // Alle Programme durchlaufen und überprüfen, // und auf jedem Knoten hasToken aufrufen for(int i = 0; i < aPrograms.length; i++) { SingleNode oNode = (SingleNode) aPrograms[i]; if(oNode.hasToken()) iTokenCount++; // Überprüfen, ob in den Ausgangskanälen ein Token enthalten ist Message[] aMessages = GlobalAssertion.getMessages(oNode.out(0)); for(int j = 0; j < aMessages.length; j++) { if(aMessages[j].getClass().equals(Token.class)) this.iTokenCount++; } return (iTokenCount == 1); }

DAJ - 43 Zusicherungen integrieren Einbinden der GlobalAssertion in das Knotenprogramm: // Zusicherungen erzeugen GlobalAssertion oTokenAssert = new SingleTokenAssertion(); // Überprüfen, ob dieser Knoten der Master ist if(bMaster) { // Invariante prüfen assert(oTokenAssert); // Knoten ist der Master, er darf seine Nachricht als // erster senden out(0).send(new RingMessage(this, "Hallo an alle.")); // nun auf die eigene Nachricht warten this.oMessage = (RingMessage) in(0).receive(); // nun den Token weiterschicken this.bToken = false; out(0).send(new Token()); }

DAJ - 44 Mögliche Erweiterungen Visualisierung anpassen: Einstellen der Schriftarten Festlegen der Radien der Knoten Kanalbreite definieren Browser einstellen Ausführung anpassen: Scheduler zur Anpassung des Ablaufes von Knotenprogrammen (z.B. zur Implementierung von asynchronen Netzwerken etc.) Message Selector bietet die Möglichkeit die Reihenfolge von Nachrichten zu manipulieren (z.B. zum Simulieren von Duplizieren oder verlorenen Nachrichten)

DAJ - 45 Fazit 5.Fazit

DAJ - 46 Fazit Vorteile: + Einfache Installation der erforderlichen Pakete + Ebenfalls einfaches Einbinden der Bibliotheken in die IDE (hier mit Eclipse) + Einfach gehaltene Schnittstellen ermöglichen schnelle Implementierung einfacher Systeme + Kein zusätzliches Einarbeiten in eine eigene Definitionssprache + Plattform unabhängig durch Java + Implementierung von komplexen Algorithmen ist möglich Nachteile: - Darstellung wird bei mehr als 5 Knoten unübersichtlich - Darstellung von Abläufen über verschiedene Farbkombinationen unglücklich - kleinere Fehler beim Neuzeichnen nach Tooltips und Minimierung/Maximierung - Umständliches Programmieren zur Realisierung von Multicast/Broadcast - Trennen von Nachricht empfangen und Kanal leeren in zwei Schritten - umständliches Feststellen des Sender und Empfänger eines Kanals - aufwendiges Erstellen des Netzwerkes

DAJ - 47 Quellen [Schreiner] DAJ – Documentation, [SUN] J2SE API Specification, [Schiller] Telematik Skript, Token Ring – Folie [Löhr] Verteilte Systeme Skript, Abschnitt Einführung in Verteilte Systeme RISC Linz, Österreich -