1 / 37

Aglets III Praxisbeispiel

Aglets III Praxisbeispiel. im Seminar Softwareagenten Christian Dupuis Colin Wilke. Gliederung. Motivation Workerpool 2.1 Reception 2.2 Worker Clientanwendungen 3.1 MergeSort 3.2 Chatsystem Zusammenfassung. 1 Motivation. Wie schreibe ich ein mobiles Aglet? Tahiti-Server

Download Presentation

Aglets III Praxisbeispiel

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Aglets IIIPraxisbeispiel im Seminar Softwareagenten Christian Dupuis Colin Wilke

  2. Gliederung • Motivation • Workerpool 2.1Reception 2.2 Worker • Clientanwendungen 3.1 MergeSort 3.2Chatsystem • Zusammenfassung Seminar Softwareagenten

  3. 1 Motivation • Wie schreibe ich ein mobiles Aglet? • Tahiti-Server • HelloWorld-Aglet • extends Aglet • onCreation() • handleMessage() Seminar Softwareagenten

  4. 1 HelloWorld Aglet – Praxis Seminar Softwareagenten

  5. 2 Workerpool • Ursprünglich geplant: Verteilter Algorithmus • Aber:schlechte Dokumentation des integrierten Lookup-Services (MAFFinder) • Daher:eigenständige Implementierung eines Lookup-Services mit der nötigen Basisfunktionalität Seminar Softwareagenten

  6. 2 Workerpool • Basisfunktionalität • An- und Abmelden von Tahiti-Server/Diensten • Lookup von freien Tahiti-Server/Diensten • Konsistenzsicherung durch Lease-Konzept • Exceptionhandling Seminar Softwareagenten

  7. Reception Lease Checker Client ChatServer ChatClients MergeSort MergeSlave HostList Worker Worker Lease Workerpool „Framework“ Anwend- ungen 2 Workerpool Architektur

  8. 2.1 Reception Lebenszyklus • onCreation() • initialisieren der HostListhosts = new ReceptionHostList() • erzeugen des LeaseCheckers • run() • warten auf einkommende Messages, z.B. „register“ • onDisposing() • beenden des LeaseCheckers und sich selbst Seminar Softwareagenten

  9. 2.1 Reception – Code public boolean handleMessage(Message msg) { […] else if (msg.sameKind("register")) { try { WorkerDetails details = new WorkerDetails([…]); hosts.register(details); } catch (Exception e) { msg.sendException(e); return false; } return true; } else if (msg.sameKind("renewlease")) { try { hosts.renewlease(new URL(msg.getArg("ADRESS").toString())); } catch (Exception e) { msg.sendException(e); return false; } } […] } Reception.java

  10. 2.1 Reception LeaseChecker • Aufgabe: Konsistenzerhaltung • prüft periodisch Gültigkeit der Leases. • löscht ggf. abgelaufene Leases bzw. Worker • Realisiert durch Persistenzmechanismus des ASDK Seminar Softwareagenten

  11. 2.1 LeaseChecker – Code public void onCreation(Object o) { [..] addPersistencyListener(new PersistencyAdapter() { // if active check leases public void onActivation(PersistencyEvent ev) { // check leases checkLeases(); try { deactivate(15000); } catch (Exception e) {} } // if deactive sleep public void onDeactivating(PersistencyEvent ev){ setText("Deactivated"); } }); [..] } LeaseChecker.java Seminar Softwareagenten

  12. 2.1 Reception – Praxis Seminar Softwareagenten

  13. 2.2 Worker Aufgaben • Bereitstellung entweder • eines Tahiti-Servers als Host für Clients • eines Dienstleistungs-Agletsfür Clients • Registrierung bei Reception • Regelmäßiges Erneuern des Leases bei der Reception Seminar Softwareagenten

  14. 2.2 Worker Lebenszyklus • onCreation() • „Holen“ des Reception-Proxies für spätere Kommunikation • Registrierung bei der Reception per „register“ Message • Erzeugen der Hilfsklasse WorkerLease • onDisposing() • beendet erst sein WorkerLease und dann sich selbst • Wichtig: Damit keine weitere Erneuerung des Leases erfolgt! Seminar Softwareagenten

  15. 2.2 WorkerLease Lebenszyklus • onActivation() • Erneuern der Lease per „renewlease“-Message • Deaktiviert sich für festgelegten Zeitraum => onActivation() addPersistencyListener(new PersistencyAdapter() { public void onActivation(PersistencyEvent ev) { Message leaseMessage = new Message("renewlease"); leaseMessage.setArg("ADRESS", getHostingURL()); reception.sendMessage(leaseMessage); deactivate(5000); } […] } WorkerLease.java Seminar Softwareagenten

  16. new Message(„register“) new Message(„renewLease“) Lease 2.2 Worker - Kommunikation Registrierung eines Workers bei der Reception Tahiti 1 Tahiti 2 Reception Worker Worker Lease getProperty(„Reception“) Seminar Softwareagenten

  17. 2.2 Worker – Praxis Seminar Softwareagenten

  18. 2.2 Worker – Erweiterbarkeit • Bisher: • Bereitstellung einer Tahiti-Umgebung als Host für Clientaufgaben, • z.B. für verteilte Berechnungen mit noch unbekanntem Programmcode • Zusätzlich jedoch erwünscht: • Registrieren beliebiger Anwendungen die Dienste im System anbieten möchten, z.B. ChatServer • Durch Erweiterung der Klasse Worker lässt sich in speziellen Dienste das Framework nutzen Seminar Softwareagenten

  19. 2.2 Worker – Erweiterbarkeit /** Used to handle specific worker messages */ protected boolean handleServiceMessages(Message msg) { […] return true; } /** What shall happen when service is registered */ protected void initialize() { […] } /** The name or identifier/signature of the service */ protected void serviceName() { name = "SpecialServiceWorker"; } • Überschreiben von 3 Methoden notwendig • Nötig da direktes überschreiben von onCreation() und handleMessage() Funktionalität zerstören würde Worker.java Seminar Softwareagenten

  20. 3 Clients • Clients wurden von uns realisiert als • MergeSort • nutzt freie registrierte Worker zur verteilten Verarbeitung des Sortierens • ChatClient – nutzt ChatServer-Dienst • nutzt konkreten registrierten Services, hier ChatServer, nicht mehr komplette Tahiti-Server Seminar Softwareagenten

  21. 3.1 MergeSort • bekannter Sortieralgorithmus • nutzt rekursive Aufteilung des zu sortierenden Arrays zur Arbeitsteilung • Idee:Slave-Aglets werden jeweils mit einer Hälfte des Arrays an freie Worker weiterverteilt Seminar Softwareagenten

  22. 3.1 MergeSort – Code […] slave1 = context.createAglet(this.getAgletContext().getHostingURL(), "workerpool.worker.mergesort.MergeWorker", half1); slave2 = context.createAglet(this.getAgletContext().getHostingURL(), "workerpool.worker.mergesort.MergeWorker", half2); // lookup two workers if there is a reception if (reception != null) { Message msg1 = new Message("lookup"); URL adress1 = (URL)reception.sendMessage(msg1); URL adress2 = (URL)reception.sendMessage(msg1); // dispatch those slaves to the worker machines slave1.dispatch(adress1); slave2.dispatch(adress2); […] } MergeSort.java

  23. 3.1 MergeSort – Praxis Seminar Softwareagenten

  24. 3.2 Chat • Idee: • Multi-User-Chat (ChatServer) • Aufzeigen der verschiedenen Arten der Kommunikation: • peer-to-peer Nachrichten (ChatClient) • synchron • asynchron • multicast Narichten (ChatClientMulitcast) • Umsetzung: • zur Registrierung Erweiterung der Klasse Worker • Überschreiben der oben aufgeführten Methoden Seminar Softwareagenten

  25. 3.2.1 ChatClient Lebenszyklus • onCreation() • „lookupServiceByName“-Message an Reception=> Antwort AgletProxy als RemoteRef auf ChatServer • gefundenem ChatServer „register“-Message schicken • run() • „chatten“ per „newtext“-Messages • empfängt „text“-Messages vom ChatServer • onDisposing() • sendet „unregister“-Message an den Server Seminar Softwareagenten

  26. 3.2.2 ChatClientMulticast • Idee • Multicast-Messages abonnieren und senden • Nutzung eines Message-Channels zum Empfang von Nachrichten • Besonderheit • keine Registrierung beim ChatServer, da Multicast-Nachrichten anonym empfangen werden können • „chatten“ eigentlich auch ohne ChatServer möglich • ChatSlave nötig der die Multicast-Nachrichten im AgletProxy des ChatServers ließt Seminar Softwareagenten

  27. 3.2.2 ChatClientMulticast Lebenszyklus • onCreation() • „lookup“-Message an Reception • Eigenen Slave kreieren und in AgletContext des ChatServers dispatchen • run() • Empfang von „text“-Multicast-Messages vom Slave • Senden der Texteingaben des Users an den Slave Seminar Softwareagenten

  28. 3.2.2 ChatClientMulticastSlave Lebenszyklus • onArrival() • Abonnieren der Multicast-Messages • Erneuerung des AgletProxies beim Master, da gewandert • run() • Senden der empfangenen „text“-Messages an seinen Master • Weitergabe der vom Master kommenden neuen Nachrichten per Multicast-Message Seminar Softwareagenten

  29. 3.2.2 CCMCSlave - Code • Hinzufügen des Mobility-Listeners für onArrival()-Vorgänge geschieht per: public void onCreation(Object o) { […] addMobilityListener(new MobilityAdapter() { public void onArrival(MobilityEvent ev) { subscribeMessage("text") Message msg = new Message("proxy", getProxy()); try { master.sendOnewayMessage(msg); } catch (Exception r) {;} } }); […] } ChatClientMulicastSlave.java Seminar Softwareagenten

  30. 3.2.3 ChatServer Idee: • Bietet ChatClients die Möglichkeit sich zu unterhalten • Kombiniert Multicast- und Peer-To-Peer-Messaging Umsetzung: • Registriert sich als spezieller Dienst bei der Reception • Erbt von Klasse Worker überschreibt drei Methoden Seminar Softwareagenten

  31. new Message(„lookup“, „ChatServer“) AgletProxy ChatServer new Message(„register“, „ChatServer“) 3.2 Chat – Architektur Tahiti 1 Tahiti 2 Tahiti 3 ChatClient Reception ChatServer Worker Lease Tahiti 4 ChatClient Multicast Lease Checker Seminar Softwareagenten

  32. new Message(„register“) URl ChatServer new Message(„lookup“, „ChatServer“) 3.2 Chat – Architektur Tahiti 1 Tahiti 2 Tahiti 3 ChatClient Reception ChatServer Worker Lease Tahiti 4 ChatClient Multicast Lease Checker ChatClient Multicast Slave Seminar Softwareagenten

  33. 3.2.3 ChatServer Lebenszyklus • onCreation() • registriet sich unter der Service-Signatur „ChatServer“ bei der Reception • run() • schickt ankommende „newtext“-Messages an alle registrierten Clients per „text“ peer-to-peer- und Multicast-Message • onDisposing() • „unregister“-Message an Reception (von Worker) Seminar Softwareagenten

  34. 3.2.3 ChatServer - Code protected void serviceName() { name = "ChatServer"; } protected void initialize() { subscribeMessage("newtext"); } public boolean handleServiceMessages(Message msg) { if (msg.sameKind("newclient")) { clients.add(msg.getArg()); } else if (msg.sameKind("text")) { Enumeration sendTo = clients.elements(); Message textmsg = new Message("text", msg.getArg()); getAgletContext().multicastMessage(textmsg); while (sendTo.hasMoreElements()) { AgletProxy proxy = (AgletProxy)sendTo.nextElement(); proxy.sendOnewayMessage(textmsg); } […] } […]} Seminar Softwareagenten ChatServer.java

  35. new Message(„text“) handleMessage(Message(„text“)) sendMulticast(new Message(„text“)) new Message(„text“) 3.2 Chat – Architektur Tahiti 1 Tahiti 2 Tahiti 3 ChatClient Reception ChatServer Worker Lease Tahiti 4 ChatClient Multicast Lease Checker ChatClient Multicast Slave Seminar Softwareagenten

  36. 3.2 Chat – Praxis Seminar Softwareagenten

  37. 4 Zusammenfassung • Bewertung • Einfaches Erstellen von Aglets • Proxy-Konzept hat Vor- und Nachteile • Tahiti-Sicherheitskonzept bisher ausgeblendet • Viele Möglichkeiten aufgrund der hohen Kompatibilität von Java • Vielen Dank für eure Aufmerksamkeit! • => Noch Fragen? Seminar Softwareagenten

More Related