You are here: Wiki>SensorWeb Web>SensorWorld>TheDevelopment>TasksTwo (30 Apr 2007, DanielNuest)Edit Attach

Birte

  • SensorWorldProperties schreiben, Klasse zum versenden von Properties ohne jegliche Referenz (durch klonen und getValue o.Ä.) auf das eigentliche Objekt, jeweils Unterklasse für jede Komponente
  • [OK] Vorschlag: im CommonConnector auch die Consumer und Producer in jeweils einer Map vorhalten, analog zu Destinations.
    • Map<Destination, Producer> und dann immer nur getProducer(Destination d) aufrufen und dort entweder Vorhandenen zurückgeben oder neu instanziieren. (hab ich mal so geändert, finde ich auch besser(Birte)
    • Map<Destination, Consumer>, (Methode analog bei der registration() würde ich schon direkt den consumer erzeugen lassen, anstatt den Umweg über das Dictionary zu gehen(Birte))
    • registration von PhenomenonConnector bei der DictionaryControl läuft
    • registration von SensorConnector, CommConnector bei der DictionaryControl, läuft

ant

Daniel

Problem Netzwerk

  • im Uninetz mit verkabelten Rechnern:
    • Auskunft Ziv/Noc: Rechner im gleichen Subnetz, dadurch kein Blocken oder so von Routerseite etc.
    • Konfigurationen:
      • komplett ohne : Rechner finden sich nach ca. 15 Minuten, dann Probleme bei Registrierung, die registration_queue ist mehrfach vorhanden; statische Queue registration_destination im vcl Peer, dann funktioniert die Registrierung
      • feste Einträge der Peers in : wiederholt Fehler: "agent already exists, doing nothing"
      • komplett eingetragen in auf einem Rechner, regqueue nicht statisch: Registrierung von commsim und phen erfolgreich(!)
        • falls Einträge in worldmap nicht den richtigen Namen haben, kommt Fehler: A peer named <...> tried to connect, but does not appear in the world map. Closing connection <...>
      • alle Peers müssen dynamisch XOR statisch definiert sein
      • nachgefragt beim ziv bzw. noc: da die Rechner in einem Subnetz sind, wird eigentlich garnichts geblockt oder ähnliches
      • einmal haben sich die Rechner direkt gefunden. Möglicherweise verhindert die Windows-Firewall ein gutes AutoDiscovery: Standardmäßig lässt die Windows Firewall nach einem Multicast- oder Broadcast-Paket an dem entsprechenden Port eingehende Unicast-Pakete für drei Sekunden lang zu. (http://www.microsoft.com/germany/technet/datenbank/articles/600399.mspx#E2AAC)
  • im Uninetz mit Laptop per WLAN:
    • Rechner nicht im gleichen Subnetz, dadurch erstmal keine Chance

langfristig

  • VMWare Server auf einem Linux-Rechner, damit n-viele Rechner innerhalb eines virtuellen Subnetztes
  • die SpecConns werden sich ähnlicher: ähnliche init - Methoden, gleiche Behandlung aller sendMessage-Methoden, isReady gleich (z.Z.), get...Queues gleich ... >> umbauen mit abstrakter Klasse
  • aufnehmen von exit() - Methoden, die ordentlich die Connections und Requests und so weiter schließen
  • einbeziehen von ThreadGroup zur Organisation der Threads? Vll. eine Gruppe pro Sensor - Instanz?
  • da es keine unterschiedlichen insertMessage - Methoden mehr im CC gibt, wird die Behandlung von fehlenden Informationen in die SC verlagert, was auch Sinn macht, da dort dann analog zu den überhaupt existierenden Anwendungsfällen bzw. zum existierenden Mapping im jeweiligen IDictionary eine Fehlerbehandlung bzw. Fehlerwerfen eingerichtet werden kann. Z.B. könnte sendMessage ohne recipients im PhenomenConnector gleich eine IllegalArgumentException werfen.
  • Management-Console langfristig vll. mal in eigenen Tomcat deployen und nicht nur über batch-Datei, vll. kennt sich ja jemand mit struts aus.
  • auch die CommunicationSimulation sollte einen (limitieren) Pool an Threads haben, die die Anfragen parallel arbarbeiten, in Analogie zu ServerSocket, das ein neues Socket erzeugt, sobald eine Anfrage kommt und weiter lauscht. Kommt dann darauf an, wie aufwändig die Berechnungen zur Erreichbarkeit sind.
  • Text-Chat
  • GUI mit eingehenden und ausgehenden Nachrichten

Archiv

  • [OK] logging konfigurieren: mantaray hat seine eigenen logging einstellungen, dadurch wird log4j 2mal gestartet. Workaround: logging in xml Datei konfigurieren und diese in die mantaray config xml importieren.
  • [OK] phenomenon type als dictionary oder int, auch in letzen fall sollte es eine statische klasse geben, wo diese gespeichert sind. Lösung: als int, später mal eine PhenomenonTypeRegistry mit encode(String lala) und decode(int i)
  • [OK] wo werden überall aufrufe mit verschiedenen messages gemacht, um das mapping der typen zu ermöglichen? Lösung: in DestinationNameFactory.getQeueForAnything() das Argument Class<? extends ISpecificConnector> c eingefügt
  • [OK] add ist überschreibend oder nicht? Lösung: add = hinzufügend, siehe =replace(...) in TasksOne, außerdem gibt es ja delete(...)
  • [OK] der Fehler ist auch beim erzeugen des Requestes in MantaSession, Zeile 919, Selector s = new Selector(messageSelector); ... habe antlr.jar in den lib ordner gepackt ... mit dieser auf dem classpath kommt der Fehler nicht mehr! ... die war im letzen Projekt auch drin, und inzwischen meine ich mich zu erinnern, dass ich die dort auch hingepackt habe, da mir die antlr - Hompage irgendwie bekannt vorkam. Aber hiermit ist das ja angemessen dokumentiert.
  • [OK] update aus RegistrationMessage und die entsprechenden Methoden aus DictinaryControl entfernt
  • [OK] javax.jms.MessageFormatException: MNJMS00016 : FAILED TO INSTANTIATE OBJECT ON METHOD makeObject(). ERROR TEXT - Lösung: die eigentliche Lösung ist, dass die Klassen, die in einer ObjectMessage verpackt werden sollen, auch Serializable implementieren müssen. Nichtsdestotrotz sollten Sensor etc. nicht Serializable implementieren, sondern wirklich nur Objekte, die wir hin und her schicken.
  • erstmal werden nur DictionaryMessages mit dem Task NEW_DICTIONARY versendet
  • brauchen wir update und delete methoden für die dictionaries (und wenn dann ohne convenience methoden, sondern eine update oder delete nachricht pro destination) wirklich? wiederum dafür dann entsprechende update und delete messages. der jeweilige task könnte im message header verpackt sein.
  • ÜBRIGENS: der Fehler, das ich keine Sensoren verschicken konnte, lag schlicht und einfach daran, das nicht das Serilizable Interface implementiert wurde ... finde das allerdings auch eine hinreichende Begründung für die Existenz von SensorWorldProperties. Habe aus diesem Grunde auch die Folgenden änderungen gemacht, weil diese in einigen Nachrichten verwendet werden
    • Geometry extends Serializable
    • Measurement implements Serializable
  • [OK] Nebenläufigkeit
    • SC und CC kommunizieren über zwei Queues, Queue für SC an CC und Queue für CC an SC
      • signaturänderungen: sendMessage fliegen komplett aus den CC raus, ebenso insertMessage aus dem SC
    • SC und CC müssen auf einer Ebene als unabhängige Threads laufen, deswegen wir der Konstruktor vom SC um einen ExecutorService erweitert, mit dem der zugehörige CC (oder auch weitere Threads) dann ausgeführt wird. Jede Komponente muss selbst managen, dass die Vernünftig als Threads parallel laufen.
  • [OK] die behandlung von RegistrationMessages kann doch eigentlich aus der onMessage() des CC raus, weil das ja über einen request in der Methode register() geregelt wird.
  • [OK] die signatur von sendMessage(SWM msg, int[] recs) zu sendMessages(SWM msg, int[] recs) ändern um klarer unterscheiden zu können
  • [??] register ist blockierend, kann er auch ruhig sein, wass soll der CC sonst auch tun. Um dieser Tatsache gerecht zu werden, wird eine isReady Methode in beide Connectoren eingearbeitet, die dem Verwender (Highlevel-Komponente) Information darüber liefert, ob eine Nachrichtenabarbeitung stattfinden kann. Auch wenn der SC nicht ready ist, können Nachrichten gesendet werden, diese bleiben dann jedoch in der Queue vom SC zum CC. Die verwendende Komponente kann dann selbst entscheiden, ob sie auf den ready - state des SC wartet oder nicht. Der SC ist ready gdw. der zugehörige CC ready ist und möglicherweise noch weitere Kriterien. Der CC ist ready gdw. er sich erfolgreich registriert hat und damit auch initialisiert ist.

  • verbinden mehrerer peers auf verschiedenen Rechnern, verschiedene Konfigurationen funktioniert!
    • lokal im Netzwerk testen, direkter Anschluss an Switch
      • Rechner in Raum 44 haben zweite Netzwerkkarte
      • zweite Netzwerkverbindung mit festen IPs, Firewalls KEINE Ausnahmen --> Probleme hattten nichts mit Firewall zu tun!
      • sofortiges erkennen, Registrierung klappt
      • die Netzwerkverbindung zum Uni-Netz muss deaktiviert werden, Vermutung: Mantaray versucht dann über beide Netzte nen multicast und das dauert wieder ewig

  • habe ein ordner lib-src erstellt, damit man einen vernünftigen src-lookup einrichten kann für den workspace bzw. zumindest die vorhandenen srcs entpackt werden könnten
  • laut http://www.antlr.org/license.html ist antlr public domain
  • es gibt 2 Speicherorte für persistent
    • /persistent, wird von Peers benutzt, die aus Eclipse gestartet werden
    • Komponentenordner /persistent, wird von den .jar im Komponentenordner verwendet
  • miniGUI erstellt für Phenomen und Sensor, dadurch kann man den vcl und die commsim laufen lassen, wenn man am Phänomen oder am Sensor arbeitet und letztere registrieren, den sensor starten und stoppen, bei "gracefully" beenden. Dafür einige Methoden in die Abstract{Phenomenon,Sensor}Simulation hinzugefügt, die dann auch public sein mussten, finde das so aber schöner gekapselt als wenn die GUI in der Klasse drinhängt. Außerdem Änderungen an ICommonConnector und ISpecificConnector notwendig.
Topic revision: r31 - 30 Apr 2007, DanielNuest
Legal Notice | Privacy Statement


This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Wiki? Send feedback